5

まず、これはRadPHP (以前の Delphi For PHP) ではなくphp4Delphiに関するものです。

使用する

  • デルファイ 2010
  • PHP 5.3.6 (VC9、NTS)
  • php4Delphi 7.2 (VC9 ディレクティブでコンパイル)
  • Windows Server 2008 R2
  • IIS7

IIS/PHP サーバーで php4Delphi delphi_math.dll サンプル拡張機能を実行しようとすると、C:\Windows\Temp\php-errors.log ファイルに次のエラーが表示されます。

[15-Jun-2011 17:58:42] PHP 警告: PHP の起動: 動的ライブラリ 'C:\Program Files (x86)\PHP\ext\delphi_math.dll' を読み込めません - 動的リンク ライブラリ (DLL) の初期化ルーチンは失敗しました。行 0 で不明

PHP が拡張機能を見つけられないという最初の問題は既に解決しているので、パス スタイルの問題ではありません。

php4Delphi 7.2 は最新の PHP 5.3.6 をサポートしていない可能性があると考えています。この構成が機能している人はいますか?

4

3 に答える 3

6

PHP はモジュールを内部的にロードしようとして失敗します。その通りです。

問題は検索パスにあるのではなく、php4delphi で非スレッド セーフ バージョンの php を使用することにあります。php が拡張機能をロードすると、拡張機能 dll からいくつかのコールバック関数のリストを受け取り、それを使用して dll と通信します。php のスレッド セーフ バージョンと非スレッド セーフ バージョンのコールバック関数のパラメーターのリストは異なります。

php4delphi は、php のスレッドセーフ モデル用に作成されました。TS バージョンと NTS バージョンの違いについては、IIS Aidを参照してください。この特定のケースでは、可能であれば、スレッドセーフでない PHP をスレッドセーフな PHP に変更することをお勧めします。

NTS PHP を使用する必要がある場合は、php4delphi のソース コードを変更する必要があります。この場合、多くの変更が必要になると思います。

于 2011-06-15T11:12:28.310 に答える
2

PHP 5.3.6 で php4delphi 7.2 のテストを行ったところですが、スレッドセーフ バージョンと拡張機能は期待どおりに読み込まれました。IISを使用する場合ではなく、コマンドラインからphp.exeを使用してスクリプトを実行する場合にのみNTSバージョンを使用できると思います。とにかく、NTSバージョンでもテストを行い、結果をお知らせします.

于 2011-06-15T10:36:35.767 に答える
0

私には、PHP 自体 (delphiphp ではなく) がモジュールを内部的にロードしようとして失敗したように見えます。

loadlibrary() への PATH で DLL を検索しても、32 ビット DLL ではなく 64 ビット DLL が見つかった可能性があります。最初に、32 ビット Windows システムでこのセットアップを試すことをお勧めします。

Psは明らかに「プログラムファイル(x86)」から取得した64ビットシステムの表示です

于 2011-06-15T10:57:47.323 に答える