問題タブ [php4delphi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - zend (多次元配列) とのデータの交換
PHP4Delphi コンポーネントを使用して php5ts.dll とのインターフェイスを使用して、アプリ (Delphi 2010 で記述) に PHP を埋め込んでいます。PHPスクリプトで使用できるいくつかの関数と定数を登録するため、私のプログラムはPHP(sapiモジュール?)の拡張機能として機能すると思います...とにかく、単純なデータ型を使用する場合はうまく機能しますが、多次元配列を使用しようとすると戻り値としてエラーが発生します
Access violation at address 01CD3C35 in module 'php5ts.dll'. Read of address 0231E608.
スタックリスト
(000A2C35){php5ts.dll} [01CD3C35] destroy_op_array + $35
(004C4D61){myApp.exe } [008C5D61] php4delphi.TPHPEngine.ShutdownEngine (Line 1497, "php4delphi.pas" + 17) + $7
php4delphi.pas の 1497 行が呼び出されます。tsrm_shutdown();
私には、スクリプトの最後でガベージコレクターがクラッシュしているように見えるので、エンジンにデータを正しく送り返していないのではないかと疑っています...したがって、多次元配列をPHPに送り返す方法が私の質問ですか?
私が使っているパターンは
作成したサブアレイをどこかに「登録」する必要がありますか? 増減refcount
または設定する必要がありis_ref
ますか? IOW、サブ配列の return_value と zvals をどのように設定する必要がありますか?
各配列のrefcountに1を追加して実験しました(MAKE_STD_ZVALはすでにrefcountを1に初期化していますが)、これでAVは解決しますが、スクリプトを実行するとアプリが消えることがあります-エンジンのメモリマネージャーで無限再帰が発生し、php DLLがクラッシュし、アプリを持っていく... refcountを0に設定すると(ゼロ; PHPスクリプトで戻り値が割り当てられたときにrefcountが1になり、PHP変数がスコープ外になると破棄されると仮定すると)すべてのようです動作します(つまり、クラッシュもAVもありません)が、スクリプトは出力を生成せず、空のhtmlファイルのみを生成します...
また、データを配列として関数に送信し、zend_hash_find
, zend_hash_get_current_data
etc を使用してデータを読み取ります。これにより、変数の参照カウントが台無しになる可能性はありますか? つまり、使い終わったときに返される変数のrefoutを減らす必要がありますzend_hash_find
か?
また、配列を反復処理するときに同じ変数を再利用しても安全ですか。つまり、
または、ループの各反復で Val を作成/解放する必要がありますか?
ティア
・アイン
php - Delphi 2010 および php4Delphi を使用して PHP 拡張機能を作成する
まず、これは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 をサポートしていない可能性があると考えています。この構成が機能している人はいますか?