15

execコマンドがサーバーで機能せず、何も機能しません。safe_modeをオフにして、すべてのコンソールコマンドが機能していることを確認しました。絶対パスを試してみました。アプリケーションのアクセス許可を確認しました。必要なすべてのアプリケーションに実行アクセス許可があります。他に何をすべきかわかりません。これが私が試したコードの要約です。

echo exec('/usr/bin/whoami');

echo exec('whoami');

exec('whoami 2>&1',$output,$return_val);
if($return_val !== 0) {
    echo 'Error<br>';
    print_r($output);   
}

exec('/usr/bin/whoami 2>&1',$output,$return_val);
if($return_val !== 0) {
    echo 'Error<br>';
    print_r($output);   
}

最後の2つのコードは次のように表示されます。

Error
Array ( )

サーバーサービスに連絡しましたが、彼らは私を助けることができません。彼らはexecコマンドが機能しない理由を知りません。

4

4 に答える 4

13

を見てください/etc/php.ini、その下に:

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.disable-functions
disable_functions =

execが次のようにリストされていないことを確認してください。

disable_functions=exec

その場合は、それを削除して、apacheを再起動します。

デバッグを容易にするために、私は通常、phpファイルを手動で実行するのが好きです(メインのiniに設定せずにさらにエラーを要求できます)。そのためには、ヘッダーを追加します。

#!/usr/bin/php
ini_set("display_errors", 1);
ini_set("track_errors", 1);
ini_set("html_errors", 1);
error_reporting(E_ALL);

ファイルの先頭に、を使用してアクセス許可を与えchmod +x myscript.php、実行し./myscript.phpます。特に、ログファイルに大量の書き込みを行うビジー状態のサーバーでは非常に注意が必要です。

編集

権限の問題のように聞こえます。のような単純なことを行うbashスクリプトを作成し、echo "helo world"それを実行してみます。ファイルとファイルを含むフォルダに対する権限があることを確認してください。あなたはchmod 755ただテストのためだけにやるべきです。

于 2012-08-30T14:47:13.430 に答える
7
于 2017-08-20T16:56:25.913 に答える
6

PHPコンテキストからネイティブシェルにドロップアウトするため、デバッグで多くの問題が発生します。

私が過去に使用した中で最も優れた、最も確実な方法は、スクリプトの出力をログファイルに書き込み、PHPの実行中にそれを調整することです。

<?php
shell_exec("filename > ~/debug.log 2>&1");

次に、別のシェルで:

tail -200f ~/debug.log

PHPスクリプトを実行すると、エラーとシェル呼び出しからの出力がdebug.logファイルに表示されます。

于 2012-08-30T15:02:09.527 に答える
4

execコマンドの出力とリターンコードを取得できます。これらには、問題を説明する情報が含まれている可能性があります...

exec('my command', $output, $return);
于 2012-08-30T14:42:33.430 に答える