Ubuntu Server 10.04 でテスト済み。Arch Linux でも役立つことを願っています。
PHP では、shell_exec 関数を使用します。
シェル経由でコマンドを実行し、完全な出力を文字列として返します。
エラーが発生した場合、またはコマンドが出力を生成しない場合は、実行されたコマンドからの出力または NULL を返します。
<?php
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
?>
Python ファイルtest.py
に、最初の行でこのテキストを確認します: (shebang Explain を参照) :
#!/usr/bin/env python
Python の複数のバージョンがインストールされている場合、/usr/bin/env は、使用されるインタープリターが環境の $PATH の最初のものであることを保証します。別の方法は、 #!/usr/bin/python; のようなものをハードコードすることです。それは問題ありませんが、柔軟性が低くなります。
Unix では、解釈されることを意図した実行可能ファイルは、使用するインタープリターを #! で示すことができます。最初の行の先頭に、その後にインタープリター (および必要なフラグ) が続きます。
もちろん、他のプラットフォームについて話している場合、このルールは適用されません (しかし、その「シバン行」は害を及ぼすものではなく、そのスクリプトを Linux や Mac などの Unix ベースのプラットフォームにコピーする場合に役立ちます)。など)。
これは、Unix で実行可能 (chmod +x myscript.py) にしてから、python myscript.py だけでなく、./myscript.py で直接実行する場合に適用されます。
unix タイプのプラットフォームで実行可能ファイルを作成するには、次のようにします。
chmod +x myscript.py
また、Python ファイルには正しい権限(PHP スクリプトがブラウザーまたは curl で実行される場合はユーザー www-data / apache の実行) が必要であり、"実行可能" である必要があります。また、ファイルへのすべてのコマンドに.py
は、正しい権限が必要です。
PHPマニュアルから取得:
unix タイプのプラットフォームで shell_exec を使用しようとしていて、うまく動作しないように思われる方への簡単なリマインダーです。PHP はシステム上で Web ユーザー (通常は Apache の場合は www) として実行されるため、shell_exec コマンドで使用しようとしているファイルやディレクトリに対する権限が Web ユーザーにあることを確認する必要があります。そうでなければ、何もしていないように見えます。