ホームページ  >  記事  >  バックエンド開発  >  PHPのexec()関数がシステムコマンドの実行に失敗する問題の解決策

PHPのexec()関数がシステムコマンドの実行に失敗する問題の解決策

不言
不言転載
2019-02-15 11:41:088177ブラウズ

この記事は、PHP の exec() 関数がシステム コマンドの実行に失敗する問題の解決策を提供します。これには特定の参考値があります。必要な友人はそれを参照できます。私はそれを願っています。助けてください、あなたは助けました。

0. 説明

php では、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 を使用してコマンドを実行すると、エラーは報告されず、結果も返されません。その理由は、このコマンドが環境変数が設定されているディレクトリにないためです。たとえば、「whereis
ifconfig」を使用して、このコマンドの特定のパスを確認できます。たとえば、パスは /usr/sbin の下にあります。解決策は 2 つあります。 :

解決策

1 コマンドを /usr/bin にコピーします (推奨されません)
2 コマンドのフル パスを直接入力します exec('/usr /sbin',$output); (推奨)

以上がPHPのexec()関数がシステムコマンドの実行に失敗する問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。