ホームページ  >  記事  >  バックエンド開発  >  C 言語を使用して PHP を拡張し、PHP 拡張機能 dll_PHP チュートリアルを作成する

C 言語を使用して PHP を拡張し、PHP 拡張機能 dll_PHP チュートリアルを作成する

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

以前に PHP 拡張 DLL を作成したことがありますが、これは呼び出し元システムの COM ポートを使用して実装された拡張機能であり、PHP と完全に統合することはできません。思いつきで、PHP のソースコードを調べ、インターネットで情報を見つけて、自分で拡張 DLL を書いてみました。テストは問題ありませんでした。以下の具体的な拡張メソッドを記録してください:

1. まず、www.php.net Web サイトから php ソース コードをダウンロードします。ここでは php-5.2.17 バージョンを例に挙げます。ダウンロード後、それを E: ディスクのルート ディレクトリに解凍します (ディレクトリは次のとおりです)。自分で決めます)。

2. VC++ 6.0 をダウンロードしてインストールします。PHP ソース コードはバージョン 6.0 を使用して記述されているため、このバージョンでコンパイルしても問題は発生しません。他のバージョンはテストされていません。

3. VC++ 6.0 インストール ディレクトリ内の Microsoft Visual StudioCommonMSDev98Bin の絶対パスをシステム環境変数に追加します。

4. E:php-5.2.17ext ディレクトリに入り、スケルトン フォルダーをコピーし、その名前を開発する拡張機能の名前 (この場合は「myfun」) に変更します。

5.skeleton.c の名前を myfun.c に、skeleton.dsp の名前を myfun.dsp に変更します

6. myfun ディレクトリ内の 3 つのファイル php_skeleton.h、myfun.c、myfun.dsp を編集し、コンテンツ内のすべての extname を myfun に、EXTNAME を MYFUN に置き換えます。 (大文字と小文字を厳密に区別してください)

コーディング段階に入りましょう:

7. php_skeleton.h ファイル (ヘッダー ファイル) を開き、PHP_FUNCTION(confirm_myfun_compiled); を見つけ、PHP_FUNCTION(confirm_myfun_compiled); 内に以下の PHP_FUNCTION(mb_MessageBox) を記述し、mb_MessageBox 関数を宣言します。この関数の機能は js を出力することだけです。テスト用にアラート メッセージ ボックスをポップアップ表示します。

8. 以下の関数入口を定義し、myfun.c ファイルを開き、PHP_FE(confirm_myfun_compiled,NULL) を見つけて、以下に PHP_FE(mb_MessageBox,NULL) を記述します。ここで、PHP_FE は定義されたマクロであるため、引用符を追加する必要はありません。その後。

9. myfun.c の最後に関数のエンティティ部分を記述します:

リーリー

PHP_FUNCTION(mb_MessageBox)

{

char *arg = NULL;

int arg_len, len;

char *strg;

If (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {

戻る;

}

len = spprintf(&strg, 0, "<script>alert('%s')</script>",arg); //これは入力された JS コードです

RETURN_STRINGL(strg, len, 0);

}

コードの記述が完了したので、コンパイルを開始しましょう:

10. [スタート]、[ファイル名を指定して実行] の順に選択し、「CMD」と入力してコマンド ライン ウィンドウを開きます。

11. myfun のディレクトリに移動し、msdev myfun.dsp /MAKE "myfun - Win32 Release_TS" と入力し、Enter キーを押してコンパイルします。

12. エラーがなければ、Release_TS フォルダーが E:php-5.2.17 の下に生成され、その中に php_myfun.dll ファイルがあります。

この時点で、拡張 DLL の開発は完了しました。PHP でテストしてみましょう:

13. php_myfun.dll を元の php ディレクトリの ext フォルダーにコピーします。

14. php.ini ファイルを開き、現在の DLL 拡張子 extension=php_myfun.dll を追加します

15. IIS または Apache を再起動し、Web サイトのディレクトリに新しいファイルを作成し、次の内容を入力します。

echo mb_MessageBox("Ma Ben による PHP 拡張 DLL のテスト");

?>

リーリー

参照して効果を確認してください。以下に 4 つの写真が添付されています:

拡張機能を追加:

phpコード:

最終的な効果:

phpinfo の拡張情報:

この時点で、php 拡張機能の開発は完了しました

著者マー・ベン

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478514.html技術記事以前に PHP 拡張 DLL を作成したことがありますが、これは呼び出し元システムの COM ポートを使用して実装された拡張機能であり、PHP と完全に統合することはできませんでした。気まぐれに、PHP のソース コードを調べて、オンラインでいくつかの情報を見つけました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。