ホームページ >バックエンド開発 >PHPチュートリアル >php の exec 関数は思っていたものと違います_PHP チュートリアル
私は長い間 php (現在の主流の開発言語として) を使用してきましたが、これまで exec などの関数に触れたことはなく、他の人の記事で言及されているものを読んだだけです。ここで、Apache(Unix プラットフォームで最も人気のある WEB サーバー プラットフォーム) のパスワードを変更するための小さな関数を書きたいと思います。実装方法は長い間明らかでしたが、exec 関数を使用するときに問題が発生しました。
exec 関数は、システム コマンド ライン コマンドを実行します。その構文は次のとおりです:
string exec (string command [, array &output [, int &return_var]] )
ここで、command は実行されるコマンド文字列、output は実行内容です。 command 出力内容は配列形式、1行が配列内のレコード、return_varは実行コマンドの戻り値です。
dos で、パラメーターを追加せずに htpasswd コマンドを直接実行すると、次のようなヘルプが表示されます:
E:cvsworksvntools>htpasswd
Usage:
htpasswd [-cmdpsD] パスワードファイル ユーザー名
htpasswd -b[cmdpsD] パスワードファイル ユーザー名パスワード
...
したがって、テスト目的で、最初に exec を使用してこのコマンドを実行し、php
(現在の主流の開発言語として) コードは次のとおりです:exec(' e:cvsworksvntoolshtpasswd. exe', $ar, $status);
for ($i=0; $i < count($ar); $i++) $ar[$i] = htmlspecialchars($ar[$i]);
$ msg = implode ('
' . "
", $ar);
echo $msg;
コードの実行にエラーはありませんが、出力がありません。なぜですか? コマンドを dir または cd に変更し、htpasswd.exe を pk に置き換えると正しく実行できます。 exe も動作します 問題ありません。これは htpasswd に関連していますか? 1 時間検索した後、ようやく問題が見つかりました。パラメータを指定せずに exec を使用して htpasswd.exe を実行すると、戻り値 $status が 2 になります。パラメータ「-nsb 1 1」、戻り値は0、出力情報は正常
1:{SHA}NWoZK3kTsExUV00Ywo1G5jlUKKs=
存在しないファイルであるhtpasswd1.exeを実行した場合、戻り値は1、かつ出力情報はありません
ということで、私の結論としては、exec関数が正常にコマンドを実行して戻り値が0の場合は出力情報がありますが、関数実行コマンドが存在しなかったり、エラーコードを返した場合には出力情報はありません。 htpasswd.exe がパラメータなしで実行された場合、ヘルプ情報は出力されますが、戻りステータスは 2 なので、exec 関数は出力情報を返しません。およびshell_execはexecに似ています。他の関数も似ているはずです
。
http://www.bkjia.com/PHPjc/508654.html