exec()を使用してシステムコマンドを実行できますが、時々、
exec()##が発生することがあります。 #コマンドの実行が失敗した場合、またはリターンがありません 以下に説明します: 1. 関数
exec ( string $command [, array &$output [, int &$return_var ]] ) : string 参数说明: 1.$command 要执行的命令 2.$output 执行结果 3.$return_var 若同时设置 $output 和此变量,命令执行后的返回状态会被写入到此变量
2. 例
exec("ping www.baidu.com", $output);
正常に実行された場合 結果は次のようになります。
ping はサーバー上で直接実行するのと同じですが、特定の理由により予期しない状況が発生する可能性があります。以下に 2 つの状況と解決策について説明します。2.1 権限の問題
質問
Linux システム コマンドをサーバー上で直接実行する場合 (ここでは ping を例にします)、実行権限はログイン ユーザーの権限に依存します。
rootの場合、ping
が root として実行されます。しかし、Web サイトにアクセスすると、この時のユーザーはwww
なので、ping の実行権限を変更しないと正常に実行されません。解決策
pingまたは対応するコマンドの実行権限を変更する
2.2 コマンドパスの問題
問題
別の状況もありますexec を使用してコマンドを実行すると、エラーは報告されず、結果も返されません。その理由は、このコマンドが環境変数で設定されたディレクトリ、つまり
/etc/profile## にないためです。#ifconfig## で終わるファイル #たとえば、/usr/binwhereis ifconfig
を使用して、このコマンドの特定のパスを確認できます。たとえば、パスは/usr/sbin の下にあります。
. 解決策は 2 つあります:解決策
1 コマンドを環境変数の下のディレクトリである
にコピーします (推奨されません)。
2 コマンドの完全なパスを直接入力します。exec( '/usr/sbin',$output);"(推奨)
3 ターゲット ディレクトリを環境変数に追加します。たとえば、次のようになります。
/usr/sbinをディレクトリに追加します
推奨される学習: "
PHP ビデオ チュートリアル