以前に 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 拡張機能の開発は完了しました
著者マー・ベン