問題タブ [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 から外部ライブラリを呼び出します。どちらが速いですか: exec と extension?
Web ページから C++ で記述された外部ライブラリを呼び出し、結果を表示する必要があります。プラットフォームは Linux、Apache、PHP です。
私の現在の考えは、ライブラリ/プログラムを呼び出す PHP サービスを使用することです。これを行うには 2 つの方法があることがわかりました。1) PHP の「exec」関数を使用する 2) PHP 拡張機能を作成する
何がより効果的に機能するのか興味がありますか?もっと早く?サーバーの負荷を軽減しますか?
おそらく毎秒 4 回の呼び出しが必要になるので、できる限り最適化したいと考えています。
PS Web ページから C++ ライブラリまたはプログラムを呼び出す他の (より効果的な) 方法を知っている場合は、お知らせください。
どうもありがとう、
ロブスタ
php - PHP モジュールのスレッドセーフ/非スレッドセーフの不一致を修正するにはどうすればよいですか?
これはエラーログからです:
PHP のスレッドセーフでないソースを入手するにはどうすればよいですか? windows.php.net/download で見つけた唯一のダウンロード リンクはhttp://windows.php.net/downloads/releases/php-5.3.2-src.zipであり、スレッドセーフ コードのようです --- または実際に非スレッドセーフであることをソースに伝える方法はありますか?
--disable-zts
のコマンドラインを入れようとしましたが、それはconfigure.bat
からの出力に良い影響を与えますがconfigure.bat
、ソースのスレッドセーフ性が低下するようには見えません。
php - SWIG によって生成された PHP 拡張機能からの stdout
次の C++ 関数があります。
これをSWIG経由でPHPに移植しています。すべてが正常にコンパイルされ、拡張機能が適切にロードされます。PHPから呼び出すことはできますが、コマンド ラインから PHP スクリプトを実行した場合にfoo()
のみ出力が表示されます。bar
ブラウザにスクリプトをロードしても、何も表示されません。bar
この場合、なぜ表示されないのですか?
php - SWIG を使用して PHP で boost::shared_ptr をラップする
SWIG を使用してこの C++ 関数をラップすると、次のようになります。
そして、それを PHP で呼び出します。
の型は$client
isでありresource
、notであるため、メソッドobject
を呼び出すことができません。Client
この関数をラップするためのオプションは何ですか? 私は他の誰かの C++ ライブラリ用の PHP ラッパーを作成しているので、使用しないようにコードを作り直すことboost::shared_ptr
は実際にはオプションではありません。
これは私がこれまでに思いついた唯一の解決策です:
そしてそれをPHPで呼び出します:
これで の型が$client
変わり、メソッドをobject
呼び出すことができます。Client
これは合理的な回避策ですか?そうでない場合、私は何をすべきですか?
php - Making C functions available to php
I have a C dll containing functions and enumerations I want to make accessible from php. How can I do it?
php - PHP 拡張機能用の環境を構築しますか?
カスタム PHP 拡張機能を作成するための開発フレームワークを探しています。PHP4Delphiは有望に見えます。そして、通常の Visual Studio ルートがあります。他にもありますか?
php - リソースのタイプを知らずに zend リソースをフェッチする
フェッチするリソースのタイプを知らなくても zend リソース ( zend_fetch_resource
) をフェッチすることは可能ですか? もしそうなら、どのように?
注: PHP 拡張機能を作成しています。
php - SWIGで生成された拡張機能からのメモリリーク
SWIGを使用してPHPでC++ライブラリをラップするときにメモリリークの問題が発生します。ディレクターが有効になっているときに、複合型を含むC++からのコールバックがPHPに送信されると発生するようです。リークを再現するためのスタンドアロンの例を次に示します。
Client.hpp:
ProcedureCallback.hpp:
したがって、これを使用するには、を作成しClient
、サブクラス化ProcedureCallback
されたものをClientのinvoke
メソッドに渡します。次に、Clientは、指定したメソッドを呼び出してcallback
、空のintベクトルを渡します。
これはSWIGインターフェースファイルです:
その出力は非常に大きいので、代わりにpastebinに置きます:debugasync_wrap.cpp。このファイルで興味深いのは、おそらくSwigDirector_ProcedureCallback :: callback(1319行目)です。
これも興味深いかもしれません(行827):
また、PHPでのメモリリークを示すために(debugasync.phpは、SWIGによって生成されたプロキシクラスのセットであり、pastebinにもアップロードしています):
これにより、メモリ使用量が出力され、1kの呼び出しが実行され、繰り返されます。それを実行すると、急速に成長するメモリスペースが表示されます。
int
また、C ++コールバックが複合型(つまり)ではなくプリミティブ(つまり)を渡す場合、std::vector<int>
メモリリークは発生しないことにも注意してください。
このメモリリークの原因は何ですか?
そして、より一般的には、これを解決するためにどのようなツールを使用できますか?Valgrindの山塊は、デバッグシンボルを使用してPHPを構築した後でも、実際に何が起こっているのかを絞り込むことができませんでした。
php - PHP がカスタム拡張機能をロードしない
PHP でカスタム拡張機能を作成しており、その拡張機能を php.ini ファイルにロードしています。コマンドライン インターフェイスを使用すると、拡張機能が読み込まれて正常に実行されますが、Web サーバー (Cherokee with FastCGI) では読み込まれません。質問される前にいくつかの質問を回避するために、私は間違いなく適切な php.ini ファイルを使用しており、extension_dir の値を正しく設定しています。拡張機能をロードするためにフルパスを指定しても機能しません。
ですから、この問題を解決するにはどうすればよいか考えています。いくつかの共有ライブラリにリンクする前に拡張機能が正常に読み込まれていたため、外部依存関係が原因である可能性があると思われます。ただし、/var/log/cherokee/cherokee.error に問題の兆候は見られません。問題を特定する方法に関する他のアイデアはありますか?
php - 誰でもphp 5.3.0のuploadprogress.dll拡張機能を提供できますか?
Windowsでphpのuploadprogress拡張機能が必要です。ここから dll をダウンロードしましたが、バージョンが私の php と一致しません。PHP 5.3.0 ビルド 20090626 VC++6 を使用しています。そして、互換性のあるuploadprogress.dllが見つかりませんでした。私のバージョンのphpソースがないため、ビルドできません。また、APC 拡張機能を使用したくありません。誰でもこの dll を提供できますか?