探讨:如何编写PHP扩展_php技巧

May 17, 2016 am 09:01 AM
PHP拡張子 書く

用C/C++扩展PHP的优缺点:
优点:
效率,还是效率
减少PHP脚本的复杂度, 极端情况下, 你只需要在PHP脚本中,简单的调用一个扩展实现的函数,然后你所有的功能都就被扩展实现了
而缺点也是显而易见的:
开发复杂
可维护性降低
开发周期变长, 最简单的一个例子,当你用PHP脚本的时候, 如果你发现某个判断条件出错,你只要修改了这一行,保存,那么就立刻能见效。 而如果是在C/C++编写的PHP扩展中, 那你可需要,修改源码,重新编译,然后重新load进PHP, 然后重启Apache,才能见效。
如果你熟悉C,那么编写一个PHP扩展,并不是什么非常难的事情。 PHP本身就提供了一个框架,来简化你的开发。
最简单的方式来开始一个PHP扩展的开发,是使用PHP提供的扩展框架wizard ext_skel, 它会生成一个PHP扩展所必须的最基本的代码, 要使用它,首先你要下载PHP的源码,或者开发包, 进入PHP源码的ext目录, 就会发现这个工具。
生成一个扩展:
./ext_skel --extname=myext
进入/myext,选择扩展类型:
vi config.m4
下面两种类型选一个就行了:

复制代码 代码如下:

//(依赖外部库)
dnl PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
dnl [ --with-myext Include myext support])
//去掉dnl
 PHP_ARG_WITH(myext, for myext support,
 Make sure that the comment is aligned:
 [  --with-myext             Include myext support])

