ホームページ > バックエンド開発 > PHPチュートリアル > VC9 および VC11 を使用して、Windows システムで 32 ビット、64 ビットの PHP およびその拡張機能をコンパイルします。

VC9 および VC11 を使用して、Windows システムで 32 ビット、64 ビットの PHP およびその拡張機能をコンパイルします。

WBOY
リリース: 2016-06-20 12:38:16
オリジナル
2267 人が閲覧しました

AOP を実装するにはプロジェクトで runkit モジュールを使用する必要がありますが、チーム メンバーの開発環境は Windows であり、runkit モジュールは Windows 環境で正式に DLL 拡張機能を提供していないため、自分でコンパイルすることしかできません。

以下は、コンパイルプロセスの分類の概要です。 (OS環境はWindows 10 64-bit Chinese Ultimate Editionです)

  • ここでいうPHPのコンパイル済みバージョンとは、5.3や7.0などのリリース版のPHPを指します。コンパイラ、プログラム アーキテクチャ、およびスレッド セーフかどうかに使用されるバージョンを指します。 この情報は phpinfo で出力できます。 上の図で使用されている PHP は、Microsoft Visual 2012 の MSVC11 を使用してコンパイルされています。プログラム アーキテクチャは x86 (つまり 32 ビット) で、非スレッド セーフ (NTS) です。 上の図の PHP は、Microsoft Visual 2012 の MSVC11 を使用してコンパイルされています。プログラム アーキテクチャは x64 (つまり 64 ビット) で、スレッド セーフ (TS) です。 上の図は少し異なります。コンパイラのバージョンとプログラム アーキテクチャを説明する特別なリスト項目はありません。関連する情報はコンパイル時の設定からのみ確認できます。ここでの PHP は、Microsoft Visual 6 の MSVC6 を使用してコンパイルされています。プログラム アーキテクチャは x86 (つまり 32 ビット) で、スレッド セーフ (スレッド セーフ = 有効) です。 最後のプログラムは、Microsoft Visual 2008 の MSVC9 を使用してコンパイルされました。プログラム アーキテクチャは x86 (つまり 32 ビット) で、スレッド セーフ (TS) です。 この記事では、MSVC9 と MSVC11 のコンパイルの 2 つのケースについてのみ説明します。
  • PHP-SDK と PHP ソース コードを準備する PHP のどのバージョンがコンパイルされるかに関係なく、次の手順が必要です。
    • PHP-SDK をダウンロードします: ダウンロード アドレスは http://windows.php.net/downloads/php-sdk/ にあり、php-sdk-binary-tools-20110915.zip をダウンロードします
    • C:php-sdk フォルダーに解凍します
    • コマンド ラインを開き、次のコマンドを実行します:

      cd c:php-sdk

      binphpsdk_buildtree.bat phpdev

      phpdev フォルダーは、vc6、vc8、および vc9 サブフォルダーを含む c:php-sdk フォルダーの下に生成されます。

      MSVC11 を使用して PHP をコンパイルする場合は、c:php-sdkphpdevvc9 を c:php-sdkphpdevvc11 にコピーします。

      MSVC14 を使用して PHP をコンパイルする場合は、c:php-sdkphpdevvc9 を c:php-sdkphpdevvc14 にコピーします。

    • 対応するバージョンの PHP のコンパイル時依存関係パッケージをダウンロードします。ダウンロード アドレスについては、http://windows.php.net/downloads/php-sdk/ を参照してください。 対応するコンパイル フォルダーの下の x86 フォルダーまたは x64 フォルダーに解凍し、その中の deps フォルダーを上書きします。 32 ビット バージョンの php5.4.x をコンパイルする場合は、deps-5.4-vc9-x86.7z を解凍してください。 php5.5.x の bit バージョンを解凍します。deps-5.6-vc11-x64.7z などです。 php5.4.x と php5.3.x は通常、vc9 を使用してコンパイルする必要があるため、依存関係ファイルは c:php-sdkphpdevvc9x86 または c:php-sdkphpdevvc9x64 に抽出されます。 php5.5.x と php5.6.x は通常、vc11 を使用してコンパイルする必要があるため、依存関係ファイルは c:php-sdkphpdevvc11x86 または c:php-sdkphpdevvc11x64 に抽出されます。 PHP7.0.x は vc14 コンパイルを必要とするため、その依存関係ファイルを c:php-sdkphpdevvc14x86 または c:php-sdkphpdevvc14x64 に解凍する必要があります。
    • 必要な PHP ソース ファイルを http://windows.php.net/download/、http://php.net/downloads.php、http://php.net/releases/、http からダウンロードします。 ://windows.php.net/downloads/releases/archives/ はいくつかの場所にあります。 対応するコンパイル フォルダーに解凍します。 例: php-5.4.45.tar.gz を c:php-sdkphpdevvc9x86php-5.4.45 または c:php-sdkphpdevvc9x64php-5.4.45 に解凍して、それぞれ 32 ビット バージョンと 64 ビット バージョンをコンパイルします。 php-5.6.16.tar.gz を c:php-sdkphpdevvc11x86php-5.6.16 または c:php-sdkphpdevvc11x64php-5.6.16 に解凍します。
    • PHP 拡張機能をコンパイルしている場合は、対応するアドレスに移動してソース コードをダウンロードします。この記事では、runkit を例として説明します。ダウンロード アドレスは http://pecl.php.net/package/runkit です。 。 ダウンロードしたソースコードを、PHP ソースコードの ext フォルダーに展開します。この例では、c:php-sdkphpdevvc9x86php-5.4.45extrunkit、c:php-sdkphpdevvc9x64php-5.4.45extrunkit、および c:php-sdkphpdevvc11x86php-5.6 に展開します。 .16extrunkit、c:php-sdkphpdevvc11x64php-5.6.16extrunkit。
  • コンパイル環境を準備します:
    • MSVC9 を使用して PHP をコンパイルするには、Windows SDK 6.1 をダウンロードしてインストールする必要があります。オンライン インストール バージョンはこのアドレスからダウンロードされます。

      http://download.microsoft.com/download/a/4/2/a4282359-1d35-4648-a7a7-d85e3bfe81ac/6.0.6001.16621.148.WindowsSDK_LonghornServer_IDS04_idw.WindowsSDK.DVD.Release からダウンロードすることもできます。 .iso オフライン インストール パッケージ。

      32 ビット バージョンをコンパイルする必要がある場合は、Windows SDK 6.1 をインストールするときに必ず x86 コンパイラーのインストールを選択してください。そうしないと、cl.exe が見つからないという問題が発生します。
    • MSVC11 を使用して PHP をコンパイルするには、Windows デスクトップ用の Visual Studio 2012 Express をダウンロードできます。これには、オンライン インストール バージョンとオフライン インストール バージョン (ISO) があります。
    • 2 つのツールは競合せず、同じシステムに同時にインストールできます。

