.php
スクリプトから変数にPython
、またはその逆に変数を渡すことはできますか?
例えば:
//myPHPScript.php
$hello = 'hello';
//myPythonScript.py
print(get the result from $hello variable found in myPHPScript.php)
Python スクリプトの呼び出し方法によって異なります。たとえば、それを行う場合system()
は、引数に入れることができます。
$hello = 'world';
$result = shell_exec('/path/to/python /path/to/your/script.py ' . $hello);
そしてPythonで:
import sys
who = sys.argv[1]
print "Hello %s" % who
$result
PHP には「Hello world」が含まれるようになりました。
常に可能であるとは限りませんが、検討する価値のある、よりパフォーマンスの高い可能性は、一種の「fastcgi アプローチ」です。Python スクリプトは実際には常に実行されており、たとえばポート 8888 でソケット接続 (たとえば、HTTPlib を使用) を受け入れます。その時点で、cURL を使用して PHP から接続しhttp://127.0.0.1:8888
、JSON でエンコードされた構造化データを送信できます (Python には JSON デコーダーがあるため、私はPHP アンシリアライザーについてはよくわかりません)、同じパスを介して情報を返します。
Python スクリプトは、あらゆる意味で Web サービスになりました。また、同じ Web サービス インターフェイスに複数の異なるスクリプトを展開し、リクエストで送信された偽の URI に基づいて応答するスクリプトを選択することもできます。
このアプローチでは、リクエスト間の状態が適切に分離されていることを確認する必要があります。つまり、Peter に代わってデータ処理をリクエストしても、Paul に属するデータが返されることはありません。または、処理中のすべてのデータが安全でない、つまり、セキュリティや認証が不要であること。
このアプローチのもう 1 つの利点はキャッシュです。Python スクリプトは、PHP からのリクエスト間で有効なままであり、既知の質問に対して同じ回答を返すことができます。これが実行可能であれば、何も再計算する必要はありません。すぐにプラグインできる Python 用のキャッシング フレームワークがあります。
追加の利点は、Python サービスを別のマシン (より広いインターネットから到達できるとは限りません)、または複数の異なるマシンにデプロイすることで、このアプローチを簡単に拡張できることです。
いくつかのオプション:
filesysytemのどこかでunixドメインソケットを開きます。/ var/runのような場所。次に、プロセスに通常のファイルのように読み取りと書き込みを行います。ブーム。双方向通信。