//或者将 //(不依赖外部库) dnl PHP_ARG_ENABLE(myext, whether to enable myext support,dnl Make sure that the comment is aligned:dnl [ --enable-myext Enable myext support])//去掉dnl
修改头文件php_myext.h:
//PHP_FUNCTION(confirm_myext_compiled); /* For testing, remove later. */
//修改为
PHP_FUNCTION(myext); /* For testing, remove later. */
修改myext.c:
//将
//zend_function_entry myext_functions[] = {
// PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */
// {NULL, NULL, NULL} /* Must be the last line in myext_functions[] */
//};
//修改为
zend_function_entry myext_functions[] = {
PHP_FE(myext, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in myext_functions[] */
};
//在文件底部添加自己的函数
PHP_FUNCTION(myext)
{
zend_printf("Hello World!\n");
}
安装自己的php扩展myext:
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install


修改php.ini,添加:
extension = "myext.so"
重启web服务器,查看phpinfo,即可看到自己的扩展:



新建测试php文件:

myext();

执行此文件,即可看到再熟悉不过的“Hello World!”。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでどの拡張子が使用されているかを確認する方法 PHPでどの拡張子が使用されているかを確認する方法 Aug 01, 2023 pm 04:13 PM

PHP で使用されている拡張子を確認するには、phpinfo() 関数の出力を表示し、コマンド ライン ツールを使用して、PHP 構成ファイルを確認します。 1. phpinfo() 関数の出力を表示し、単純な PHP スクリプトを作成し、このスクリプトを phpinfo.php として保存し、Web サーバーにアップロードします。ブラウザでこのファイルにアクセスし、ブラウザの検索機能を使用します。キーワードを探すだけです。ページ上の「extension」または「extension_loaded」で拡張機能に関する情報を見つけます。

C# を使用してブルーム フィルター アルゴリズムを作成する方法 C# を使用してブルーム フィルター アルゴリズムを作成する方法 Sep 21, 2023 am 10:24 AM

C# を使用してブルーム フィルター アルゴリズムを作成する方法 ブルーム フィルター (BloomFilter) は、要素がセットに属しているかどうかを判断するために使用できる、非常にスペース効率の高いデータ構造です。その基本的な考え方は、複数の独立したハッシュ関数を通じて要素をビット配列にマッピングし、対応するビット配列のビットを 1 としてマークすることです。要素が集合に属するかどうかを判断するには、対応するビット配列のビットがすべて 1 であるかどうかを判断するだけで済みます。いずれかのビットが 0 であれば、その要素は集合に含まれていないと判断できます。ブルームフィルターには高速なクエリがあり、

C言語でべき乗関数を計算するメソッドを書く C言語でべき乗関数を計算するメソッドを書く Feb 19, 2024 pm 01:00 PM

C言語でのべき乗関数の書き方 べき乗(べき乗)とは数学でよく使われる演算で、数値を複数回掛けることを意味します。 C 言語では、べき乗関数を記述することでこの関数を実装できます。 C言語でのべき乗関数の書き方と具体的なコード例を詳しく紹介します。関数の入力と出力を決定する 通常、べき乗関数の入力には基数と指数の 2 つのパラメーターが含まれ、出力は計算結果になります。したがって、私たちは

C# を使用して動的プログラミング アルゴリズムを作成する方法 C# を使用して動的プログラミング アルゴリズムを作成する方法 Sep 20, 2023 pm 04:03 PM

C# を使用して動的プログラミング アルゴリズムを作成する方法 概要: 動的プログラミングは、最適化問題を解決するための一般的なアルゴリズムであり、さまざまなシナリオに適しています。この記事では、C# を使用して動的プログラミング アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。 1. 動的プログラミング アルゴリズムとは何ですか? 動的プログラミング (DP) は、重複する部分問題と最適な部分構造特性を持つ問題を解決するために使用されるアルゴリズムのアイデアです。動的プログラミングでは、問題を解決するためのいくつかのサブ問題に分解し、各サブ問題の解決策を記録します。

C++ を使用して簡単な学生コース選択システムを作成するにはどうすればよいですか? C++ を使用して簡単な学生コース選択システムを作成するにはどうすればよいですか? Nov 02, 2023 am 10:54 AM

C++ を使用して簡単な学生コース選択システムを作成するにはどうすればよいですか?テクノロジーの継続的な発展に伴い、コンピュータープログラミングは必須のスキルとなっています。プログラミングを学習する過程で、シンプルな学生コース選択システムは、プログラミング言語をより深く理解し、応用するのに役立ちます。この記事では、C++ を使用して簡単な学生コース選択システムを作成する方法を紹介します。まず、この履修選択制度の機能と要件を明確にする必要があります。基本的な学生コース選択システムには通常、学生情報管理、コース情報管理、選択の部分が含まれます。

C++ を使用して簡単なホテル予約システムを作成するにはどうすればよいですか? C++ を使用して簡単なホテル予約システムを作成するにはどうすればよいですか? Nov 03, 2023 am 11:54 AM

ホテル予約システムは、ホテルの経営効率化とサービス向上を実現する重要な情報管理システムです。 C++ を使用して簡単なホテル予約システムを作成する方法を学びたい場合は、この記事で基本的なフレームワークと詳細な実装手順を説明します。ホテル予約システムの機能要件 ホテル予約システムを開発する前に、その実装のための機能要件を決定する必要があります。基本的なホテル予約システムには、少なくとも次の機能が実装されている必要があります。 (1) 部屋情報管理: 部屋タイプ、部屋番号、部屋など

PHP を使用して SuiteCRM のレポート生成機能を拡張する方法 PHP を使用して SuiteCRM のレポート生成機能を拡張する方法 Jul 19, 2023 am 10:27 AM

PHP を使用して SuiteCRM のレポート生成機能を拡張する方法 SuiteCRM は、企業が顧客関係を管理するのに役立つ豊富な機能を提供する強力なオープンソース CRM システムです。重要な機能の 1 つはレポート生成であり、レポートを使用することにより、企業はビジネス状況をより深く理解し、正しい意思決定を行うことができます。この記事では、PHP を使用して SuiteCRM のレポート生成機能を拡張する方法と、関連するコード例を紹介します。開始する前に、SuiteCRM がインストールされていることを確認する必要があります。

php を使用して PDO を拡張し、Oracle データベースに接続する方法 php を使用して PDO を拡張し、Oracle データベースに接続する方法 Jul 29, 2023 pm 07:21 PM

PHP を使用して PDO を拡張し、Oracle データベースに接続する方法 はじめに: PHP は非常に人気のあるサーバー側プログラミング言語であり、Oracle は一般的に使用されるリレーショナル データベース管理システムです。この記事では、PHP 拡張機能 PDO (PHPDataObjects) を使用して Oracle データベースに接続する方法を紹介します。 1. PDO_OCI 拡張機能のインストール Oracle データベースに接続するには、まず PDO_OCI 拡張機能をインストールする必要があります。 PDO_OCI 拡張機能をインストールする手順は次のとおりです。

See all articles