以下は、怠け者の学生が図に従って学ぶことができるように、特定のコンパイル手順を示します。)

  • MSVC9 を使用して 32 ビット バージョンの PHP5.4.33 をコンパイルします (この場合、runkit.dll をコンパイルします)
    • Windows SDK 6.1 をインストールし、インストール中に必ず x86 コンパイラを選択してください。
    • ダウンロードした php-sdk-binary-tools-20110915.zip を c:php-sdk に解凍します。
    • Windows コマンドラインを開き、次のコマンドを入力します: cd c:php-sdk binphpsdk_buildtree.bat phpdev
    • ダウンロードした php-5.4.45.tar.gz を c:php- に解凍します。 sdkphpdevvc9x86php -5.4.45。
    • ダウンロードした deps-5.4-vc9-x86.7z を c:php-sdkphpdevvc9x86deps に解凍し、元の deps フォルダーに上書きします。
    • ダウンロードした http://pecl.php.net/get/runkit-1.0.4.tgz を c:php-sdkphpdevvc9x86php-5.4.45ext フォルダーに解凍します。このバージョンが含まれないように注意してください。いいえ、この例は runkit-1.0.4 ではなく runkit にする必要があります。
    • c:php-sdkphpdevvc9x86 の下に obj フォルダーを作成し、最終的な php.exe および関連 DLL ファイルを保存します。
    • スタート メニューをクリックし、[Microsoft Windows SDK V6.1]>[CMD シェル] を選択して、コンパイル コマンド ラインを開始します。
    • 次のコマンドを入力します: setenv /x86 /xp /release (このコマンドが正常に実行されると、コマンド ラインのテキストが緑色に変わります) cd c:php-sdk binphpsdk_setvars.bat cd phpdevvc9x86php-5.4.45 buildconf configure --disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..obj 非スレッドセーフ バージョン (nts バージョン) をコンパイルするには、最後の行を置き換えます。上記はconfigure - -disable-all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..objで最後にnmakeを実行します
    • リリースがありますobj (スレッド セーフ バージョン - ts バージョン) または Release_nts (非スレッド セーフ バージョン - nts バージョン) フォルダー内にあり、php.exe と php-runkit.dll がコンパイル結果になります。
    • php-runkit.dll ファイルを PHP インストール フォルダーの ext フォルダーに置き、php.ini を変更し、extension=php_runkit.dll を追加して、PHP サービスを再起動します。
  • MSVC9 を使用して 64 ビット バージョンの PHP5.4.33 をコンパイルします (この場合、runkit.dll をコンパイルします)
    • Windows SDK 6.1 をインストールします。インストール時に x86 コンパイラーを選択します。
    • ダウンロードした php-sdk-binary-tools-20110915.zip を c:php-sdk に解凍します。
    • Windows コマンドラインを開き、次のコマンドを入力します: cd c:php-sdk binphpsdk_buildtree.bat phpdev
    • ダウンロードした php-5.4.45.tar.gz を c:php- に解凍します。 sdkphpdevvc9x64php -5.4.45。
    • ダウンロードした deps-5.4-vc9-x86.7z を c:php-sdkphpdevvc9x64deps に解凍し、元の deps フォルダーに上書きします。
    • ダウンロードした http://pecl.php.net/get/runkit-1.0.4.tgz を c:php-sdkphpdevvc9x64php-5.4.45ext フォルダーに解凍します。このバージョンが含まれないように注意してください。いいえ、この例は runkit-1.0.4 ではなく runkit にする必要があります。
    • c:php-sdkphpdevvc9x64 の下に obj フォルダーを作成し、最終的な php.exe および関連 DLL ファイルを保存します。
    • スタート メニューをクリックし、[Microsoft Windows SDK V6.1]>[CMD シェル] を選択して、コンパイル コマンド ラインを開始します。
    • 次のコマンドを入力します。 上記の 32 ビット プログラムのコンパイルとの明らかな違いは、setenv /x86 /xp /release cd c:php-sdk binphpsdk_setvars.bat cd phpdevvc9x64php-5.4 を実行する必要がないことです。 .45 buildconf configure -- disable-all --enable-cli --enable-runkit=shared --enable-object-out-dir=..obj 非スレッドセーフ バージョン (nts バージョン) をコンパイルするには、上の最後の行は、configure --disable -all --enable-cli --enable-runkit=shared --disable-zts --enable-object-out-dir=..obj で最後に nmake
    • を実行します。 obj -ts バージョン) または Release_nts (非スレッドセーフ バージョン -nts バージョン) フォルダー内の Release (スレッドセーフ バージョン) フォルダーであり、php.exe と php-runkit.dll がコンパイル結果になります。
    • php-runkit.dll ファイルを PHP インストール フォルダーの ext フォルダーに置き、php.ini を変更し、extension=php_runkit.dll を追加して、PHP サービスを再起動します。
  • MSVC11 を使用して 32 ビット バージョンの PHP5.4.33 をコンパイルします (この場合、runkit.dll をコンパイルします)
    • Windows デスクトップ用の Visual Studio 2012 Express をインストールします。
    • ダウンロードした php-sdk-binary-tools-20110915.zip を c:php-sdk に解凍します。
    • Windows コマンドラインを開き、次のコマンドを入力します: cd c:php-sdk binphpsdk_buildtree.bat phpdev
    • ダウンロードした php-5.6.16.tar.gz を c:php- に解凍します。 sdkphpdevvc11x64php -5.6.16。
    • ダウンロードした deps-5.6-vc11-x64.7z を c:php-sdkphpdevvc11x64deps に解凍し、元の deps フォルダーに上書きします。
    • ダウンロードした http://pecl.php.net/get/runkit-1.0.4.tgz を c:php-sdkphpdevvc11x64php-5.6.16ext フォルダーに解凍します。このバージョンが含まれないように注意してください。いいえ、この例は runkit-1.0.4 ではなく runkit にする必要があります。
    • c:php-sdkphpdevvc11x64 の下に obj フォルダーを作成し、最終的な php.exe および関連 DLL ファイルを保存します。
    • [スタート] メニューをクリックし、[Microsoft Visual Studio 2012] > [Visual Studio ツール] > [VS2012 x64 Cross Tools コマンド プロンプト] を選択し、コンパイル コマンド ラインを開始します。
    • 次のコマンドを入力します: cd c:php-sdk binphpsdk_setvars.bat cd phpdevvc11x64php-5.6.16 buildconf configure --disable-all --enable-cli --enable-runkit=shared --enable-object - out-dir=..obj 非スレッドセーフ バージョン (nts バージョン) をコンパイルする場合は、上の最後の行を configure --disable-all --enable-cli --enable-runkit=shared に置き換えます。 -disable-zts --enable-object-out-dir=..obj 最後に nmake を実行します
    • Release (スレッドセーフ バージョン-ts バージョン) または Release_nts (非スレッドセーフ バージョン-nts) がありますversion) フォルダーが obj にあり、その中に php .exe と php-runkit.dll がコンパイル結果になります。
    • php-runkit.dll ファイルを PHP インストール フォルダーの ext フォルダーに置き、php.ini を変更し、extension=php_runkit.dll を追加して、PHP サービスを再起動します。
  • MSVC11 を使用して 64 ビット バージョンの PHP5.4.33 をコンパイルします (この場合、runkit.dll をコンパイルします)
    • Windows デスクトップ用の Visual Studio 2012 Express をインストールします。
    • ダウンロードした php-sdk-binary-tools-20110915.zip を c:php-sdk に解凍します。
    • Windows コマンドラインを開き、次のコマンドを入力します: cd c:php-sdk binphpsdk_buildtree.bat phpdev
    • ダウンロードした php-5.6.16.tar.gz を c:php- に解凍します。 sdkphpdevvc11x86php -5.6.16。
    • ダウンロードした deps-5.6-vc11-x86.7z を c:php-sdkphpdevvc11x86deps に解凍し、元の deps フォルダーに上書きします。
    • ダウンロードした http://pecl.php.net/get/runkit-1.0.4.tgz を c:php-sdkphpdevvc11x86php-5.6.16ext フォルダーに解凍します。このバージョンが含まれないように注意してください。いいえ、この例は runkit-1.0.4 ではなく runkit にする必要があります。
    • c:php-sdkphpdevvc11x86 の下に obj フォルダーを作成し、最終的な php.exe および関連 DLL ファイルを保存します。
    • [スタート] メニューをクリックし、[Microsoft Visual Studio 2012] > [Visual Studio ツール] > [VS2012 x86 ネイティブ ツール コマンド プロンプト] を選択し、コンパイル コマンド ラインを開始します。
    • 次のコマンドを入力します: cd c:php-sdk binphpsdk_setvars.bat cd phpdevvc11x86php-5.6.16 buildconf configure --disable-all --enable-cli --enable-runkit=shared --enable-object - out-dir=..obj 非スレッドセーフ バージョン (nts バージョン) をコンパイルする場合は、上の最後の行を configure --disable-all --enable-cli --enable-runkit=shared に置き換えます。 -disable-zts --enable-object-out-dir=..obj 最後に nmake を実行します
    • Release (スレッドセーフ バージョン-ts バージョン) または Release_nts (非スレッドセーフ バージョン-nts) がありますversion) フォルダーが obj にあり、その中に php .exe と php-runkit.dll がコンパイル結果になります。
    • php-runkit.dll ファイルを PHP インストール フォルダーの ext フォルダーに置き、php.ini を変更し、extension=php_runkit.dll を追加して、PHP サービスを再起動します。

