[解決済み】PHPからPythonスクリプトを実行する
質問
PHPから以下のコマンドでPythonスクリプトを実行しようとしています。
exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
しかし、PHPは単に何も出力しません。エラー報告は E_ALL に設定され、display_errors はオンになっています。
以下は、試した内容です。
-
を使いました。
python2
,/usr/bin/python2
とpython2.7
ではなく/usr/bin/python2.7
- また、絶対パスの代わりに相対パスを使用しましたが、これも何も変わりませんでした。
-
コマンドを使用してみました。
exec
,shell_exec
,system
.
しかし
if (exec('echo TEST') == 'TEST')
{
echo 'exec works!';
}
の間、全く問題なく動作します。
shutdown now
は何もしない。
PHPはファイルにアクセスし、実行する権限を持っています。
EDIT: Alejandroのおかげで、問題を解決することができました。同じ問題がある場合、あなたのウェブサーバーはおそらく/うまくいけばrootとして実行されていないことを忘れないでください。 ウェブサーバーのユーザー、またはそれに近い権限を持つユーザーでログインし、自分でコマンドを実行してみてください。
解決するには?
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の説明を参照)
:
#!/usr/bin/env python
<ブロッククオート複数のバージョンのPythonがインストールされている場合、/usr/bin/envは 使用するインタープリタが、あなたの環境の PATH。別の方法としては、次のようなハードコードになります。 #それはそれでいいのですが、柔軟性に欠けます。
Unixでは、解釈されることを前提とした実行可能ファイルは どのインタープリタを使うかは、最初の行の先頭に#! その後にインタプリタ(と必要なフラグ)が続きます。
もちろん、他のプラットフォームについて話す場合は、このルールは適用されません。 が適用されます(ただし、この "shebang 行" は害にはなりませんし、もしあなたが そのスクリプトをLinuxのようなUnixベースのプラットフォームにコピーしてください。 Macなど)。
Unixで実行可能にして実行した場合にも適用されます。 (chmod +x myscript.py)してから、直接実行します: ./myscript.py, python myscript.pyというより、むしろ
への unix系プラットフォームでファイルを実行可能にする :
chmod +x myscript.py
また、Pythonファイル
は正しい権限を持っている必要があります。
(PHPスクリプトがブラウザまたはcurlで実行される場合、ユーザーwww-data / apacheの実行)
また、quot;実行可能でなければなりません。また、すべてのコマンドは
.py
ファイルは正しい権限を持っている必要があります。
撮影 phpマニュアルより :
shell_execを使用しようとしている人のための簡単な注意事項です。 unix系のプラットフォームで、うまく動作させることができないようです。PHPは、以下のように実行されます。 システム上のウェブユーザー(Apacheの場合は通常www)である。 ウェブユーザーが、ファイルまたは ディレクトリを使用します。 そうでなければ、何もしていないように見えるでしょう。
関連
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] スクリプトを実行しているPythonのバージョンを確認するにはどうしたらいいですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない