ホームページ  >  記事  >  バックエンド開発  >  独自のPHP拡張関数を作成する(1)_PHPチュートリアル

独自のPHP拡張関数を作成する(1)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:22:061061ブラウズ

独自の PHP 拡張関数を作成する Yorgo Sun 2002/01/22 私は長い間 PHP プログラムを書いているので、PHP が提供する機能については当然よく知っています。PHP が提供する多くの機能は非常に便利ですが、時々、PHP がそうであることに気づきます。いくつかの機能が欠けているので、私はいつもphpにいくつかのカスタム関数を追加するというアイデアを持っています。時間が経つにつれて、今日はついに我慢できなくなり、追加する方法を研究し始めました。 PHP ソース コード パッケージをダウンロードします。ここで使用するのは PHP バージョン 4.0.5 です。解凍すると、PHP のルート ディレクトリに README.EXT_SKEL のようなファイルが表示されます。これを開いて詳しく読んでください。非常に便利なツールです。このツールは空の php 拡張機能を構築するのに役立ち、それに対応するコードを追加して独自の関数拡張機能を完成させることができます。以下にこのツールの使い方を紹介します。 まず、ディレクトリを php ディレクトリの下の ext ディレクトリに転送します。基本的な拡張フレームワークのみが必要な場合は、次のコマンドを実行します。 ./ext_skel --extname=module_namemodule_name は、選択できる拡張モジュールの名前です。たとえば、私は選択しました。私のモジュール。ツールを実行すると、選択した module_name のディレクトリが ext ディレクトリに自動的に作成されます。これらのコードについては、config.m4 ファイル内の 3 行のコメントを調整するだけで済みます。このカスタマイズを使用して正常にコンパイルするには、PHP 用の拡張モジュールを使用します。 phpのルートディレクトリで以下の操作を行うことで取得できます。 ./buildconf./configure --enable-module_namemake 次に、my_module 拡張フレームワークを確立するプロセス全体を説明します。これをより効果的に行うために、PHP でこの関数を呼び出すと、hello が表示されます。古典的な言葉の世界。 php ディレクトリの下の ext ディレクトリで、次のコマンドを実行します。/ext_skel --extname=my_module でフィードバック結果を取得します。 ディレクトリ my_module の作成基本ファイルの作成: config.m4 Makefile.in .cvsignore my_module.c php_my_module.h testing/001 .phpt my_module.php [完了]。新しい拡張機能を使用するには、次の手順を実行する必要があります。1. $ vi ext/my_module/config.m43。 configure - -[with|enable]-my_module5. $ ./php -f ext/my_module/my_module.php7. $ make 満足するまで手順 3 ~ 6 を繰り返します。 ext/my_module/config.m4 で、モジュールが PHP にコンパイルされていることを確認します。次に、コードの作成を開始し、必要に応じて最後の 2 つの手順を繰り返します。上記の内容を理解できる場合は、それに従ってください。よく理解できない場合は、以下のヒントに従ってください。 Cd my_module まず my_module ディレクトリに移動します。 vi config.m4 テキスト エディタを使用して config.m4 ファイルを開きます。ファイルの内容はおおよそ次のとおりです。 dnl $Id$dnl 拡張子 my_modulednl の config.m4 PHP_EXTENSION(my_module) を呼び出すことを忘れないでください。 dnl このファイルのコメントは文字列 dnl.dnl で始まります。必要に応じて削除してください。このファイルは編集しないと機能しません。 dnl 拡張機能が外部のものを参照している場合は、次のように使用します。 dnl PHP_ARG_WITH(my_module support,dnl) コメントがis aligned:dnl [ - -with-my_module Include my_module support]) dnl それ以外の場合は、enable を使用します: dnl PHP_ARG_ENABLE(my_module, my_module support を有効にするかどうか,dnl コメントが aligned であることを確認してください:dnl [ --enable-my_module my_module support を有効にする]) if test "$ PHP_MY_MODULE" != "no"; then dnl dnl ヘッダー、ライブラリ、関数の存在など、外部のものをテストしない場合は、dnl の次の行のコメントを解除するだけで準備完了です。 dnl ここにテストの例をさらに書いてください... PHP_EXTENSION(my_module, $ext_shared)Fi dnl を変更します PHP_ARG_WITH(my_module, for my_module support,dnl コメントが整列していることを確認してください:dnl [ --with-my_module Include my_module support]) に従って独自の選択 PHP_ARG_WITH(my_module, for my_module support,コメントが整列していることを確認してください:[ --with-my_module Include my_module support]) または dnl PHP_ARG_ENABLE(my_module, my_module support を有効にするかどうか,dnl コメントが次であることを確認してくださいaligned:dnl [ --enable-my_module Enable my_module support]) は、PHP_ARG_ENABLE(my_module、my_module support を有効にするかどうか、コメントが整列していることを確認してください:[ --enable-my_module Enable my_module support]) に変更されます。通常は、後者を選択し、保存して終了します。 vi テキスト エディタの操作が難しい場合は、ここでは詳しく説明しませんが、対応する説明記事を参照してください。Vi my_module.c ファイル内の次のコードを変更します。 /* ユーザーに表示されるすべての関数には、my_module_functions[] にエントリが必要です。*/function_entry my_module_functions[] = { PHP_FE(say_hello, NULL) /* ß コード行を追加します*/ PHP_FE(confirm_my_module_compiled, NULL) /* テストのため、後で削除します。 */ {NULL, NULL, NULL} /* my_module_functions[] の最後の行である必要があります */}; ファイルの最後に次のコードを追加します。 Say_hello){ zend_printf("こんにちは、世界 ");} ファイルを保存して vi php_my_module.h を終了します。ファイル PHP_FUNCTION(confirm_my_module_compiled); の行 PHP_FUNCTION(say_hello) の前に次のコードを追加します。ファイルを保存して終了します。php のルート ディレクトリに戻り、次のコードを実行します。次のコマンド./buildconf./ configure --enable-my_modulemake すべてがうまくいけば、拡張モジュール my_module が php にコンパイルされました。テスト用に次のコードを記述します。ファイルをsay_hello.php として保存し、ルートで実行します。 php./php のディレクトリ -q Say_hello.php は、通常の状況では hello world を表示します。これは、最初の拡張機能が正常に実行されていることを示します。上記の操作を説明します。ext_skel はボックスの下にいくつかのファイルを生成します。次のファイル my_module を変更する必要があります。 c 拡張モジュールのメインプログラム php_my_module .h 拡張モジュールのヘッダファイル config.m4 設定ファイルのメインプログラムには、php 拡張モジュールの宣言、モジュールに含まれる関数の数、各関数の役割が記述されます。 phpinfo 関数に表示される内容、モジュールの初期化で行われる処理、および終了 実行することはすべてこのファイルに記述されます。上記で関数 Say_hello を追加し、say_hello 関数の具体的な内容を zend_printf システムと呼びました。対応するヘッダー ファイルの文字列を出力する関数です。これで、期待される関数が完成します。次に、指定されたパラメーターに従って、Xxxx が入力文字列の内容を表す PHP 拡張関数を作成します。たとえば、私の名前は yorgo です。Vi my_module.c は、最後の Say_hello 関数を次のように変更します。 PHP_FUNCTION(say_hello){ zval **yourname; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE) { WRONG_PARAM_COUNT ; } zend_printf("こんにちは、%s ", Z_STRVAL_PP(yourname));} 保存して終了します。php のルート ディレクトリに戻り、make を実行してsay_hello.php を Say_hello();?>保存して終了し、実行します。/php –q Say_hello.php で結果を取得します hello world, yorgo は今回の変更が成功したことを意味します。say_hello のパラメータを変更して動的効果を確認できます。ここでは、say_hello 関数にはパラメータの導入が必要なので、my_module の Say_hello 関数について説明します。 c は主にパラメータを処理します。php で Say_hello を参照するときに入力されたパラメータの内容は、my_module.c の Say_hello 処理関数に正しく渡されます。このために、これらの行がプログラムに追加されます。 ) != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE){WRONG_PARAM_COUNT;}zend_printf("こんにちは、%s ", Z_STRVAL_PP(yourname)); コードの説明は次のとおりです: zval **yourname; パラメータポインタ ZEND_NUM_ARGS() を初期化して渡されたパラメータの数を取得し、それが 1 でなければ問題があると判断しますzend_get_parameters_ex(1, &yourname) は、渡されたパラメータへの初期化されたポインタを指します。これが失敗すると、Z_STRVAL_PP(yourname) は、ポインタが指すパラメータを処理し、実際に格納された値を取得します。 (続き) オンラインでの転載は歓迎しますが、オフラインで公開する必要がある場合は、作者に連絡してください (http://www.ruisoft.com)。 Say_hello(“yorgo”);?>

http://www.bkjia.com/PHPjc/532359.htmlwww.bkjia.com
tru​​e
http://www.bkjia.com/PHPjc/532359.html

技術記事独自の PHP 拡張関数を作成する Yorgo Sun 2002/01/22 私は長い間 PHP プログラムを書いてきたので、PHP が提供する関数の多くは本当に便利です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。