問題タブ [php-internals]

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.

0 投票する
3 に答える
529 参照

php - PHP 拡張機能から実行中のスクリプトの名前を取得する

私はPHP用の小さな拡張機能を書いています。実行時に、実行中のスクリプト ファイルの名前 (例: test.php) を知る方法はありますか? たぶん、いくつかのグローバル変数または環境変数ですか?

0 投票する
2 に答える
419 参照

php - 同じプロパティで __get と __set の再帰制限をオーバーライドする

同じプロパティの再帰制限__getをオーバーライドする方法はありますか。__set最初のエントリとは異なる方法で 2 回目の再エントリを処理できるようにしたいと考えています。

このコード例は実用的ではありませんが、最も簡単に説明できます。

インターネットがダウンしているため、携帯電話で入力しているため、タイプミスが発生する可能性があります。

0 投票する
1 に答える
277 参照

php - PHPクラスメソッドで最後の配列パラメータをオプションにする (C)

SPI インターフェイスにアクセスするために、C で PHP 拡張機能を作成しています。これまでのところ、ほとんどすべてが機能しています: Github の php_spi

ただし、コンストラクターの $options パラメーターをオプションにすることはできないようです。私の作業コードは次のようなものです:

ただし、すべてのドキュメントの提案に従うと、次のように l と a の間にパイプを見つけて追加できます。

その後、私の拡張機能は黙って失敗します - 誰かアドバイスをもらえますか?

0 投票する
2 に答える
404 参照

c - PHPrand関数の変更

テストと学習の目的で、 https ://github.com/php/php-src :ext / standard/rand.cにあるphprand関数とmt_rand関数を変更したいと思いました。

rand関数が呼び出されるたびに固定出力を提供したかったので、この目的のためにコードを変更しました

編集済み

そして最後にrand関数をasecho rand(3000,4000);と呼び、それは常に。を返します3000

この関数を変更する方法は何でしょうか?TSRMLS_D範囲パラメータはあるがないのはなぜですか?

0 投票する
1 に答える
1328 参照

php - PHP 拡張機能をビルドして call_user_function を使用する

を介してmysqlデータベースに接続するための拡張機能を構築するためのコードを作成しますmysql_connect

私のコードはコンパイルされていますが、PHP で関数を使用したい場合、ループが発生し、おそらく動作しません。ここに私のC++コードがあります:


どんな体でも私を助けることができますか?

リソース接続を返したいだけです。

「retval」が myresource であることは知っていますが、このリソースを私の php コードに返す方法がわかりません。

0 投票する
1 に答える
375 参照

php - get_memory_usageがメモリを保持するのはなぜですか?

コンピューターで次のPHPプログラムを実行した場合

出力を取得します

このことから、への最初の呼び出しmemory_get_usageは32KBのメモリを保持しているように見えます。echo私はステートメントなしでこれを試しました

同様の結果が得られました

ステートメントを削除するechoと、スクリプトの全体的なメモリ使用量が削減されますが、への最初の呼び出し後も32KBが保持されmemory_get_usageます。どうしてこれなの?

複数のコンピューターでこれを試しましたが、実際の数は異なりますが、ギャップは同じままです。

私が(私が思うに)この関数のソースを見ると

そこには、必ずしも「この変数をメモリに保持する」と書かれているものは何もありません。しかし、私は何年も真剣にCを書いたことがなく、PHPソースを専門的にハッキングしたことはなく、実行を追跡する能力はまったくありません。

だから、私の質問は、その32KBのメモリを何が保持しているのか、そしてそれはPHPソースコードのどこで発生するのか、そして/またはmemory_get_usageエントリポイントからそれをどのように追跡できるのかということです。

0 投票する
2 に答える
240 参照

php - zend engineグローバルはプロセス間でメモリを共有していますか?

PHPのソースコードとmysql_pconnect関数を調べてみたところ、 zend_globalsHashTable persistent_listで定義されている種類のものを使用していることに気付きました。

問題は、PHPがmod apache / fcgiとして設定されている場合、このグローバル変数と変数がリクエスト間でどのように保持されるかです。それがすべてのリクエストに対して生成された新しいPHPプロセスである場合、それらの変数は保持されるべきではありません。

0 投票する
3 に答える
4326 参照

php - PHPでオブジェクトが破棄される順序はどれですか?

オブジェクトの分解の正確な順序は何ですか?

テストから、私は考えを持っています:現在のスコープのFIFO。

これは何度も同じ結果を生成します:

PHPのマニュアルはあいまいです(不確実性を強調するために強調しています):「シャットダウンシーケンス中に特定のオブジェクトへの参照が他になくなるとすぐに、または任意の順序でデストラクタメソッドが呼び出されます。」

脱構築の正確な順序は何ですか?PHPが使用する破棄順序の実装について詳しく説明できますか?また、この順序がすべてのPHPバージョン間で一貫していない場合、どのPHPバージョンがこの順序で変更されるかを誰かが特定できますか?

0 投票する
1 に答える
1609 参照

php - PHP 5.4 用の C++ 拡張機能の作成、サンプル コードは廃止されました

基本的にCPPで非常に単純なクラスをラップするphp5.4の拡張機能を作成しようとしています。

これは教育目的のためです。

私はphp5.4でそれを行う方法がphp5.3から変更されていることを発見しました

その方法に関するドキュメントはどこにありますか? またはさらに良いのは、コード例、CPP クラスをラップし、php5.4 で動作する他の拡張機能です。

たとえば、以前は機能していた機能が機能しなくなった場合などです。http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/から取得

zend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *)); 構造体インスタンスtype(定義を忘れた) がメンバーを持たなくなったため、この行 は失敗します。default_properties

0 投票する
2 に答える
418 参照

php - PHP 拡張機能の SEG 障害

静的ライブラリの関数にアクセスするための PHP 拡張機能を作成し、PHP を CGI としてビルドしましたが、すべてが機能しているように見えました (何日も作業した後..)

すべてがうまくいったことに興奮した私は、PHP に含まれていたメッセージをデバッグせずに PHP を再コンパイルしました。( php_printf("here111");.... php_printf("sending arguments...");)

その後、機能しなくなりました。静的ライブラリで呼び出している関数は機能します。別の実行可能ファイルから直接呼び出してテストしました。

デバッグ シンボル ( --enable-debug) を使用して PHP をビルドし、gdb である程度デバッグできます。

私はまだ何が間違っているのかを理解するのに苦労しています。lib( diffFst) 内の関数が入力引数を読み取れないようです。

この関数を呼び出すと、php_printf()ステートメントが機能し、正しい値が出力されます。ただし、difffst_関数を呼び出させると、入力変数を読み取ろうとするとセグメンテーション違反が発生します。

diffFst 関数は fortran で書かれています。

具体的には、(デバッガによると) 122 行目で読み取りに失敗しますfilA

理由はわかりませんが、試しました:

  • 関数をサブルーチンにする
  • 関数を fortran 関数にする
  • 関数を「純粋な」関数にする
  • 戻り値を持つ (それが今あるものですier = ..)
  • returnコード内にステートメントがあり、returnステートメントを削除する
  • 標準出力に出力してファイルをログに記録しようとしました

データが正しく渡されていないようです。デバッガでも引数が読めません。

イライラするのは、ある時点でこれが機能したことです.ファイルのアクセス許可、パスなどを確認しました.そして、Fortranラッパー実行可能ファイルから関数を正常に実行できます.

私が見逃しているトリックはありますか?

ありがとう