ホームページ >バックエンド開発 >PHPチュートリアル >C/C++ を使用して Windows で PHP 拡張機能を開発する

C/C++ を使用して Windows で PHP 拡張機能を開発する

WBOY
WBOYオリジナル
2016-08-08 09:29:041235ブラウズ

1: 必要なツール:

cygwin、Windows プラットフォーム上で実行される Unix 風のシミュレーション環境
php ソースコード (圧縮パッケージ)
php バイナリ ファイル、Windows にインストールされた php です
vs2008 以降 (vs2010、vs2013)
win32build.rar と bindinglib_win32.rar (主に config.win32.h の生成に使用されます)

2: 構成プロセス

1: PHP ソース コードを解凍します。これは、PHP の開発を担当するディレクトリです。ディレクトリには、すべての拡張機能と 2 つのファイルのデフォルトのソース コードがあります。 ext_skel_win32.php および ext_skel ファイル
ext_skel は拡張機能を作成するためのシェルであり、Windows では実行できないため、Unix 環境をシミュレートするには cygwin を使用する必要があります

2: 解凍後、ext ディレクトリに独自の拡張機能ディレクトリを生成する必要があります。 win+r cmd でコマンドラインに直接入力し、 cd で ext ディレクトリにジャンプし、次のコマンドを入力します。

php ext_skel_win32.php –extname=myext または
php.exe ext_skel_win32.php –extname=myext

ここで間違いやすいです

まず第一に、php と php.exe は Windows にインストールされている php を指します。そのルート ディレクトリには php ファイルを解析するために使用される php.exe があるため、インストールされた php ディレクトリを環境変数に設定する必要があります。

次に、cygwin がインストールされていない、または cygwin がセットアップされていない場合、次のエラーが発生します。したがって、cygwin をインストールし、PHP ソース コードの ext ディレクトリにある ext_skel_win32.php を開く必要があります。 $cygwin_path = “c:/cygwin/bin” という変数を、インストールしたディレクトリに変更して保存します。もう一度お試しください

それでもエラーが発生する場合は、この画像を見て間違いがないか確認してください。


すべてが完了した後に次の状況が発生した場合、拡張機能ディレクトリ(スケルトン)が正常に作成されたことを意味します。


に含まれるディレクトリは次のようになり、変更する必要がある2つのファイルは次のとおりです。矢印で示されています)


3: 依存する php5ts.lib を追加します php バイナリ パッケージの dev ディレクトリにある php5ts.lib を拡張ディレクトリにコピーします

4: (1) php_hello.h ファイルを変更します
新しい関数を拡張します: PHP_FUNCTION(confirm_myhello_compiled); の行の後に行を追加します。 (2) hello.cファイルを修正

配列 zend_function_entry myhello_functions[] に行を追加します

<code>1. zend_function_entry myhello_functions[] = {  
2.     PHP_FE(confirm_myhello_compiled,    NULL)        /* For testing, remove later. */  
3.     PHP_FE(hello, NULL) // 新增的行  
4.     {NULL, NULL, NULL}    /* Must be the last line in myhello_functions[] */  
5. };  
</code>

PHP_FUNCTION(confirm_myhello_compiled) の後に新しい関数を追加します
<code>1. PHP_FUNCTION(hello){  
2.     php_printf(”Hello C extension”);  
3. }  
4. 
</code>

5: DLL 拡張ファイルをビルドします 次の手順では、vs2008 で hello.dsp を開き、コンパイル モードを Release_TS として選択してコンパイルを開始するか、コマンド ラインから ext/hello と入力して msdev hello.dsp /MAKE "hello - Win32" を実行します。 Release_TS" が成功すると、ext と同じレベルのディレクトリである Release_TS に php_hello.dll が生成されます。

この時点で、主要なタスクは基本的に完了しましたが、ここはエラーが最も発生する可能性が高い場所でもあります。

最も一般的なエラーは、コンパイル中に「インクルード ファイル "../main/config.win32.h" を開けません」というメッセージが表示され、その結果、メイン フォルダーにそのようなファイルが存在しないことです。

したがって、win32build.rar と bindinglib_win32.rar の両方を PHP ソース コードの win32/build ディレクトリに解凍し、win32/build を環境変数に追加します
「cmd」と入力してphpソースコードディレクトリに移動し、「
」と入力します。 cscript /nologo configure.js –with-php-build=”../win32build” –without-libxml –disable-odbc Enter キーを押すと表示される場合があります



は、cl.exe が見つからないことを意味するため、インストールされている vs2008 ディレクトリ内の bin ディレクトリを環境変数に追加します。私のマシンでは、「D:vs2008VCbin」になります。再度実行しても、画像が見つからないというエラーが報告される可能性があります。 。一般的な意味は、C++ コンパイラーが少なくとも vc9.0 (vs2008) であるため、vs2008 以降のコンパイラーを使用するようにしてください
実行を継続します:

このファイルは Microsoft Visual Studio 10.0Common7IDE ディレクトリにあります。 、VCbin ディレクトリにコピーできます。ステートメントの実行を正常に続行します。 D:php ソース コードのメイン ディレクトリに config.win32.h ファイルを生成します。
config.win32.h を開きます: 内部を検索します

vc10 を使用してコンパイルする場合は、それを

に変更する必要があります

最終的に問題を解決し、コンパイルしました。 。成功したら、DLL を生成します。
しかし、それでもコンパイルの問題が発生し、致命的なエラー c1902: プログラム データベース マネージャーが一致しません。 。
とても大変でした。Baidu を通じて CSDN フォーラムで同じ問題を見つけて、最終的にはこのように解決しました。
mspdbsrv.exe または mspdbcore.dll が見つからないか、またはそのバージョンが mspdb80.dll のバージョンと異なっています。これら 3 つのファイルの同じバージョンがシステムにインストールされていることを確認してください。
これら 3 つのファイルを、VC インストール ディレクトリの下の Common7IDE ディレクトリから、インストール ディレクトリの下の VCbin にコピーします
すべての問題が解決され、php_hello.dll のコンパイルに成功しました

6: 最後に、それをバイナリ php ディレクトリの下の ext ディレクトリにコピーし、php.ini を開いて、extension=php_hello.dll を追加しました
Apache を再起動し、関数をテストします。

追記:その時にテストした関数はcock()でした

出力結果:

これで終わりです。 。 。この問題に取り組むのは本当にクレイジーでした。幸いなことに、私は根気強く何度も問題を解決しようとして、ついに成功しました。参考のために、私が遭遇したすべての問題を投稿しました。 PHP 拡張機能は非常に楽しいので、独自の PHP 関数を開発できます。ただし、前提として、C/C++ をよく学ぶ必要があります。 。 。とにかく、ゆっくり時間をかけて、みんなの成功を祈ってください~

上記では、Windows 上で PHP 拡張機能を開発するための c/c++ の使用方法を、内容の側面も含めて紹介しており、PHP チュートリアルに興味のある友人に役立つことを願っています。

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