問題タブ [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.

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

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 サーバー プロセスによって読み込まれません。

私は何をすべきか?

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

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_getTable_iterator

xdebug_debug_zval()また、いろいろなところで参照カウントを調べてみましたが、特に異常はありませんでした。以下は、チェーンを使用した場合$resultsと使用しない場合の出力です。$row

そして$rowチェーンで:

私はこれに数日を費やしましたが、アイデアがほとんどなくなったので、これを解決する方法についての洞察は大歓迎です。

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

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 など) はまだ稼働していますが、拡張機能をホストしているようには見えません。したがって、ここの誰かが箱のどこかに座っていることを願っています。お願いします?ヘルプ?

ありがとう。

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

php - DEBUG_ZEND レベルを変更して PHP をコンパイルする

PHP拡張機能をデバッグしていて、PHPソースコードを調べているときにこれを見つけました:

したがって、DEBUG_ZEND を 2 に設定してコンパイルしたいと思いますZend/zend_compile.h

代わりにその値を 2 に編集してから、通常の方法を試しました。

makeしばらくはそのことを行いますが、その後、一連のReducing refcount for ...メッセージが表示されてmake失敗します:

DEBUG_ZEND0 に戻すと、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_ZEND2に設定してPHPをコンパイルする適切な方法は何ですか?

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

php - サーバー側の_COOKIE情報

phpのソースコードではなく、phpのソースコードにsetcookie関数を使用して保存されたCookie情報を取得したい。_COOKIE['xx']に対応するCコードは何ですか。

言い換えると、_COOKIE配列はどこで作成され、入力されますか?

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

php - Zval を char* に変換する

Zval を char* に変換したい。私のphp拡張機能でそれを行うにはどうすればよいですか?

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

php - / ext/mysql拡張機能のセッション変数へのアクセス

私は次のような構造を宣言しました

そしてセッション構造で、私は変数を次のように宣言しました

これで、session_startでペア変数の値を初期化し、/ ext/mysql拡張でこれらの値にアクセスする必要があります。それを達成する方法についての提案をいただければ幸いです

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

php - 拡張機能内から PHP_FUNCTION を呼び出すことは可能ですか?

タイトルについて詳しく説明します。たとえば、PHP_FUNCTION(session_start) を考えてみましょう。別の PHP_FUNCTION である session_id 内から session_start を呼び出すことはできますか (これは実際の目的ではなく説明のためのものです)。

0 投票する
5 に答える
2668 参照

php - クラスを拡張機能に変換する

PHP 拡張機能に変換したい PHP クラスがあります。いくつかのチュートリアル ( tuxradar の書き込み拡張機能php.net の拡張 php、およびzend の拡張書き込み) を確認しましたが、少し複雑です。

「PHP拡張機能の書き方」という記事を見つけました(編集注:サイトは廃止されました/home/website1/public_html/api/class.php)。これを使用して、特定のパスからPHPクラスを取得し(たとえば)、実行して返すことができるかどうかを知りたいと思いましたクラスのインスタンス。

このようにして、同じサーバーでホストされている他の Web サイトで使用できます。それぞれが関数を呼び出すだけで、独自のインスタンスを取得できます。

それは可能ですか?

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

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