ホームページ  >  記事  >  バックエンド開発  >  php の exec 関数は思っていたものと違います_PHP チュートリアル

php の exec 関数は思っていたものと違います_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:33:021200ブラウズ

私は長い間 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

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/508654.html技術記事私は長い間 PHP (現在の主流の開発言語として) を使用してきましたが、他の人の記事でいくつか言及しただけの exec などの関数には、個人的にはあまり触れたことがありませんでした。さて…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。