ホームページ >バックエンド開発 >PHPチュートリアル >PHPでWindowsアプリケーションの起動、バッチバッチ処理の実行、cmdコマンドの実行方法(exec関数とsystem関数の詳細説明)、exec関数の詳細説明_PHPチュートリアル
exec またはシステムは cmd コマンドを呼び出すことができます
コードに直接移動します:
/**phpがWindowsバッチファイルを生成した後、バッチファイルを実行します*/
$filename = 't.bat';
$somecontent = 'C:
';
$somecontent .= 'cd "C:/Program Files/MySQL-Front"';
$somecontent .= '
MySQL-Front.exe を開始します';
if (!$handle = fopen($filename, 'w')) {
echo "ファイル $filename を開けません";
終了します;
}
/**まず、ファイルが存在し、書き込み可能であることを確認する必要があります*/
if (is_writable($filename)) {
/**fwrite() を使用するときに $somecontent が書き込まれる場所です
開いたファイルに $somecontent を書き込みます。*/
if (fwrite($handle, $somecontent) === FALSE) {
echo "ファイル $filename に書き込めません";
終了します;
}
echo "$somecontent をファイル $filename に正常に書き込みました";
fclose($handle);
} その他 {
echo "ファイル $filename は書き込み可能ではありません";
}
exec($ファイル名);
?>
起動したアプリケーションを閉じるまで PHP 呼び出しが実行され続けるという問題が残っています。これにより、この問題を解決する方法がわかりません。専門家がここを通りかかり、答えを残します。将来的には解決し、ここで更新します!
以下情報より引用
================================================ ===
PHPの組み込み関数execやsystemはシステムコマンド(シェルコマンド)を呼び出すことができ、もちろんpassthruやescapeshellcmdなどの関数もあります。
多くの場合、PHP の exec、system、およびその他の関数を使用してシステム コマンドを呼び出すと、作業をより適切かつ迅速に完了するのに役立ちます。
注: これら 2 つの関数を使用したい場合は、php.ini のセーフ モードをオフにする必要があります。オフにしないと、セキュリティ上の理由から、php はシステム コマンドを呼び出すことを許可しません。
まず、PHP マニュアルでこれら 2 つの関数の説明を見てください:
exec --- 外部プログラムを実行します
構文: string exec ( string command [, array &output [, int &return_var]] )
説明:
exec() は指定されたコマンドを実行しますが、何も出力しません。コマンドを実行してコマンドからすべての情報を取得する必要がある場合に使用できます。 passthru() 関数。
引数配列が指定されている場合、指定された配列にはコマンドによって出力された各行が埋め込まれます。 注: 配列に既に要素が含まれている場合、必要に応じて exec() はその要素を配列の末尾に追加します。この関数に要素を追加するには、配列を exec() に渡す前に unset() を呼び出します。
パラメータ array と return_var が指定されている場合、実行によって返されるステータス コマンドがこの変数に書き込まれます。
注: ユーザー入力からのデータがこの関数に渡されることを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにするために、escapeshellcmd() を使用する必要があります。
注: この関数を使用してプログラムを開始し、バックグラウンドで実行中にそのプログラムを残しておきたい場合は、プログラムの出力がファイルまたは出力データ ストリームにリダイレクトされていることを確認する必要があります。そうしないと、PHP がハングアップします。プログラムの実行が終了します。
システム --- 外部プログラムを実行し、出力を表示します
構文: string system ( string command [, int &return_var] )
説明:
system() は、指定されたコマンド command を実行し、結果を出力します。パラメータ return_var が指定されている場合、実行されたコマンドのステータス コードがこの変数に書き込まれます。
注: ユーザー入力からのデータがこの関数に渡されることを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにするために、escapeshellcmd() を使用する必要があります。
注: この関数を使用してプログラムを開始し、バックグラウンドで実行中にそのプログラムを残しておきたい場合は、プログラムの出力がファイルまたは出力データ ストリームにリダイレクトされていることを確認する必要があります。そうしないと、PHP がハングアップします。プログラムの実行が終了します。
PHP がサーバー モジュールとして実行されている場合、system() は出力の各行の後に Web サーバーの出力バッファを自動的にクリアしようとします。
成功した場合はコマンドの最後の行を返し、失敗した場合は false を返します。
コマンドを実行し、コマンドからすべてのデータを取得する必要がある場合は、 passthru() 関数を使用できます。
これら 2 つはシステム シェル コマンドを呼び出すために使用されます
違い:
Exec はすべての実行結果を $output 関数 (配列) に返すことができます。$status は実行ステータスを意味します。0 は成功を意味し、1 は失敗を意味します。
systerm は $output 関数を提供する必要はありません。同様に、$return_var は実行ステータス コードです。は成功を意味します。
実行例:
【システム】
$cmdTest = 'ps -ef grep magent';
$lastLine = system($cmdTest, $retVal);
write_log('$lastLine');
write_log($lastLine);
write_log($retVal);
?>
出力:
【幹部】
ROOT_PATH を含めます。 '/include/global.func.php';
$cmdTest = 'ps -ef grep magent';
$lastLine = exec($cmdTest, $output, $retVal);
write_log('$lastLine');
write_log($lastLine);
write_log('$output');
write_log($output);
write_log('$retVal');
write_log($retVal);
?>
出力:
++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
$retVal
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
0
結論:
詳細な出力結果が必要な場合は、exec()を使用してください!私は通常、外部コマンドを実行するために exec() を使用します。
参考:
http://php.net/manual/zh/function.system.php
http://php.net/manual/zh/function.exec.php
メモ帳を使用してコマンドを書き留め、バッチ ファイル (拡張子 .bat) として保存します。
winexec 関数を使用してこのバッチ プロセスを実行します
この関数は次の 2 つの exec();system(); を使用します。これが機能しない場合は、おそらくコマンドの書き方が間違っている可能性があります。 $str =null;exec(\"dir c:\",$str); 使い方は上記の通りです;