考えられる問題:

  • 「ファイル拡張子 ".js" のスクリプト エンジンがありません」というエラーが発生した場合は、Windows の jscript を意味します。エンジンが正しく登録されていません。次の手順に従って問題を解決できます:
    • 管理者としてコマンド ラインを開きます:
    • 次のコマンドを実行します:

      regsvr32 %WINDIR%System32jscript .dllregsvr32 %WINDIR%SysWOW64jscript .dll

    • 次の内容を含む jscript.reg ファイルを生成します:

      Windows レジストリ エディター バージョン 5.00

      [HKEY_CLASSES_ROOT.js]@= jsfile"

      [HKEY_CLASSES_ROOT.jsPersistentHandler]@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"

      [HKEY_CLASSES_ROOTJSFile]

      " フレンドlyTypeName"= hex(2): 40 ,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,

      00,6f,00 ,6f,00,74 ,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,

      32,00,5c ,00,77,00,73,00,68,00,65,00,78,00,74,00,2e,00,64,00,6c,00,6c,00,2c ,

      00,2d,00,34,00,38,00,30,00,34,00,00,00

      [HKEY_CLASSES_ROOTJSFileScriptEngine]@="JScript"

      [HKEY_CLASSES_ROOTJSFileScriptHostEncode]@="{85131630-480C-11D2-B1F9-00C04F86C324}"

      [HKEY_CLASSES_ROOTJSFileShell]@="開く"

      >[HKEY_CLASSES_ROOTJSファイル ShellOpenCommand]

      @ =hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f ,00,74,00, 25,

      00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32 ,00,5c,00, 57,00,53,00,

      63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78 ,00,65,00, 20,00,22,00,25,00,31,

      00,22,00,20,00,25,00,2a,00,00,00

      [HKEY_CLASSES_ROOTJSFileShellOpen2]

      @=hex(2):4f,00,70,00,65,00,6e,00,20,00,26,00, 77,00,69,00 ,74,00,68,00,20,00,43,

      00,6f,00,6d,00,6d,00,61,00,6e,00, 64,00,20,00 ,50,00,72,00,6f,00,6d,00,70,00,

      74,00,00,00

      「MUIVerb」 =hex(2):40 ,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,

      6f,00,74 ,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00, 5c,

      00,77,00,73,00,68,00,65,00,78,00,74,00,2e,00,64,00,6c,00,6c,00, 2c,00,2d,00 ,

      34,00,35,00,31,00,31,00,00,00

      [HKEY_CLASSES_ROOTJSFileShellOpen2Command]

      @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00, 52,00,6f,00,6f,00,74,00,25,

      00,5c,00,53,00,79,00,73,00,74,00,65,00, 6d,00,33,00,32,00,5c,00,43,00,53,00,

      63,00,72,00,69,00,70,00,74,00, 2e,00,65,00,78,00,65,00,20,00,22,00,25,00,31,

      00,22,00,20,00,25,00, 2a,00,00,00

      [HKEY_CLASSES_ROOTJSFileShellPrintCommand]

      @=hex(2):25,00,53,00,79,00,73,00 ,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,

      00,5c,00,53,00,79,00 ,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,6f,00,

      74,00,65,00 ,70,00,61,00,64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,70,00,20,

      00 ,25,00,31,00,00,00

      [HKEY_CLASSES_ROOTJSFileShellExDropHandler]@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

      [HKEY_CLASSES_ROOTJSFile] ShellExPropertySheetHandlersWSHProps]@= "{60254CA5-953B-11CF-8C96-00AA00B8708C}"

      [HKEY_CLASSES_ROOTJScript]@="JScript 言語"

      [HKEY_CLASSES_ROOTJScriptCLSID]@="{f414c260-6ac0-11cf-b6d1- 00aa00bbbb58 }"

      [HKEY_CLASSES_ROOTJScriptOLEScript]

    • このファイルは、点で決定され、すぐに注釈テーブルに挿入されます。
  • 使用中の場合MSVC9 编译32 位 PHP 時、cl.exe を確認しています ... 错误、就表示 Windows SDK 6.1 のインストール時、忘却选择x86编译器。
PS:

    以上のステップでは、部活動班を必要としないものが多くあり、特にファイル構造です。c:php-sdk は、任意の文字の下に置くことができます。実行一上:x:php-sdkbinphp-setvars.bat は可能です(x:=php-sdk の場所の盘符)。
  • phpdev およびその下の各階層のファイルも不要です。 deps と php ソース コードは、最後に実行された結果を確認しやすいように同じファイル内に配置する必要があります。下に配置、obj および php-5.6.16 子ファイル (嗯、obj 配置も無谓、評価時に出力結果の位置を直接 obj に指定します)、php-5.6.16 ファイルを入力してすぐに実行します
実践手順中、主に以下の三篇文章を参照し、作成者に向けて指示:

    Windows 上で独自の PHP を構築する
  • Windows 環境下phpおよびPhp扩展编译、扩展dll文件编译
  • 解Win7下 ファイル拡張子「.js」用のスクリプト エンジンはありません
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート