7

PHP スクリプト内でシェル コマンドを実行しようとしていますが、exec は 126 コードを返します。これは、「呼び出されたコマンドを実行できません」という意味です (アクセス許可の問題またはコマンドが実行可能ファイルではありません)。しかし、最も面白いのは、同じ php スクリプトを cli で実行すると、うまく動作することです。どうしたの?

環境に問題があるのではないでしょうか?Apacheで実行すると、実行可能ファイルへの絶対パスを使用しないと127コードが返されるためです(cliの下では、ファイル名だけを使用してもうまく機能し、0を返します)。ファイルは/usr/localに保存されます/bin フォルダー。

アップデート:

コメントで尋ねられたように、コードの例を示しますが、特別なことは何もありません。

この作品は cli では正常に動作しますが、apache では動作しません ( $retval127 に等しくなります):

$output = array();
$retval = 0;
exec( "myexecutablefile /full/path/to/someotherfile.js", $output, $retval );
echo implode( PHP_EOL, $output );

このコードは戻ります$retval = 126

$output = array();
$retval = 0;
exec( "/usr/local/bin/myexecutablefile /full/path/to/someotherfile.js", $output, $retval );
echo implode( PHP_EOL, $output );
4

3 に答える 3

5

実行可能ファイルへのフル パスを指定するだけでなく、Apache ユーザーがそれを実行する権限を持っていることを確認する必要があります。

Apache は bash では実行されず、独自のパス設定は気にしません。

于 2012-07-16T20:09:21.857 に答える
5

実行可能ファイルに chmod 0777 を追加してみてください:

chmod($file,0777);
于 2014-10-01T12:52:18.087 に答える