PHP拡張(SOコンポーネント)チュートリアルを迅速に開発

3586 ワード

本稿では、PHP 5.2環境の拡張(PHP Extension)をどのように作るかを非常に迅速に説明し、図文の方法で迅速に勉強したい友达に制作過程を理解してもらいたいと思います.
需要:例えばlanhaicodeという拡張を開発して、拡張の中で1つの関数lanhai_test()は、文字列を入力し、関数はYour input string:xxxxを返します.
要求:C/C++プログラミングを理解し、PHPプログラミングを熟知する
環境:php対応バージョンのソースコードをダウンロードします.php-5.2です.17、まずphpを正常にインストールし、私たちのphpが/usr/local/phpディレクトリにインストールされ、ソースコードが/root/soft/php/php-5.2であると仮定します.17/、今から!
php-5.2.17ダウンロード先:
http://blog.lrenwang.com/down/soft/php-5.2.17.tar.bz2
解凍:tar-vxjf php-5......tar.bz2
ステップ1:拡張フレームワークの生成

cd /root/soft/php/php-5.2.17/ext
./ext_skel --extname=lanhaicode
cd /root/soft/php/php-5.2.17/ext/lanhaicode
vi config.m4

ファイルを開いたらdnlを削除し、次の情報を取得します.

PHP_ARG_ENABLE(lanhaicode, whether to enable lanhaicode support,
[ --enable-lanhaicode Enable lanhaicode support])

保存終了
ステップ2:コードの作成

vi php_lanhaicode.h

見つかった:PHP_FUNCTION(confirm_lanhaicode_compiled); 新しい行:

PHP_FUNCTION(lanhai_test); 

保存を終了します.

vi lanhaicode.c

配列に関数を追加しzend_を見つけますfunction_entry lanhaicode_functions[],増加:

PHP_FE(lanhaicode, NULL)

またlanhaicodeに着きます.cファイルの最後尾に次のコードを追加します.

PHP_FUNCTION(lanhai_test)
{
char *arg = NULL;
int arg_len, len;
char *strg;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}

len = spprintf(&strg, 0, "Your input string: %s
", arg); RETURN_STRINGL(strg, len, 0); }

保存を終了します.
ステップ3:インストールのコンパイル

cd /root/soft/php/php-5.2.17/ext/lanhaicode
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make test
make install

(phpizeの場所が分からない場合は、コマンドfind/-name「phpize」を使用して検索します.検索されない場合は、php-develをインストールし、コマンド:yum-y install php-devel)
./configure中に次のエラーが発生しました.
checking for gcc... no
checking for cc... no
checking for cc... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
解決策:GCCソフトウェアキットをインストールし、コマンドを実行する:
yum install -y gcc
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/lanhaicodeがあるかどうか見てみましょう.so
phpを編集します.ini、拡張子を追加します.

vi /usr/local/php/lib/php.ini

[HP]モジュールで追加:
extension = lanhaicode.so
保存を終了します.
注意:拡張ファイルディレクトリが存在しないか、インストールエラーが発生していない場合は、自分でこのディレクトリを作成し、拡張をディレクトリの下にコピーしてphpを覚えておくことができます.iniファイルのextension_dirはこのディレクトリに変更されました.
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
ステップ4:インストール結果の確認
モジュールがロードされているかどうかを確認します.
/usr/local/php/bin/php-m、印刷されるはずです.
[PHP Modules]
...
lanhaicode
...
[Zend Modules]
次にapacheを再起動し、phpinfo()を出力します.
lanhaicode
lanhaicode support enabled
関数が存在し、呼び出すかどうかを見て、webディレクトリの下で確立します:lanhaicode.php

<?php
echo "<pre>";
print_r(get_loaded_extensions());
print_r(get_extension_funcs('lanhaicode'));
echo lanhai_test('My first php extension');
echo "</pre>";
?>