ホームページ  >  記事  >  バックエンド開発  >  PHPでWindowsアプリケーションの起動、バッチバッチ処理の実行、cmdコマンドの実行方法(exec関数とsystem関数の詳細説明)、exec関数の詳細説明_PHPチュートリアル

PHPでWindowsアプリケーションの起動、バッチバッチ処理の実行、cmdコマンドの実行方法(exec関数とsystem関数の詳細説明)、exec関数の詳細説明_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:16:321300ブラウズ

PHPでWindowsアプリケーションの起動方法、batバッチ処理の実行方法、cmdコマンドの実行方法(exec関数とsystem関数の詳細説明)、exec関数の詳細説明

exec またはシステムは cmd コマンドを呼び出すことができます

コードに直接移動します:

コードをコピーします コードは次のとおりです:

/**Windowsの電卓を開く*/
exec('C:WindowsSystem32calc.exe を開始');

/**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 は実行ステータス コードです。

は成功を意味します。

実行例:


コードをコピーします コードは次のとおりです:
$a = exec("dir", $out, $status);
print_r($a);
print_r($out);
print_r($status);
?>

システム例:

コードをコピーします コードは次のとおりです:
$a = system("dir", $status);
print_r($a);
print_r($status);
?>

上記の手順は少しわかりにくいように思えるかもしれませんが、2 つの例を実行すると理解できるでしょう。

【システム】

コードをコピーします コードは次のとおりです:
set_time_limit(0);
定義('ROOT_PATH', ディレクトリ名(__FILE__));

ROOT_PATH を含めます。 '/include/global.func.php';

$cmdTest = 'ps -ef grep magent';

$lastLine = system($cmdTest, $retVal);

write_log('$lastLine');

write_log($lastLine);

write_log('$retVal');

write_log($retVal);
?>

出力:

コードをコピーします コードは次のとおりです:

++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
$lastLine
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
root 5375 5373 0 16:28 pts/1 00:00:00 grep magent
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
$retVal
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
0

【幹部】

コードをコピーします コードは次のとおりです:

set_time_limit(0);
定義('ROOT_PATH', ディレクトリ名(__FILE__));

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
$lastLine
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
root 5360 5358 0 16:25 pts/1 00:00:00 grep magent
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
$出力
++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
配列
(
[0] => ルート 2838 1 0 15:39 ? 00:00:00 magent -u root -n 51200 -l 192.168.137.100 -p 12001 -s 192.168.137.100:11212
[1] => root 5358 5356 0 16:25 pts/1 00:00:00 sh -c ps -ef grep magent
[2] => root 5360 5358 0 16:25 pts/1 00:00:00 grep magent
)

++++++++++++++++++++++++++++++++++++++++
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

システム関数を使用せずにC++でcmdコマンドを実行する方法

メモ帳を使用してコマンドを書き留め、バッチ ファイル (拡張子 .bat) として保存します。
winexec 関数を使用してこのバッチ プロセスを実行します

PHPでcmdコマンドやbat処理を実行する方法 - テクニカルQ&A

この関数は次の 2 つの exec();system(); を使用します。これが機能しない場合は、おそらくコマンドの書き方が間違っている可能性があります。 $str =null;exec(\"dir c:\",$str); 使い方は上記の通りです;

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/897017.html技術記事 Windows アプリケーションを起動し、bat バッチ処理を実行し、cmd コマンドを実行する PHP メソッド (exec 関数と system 関数の詳細な説明)、exec 関数または system のどちらでも cmd コマンドを直接呼び出すことができます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。