問題タブ [php-extension]
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.
php - PHP 拡張機能: モジュール 'hello' は行 0 の Unknown に既にロードされています
私の開発環境:
Linux - Linux localhost.localdomain 2.6.9-42。
アパッチ:2.2.4
php:5.2.3
私はphp拡張helloを書きました。
テストを行うと、次のように表示されます。
PHP 警告: モジュール 'hello' は行 0 の Unknown に既にロードされています
PHP 警告: モジュール 'hello' は行 0 の Unknown に既にロードされています
php.ini を確認すると、extension=hello.so という行が 1 つだけあります。
php.ini の extension=hello.so を削除し、テストを成功させましたが、hello モジュールが Web サーバー プロセスによって読み込まれません。
私は何をすべきか?
php - リソース ガベージの収集が早すぎた
SWIGを使用して PHP 拡張機能を作成しましたが、すべて正常に動作しますが、メソッド呼び出しを連鎖させると、奇妙なガベージ コレクション動作が見られます。たとえば、これは機能します:
しかし、このセグメントは失敗します:
唯一の違いは、最初は を作成する$results
のに対し、2 番目は呼び出しを連鎖させることです。
SWIG は実際には関数を PHP に公開するだけで、それらと対話するための PHP プロキシ クラスを生成します。これらのプロキシ クラスは、基本的に、公開された各関数に渡されるリソースを、それらの関数が通常取る他の引数と共に保持します。おそらくこれらのプロキシ クラスが問題であると考えて、コードを作り直してそれらをバイパスし、代わりに公開された関数を直接使用しました。前と同じように、これは機能します:
繰り返しますが、このセグメントは失敗します:
繰り返しますが、唯一の違いは、最初は を作成する$results
のに対し、2 番目は呼び出しを連鎖させていることです。
この時点で、gdb/valgrind でしばらくデバッグを行ったところ、InvocationResponse_results
呼び出しをチェーンするときに戻り値のデストラクタが呼び出されるのが早すぎることがわかりました。観察するためにstd::cout
、公開された C++ 関数とそのデストラクタの先頭にステートメントを挿入しました。これは連鎖なしの出力です:
スクリプト---
の実行中と実行後に何が起こるかを区別できるように、スクリプトの最後に出力しました。Hola Mundo
からprintf
です。残りは C++ からのものです。ご覧のとおり、すべてが期待どおりの順序で呼び出されます。デストラクタはスクリプトの実行後にのみ呼び出されますが、TableIterator
デストラクタは予想よりも早く呼び出されます。ただし、これにより問題が発生することはなく、おそらく無関係です。これをチェーニングを使用した出力と比較します。
InvocationResponse_results
に保存される戻り値がなければ、実行がコール チェーン (と$results
の間) から出る前にガベージ コレクションが実行されるため、すぐに問題が発生し、最終的にはセグ フォールトにつながります。Tables_get
Table_iterator
xdebug_debug_zval()
また、いろいろなところで参照カウントを調べてみましたが、特に異常はありませんでした。以下は、チェーンを使用した場合$results
と使用しない場合の出力です。$row
そして$row
チェーンで:
私はこれに数日を費やしましたが、アイデアがほとんどなくなったので、これを解決する方法についての洞察は大歓迎です。
php - Tidy2.0 拡張機能
そこで、このガイドに従って、Tidy2.0 を Karmic にインストールしようとしています: http://www.howtoforge.com/forums/archive/index.php/t-7395.html
すべてうまくいくと思っていたのですが、Tidy2.0 のソースは公開されていないようです: http://support.office-shadow.com/installer/tidy2.0.tar.gz
ただし、そのサイト (office-shadow.com など) はまだ稼働していますが、拡張機能をホストしているようには見えません。したがって、ここの誰かが箱のどこかに座っていることを願っています。お願いします?ヘルプ?
ありがとう。
php - DEBUG_ZEND レベルを変更して PHP をコンパイルする
PHP拡張機能をデバッグしていて、PHPソースコードを調べているときにこれを見つけました:
したがって、DEBUG_ZEND を 2 に設定してコンパイルしたいと思いますZend/zend_compile.h
。
代わりにその値を 2 に編集してから、通常の方法を試しました。
make
しばらくはそのことを行いますが、その後、一連のReducing refcount for ...
メッセージが表示されてmake
失敗します:
DEBUG_ZEND
0 に戻すと、PHP は正常にコンパイルされます。私が見つけることDEBUG_ZEND
ができた唯一の参照は、このバグレポートにありました:
http://bugs.php.net/bug.php?id=45761
このスニペットは関連しているように見えました:
構成コマンドの先頭に CFLAGS="-DDEBUG_ZEND=2" を追加して再構成し、「make clean」を実行してから「make」...
それでCFLAGS="-DDEBUG_ZEND=2"
、シバンの直後に追加configure
して、コンパイルできました。ただし、スクリプトの実行時に refcounts に関する追加の出力が表示されないため、実際に何かが行われたとは確信していません。
DEBUG_ZEND
2に設定してPHPをコンパイルする適切な方法は何ですか?
php - サーバー側の_COOKIE情報
phpのソースコードではなく、phpのソースコードにsetcookie関数を使用して保存されたCookie情報を取得したい。_COOKIE['xx']に対応するCコードは何ですか。
言い換えると、_COOKIE配列はどこで作成され、入力されますか?
php - Zval を char* に変換する
Zval を char* に変換したい。私のphp拡張機能でそれを行うにはどうすればよいですか?
php - / ext/mysql拡張機能のセッション変数へのアクセス
私は次のような構造を宣言しました
そしてセッション構造で、私は変数を次のように宣言しました
これで、session_startでペア変数の値を初期化し、/ ext/mysql拡張でこれらの値にアクセスする必要があります。それを達成する方法についての提案をいただければ幸いです
php - 拡張機能内から PHP_FUNCTION を呼び出すことは可能ですか?
タイトルについて詳しく説明します。たとえば、PHP_FUNCTION(session_start) を考えてみましょう。別の PHP_FUNCTION である session_id 内から session_start を呼び出すことはできますか (これは実際の目的ではなく説明のためのものです)。
php - クラスを拡張機能に変換する
PHP 拡張機能に変換したい PHP クラスがあります。いくつかのチュートリアル ( tuxradar の書き込み拡張機能、php.net の拡張 php、およびzend の拡張書き込み) を確認しましたが、少し複雑です。
「PHP拡張機能の書き方」という記事を見つけました(編集注:サイトは廃止されました/home/website1/public_html/api/class.php
)。これを使用して、特定のパスからPHPクラスを取得し(たとえば)、実行して返すことができるかどうかを知りたいと思いましたクラスのインスタンス。
このようにして、同じサーバーでホストされている他の Web サイトで使用できます。それぞれが関数を呼び出すだけで、独自のインスタンスを取得できます。
それは可能ですか?
php - Visual Studio 2008 で php 拡張機能をコンパイルすると、MODULE ID が php と一致しません
次の手順を使用して、VC9 (2008) および VC10 (2010) を使用して独自の php 拡張機能をコンパイルした後:
http://blog.slickedit.com/2007/09/creating-a-php-5-extension-with-visual-c-2005/
PHP の初期化時に次のエラーが発生します。
モジュールをVC9でコンパイルしたと表示されないのはなぜですか?
より詳しい情報:
オペレーティング システム: Windows7 x64 PHP: 5.3.3、TS、VC9