PHP5のWindows版を使っています。
外部コマンドを実行して、Windowsのバッチファイルのエラーレベル値と標準出力(標準エラー?)の3つを取得できる関数はありますか?
test.cmdの中味
echo 標準出力内容です。
echo バッチファイルで標準エラー出力はわかりませんが
exit /b 2
list ($ret, $stdout, $stderr) = 何か関数("test.cmd")
echo $ret; // 2
echo $stdout; // 標準出力内容です。\nバッチファイルで標準エラー出力はわかりませんが
echo $stderr; // ????
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
1関数で行うそのものズバリな関数はありませんが、
proc_open/proc_close と pipe を使うことで実現できます。
http://php.net/manual/ja/function.proc-open.php
コードにするとこんな感じでしょうか。
---
<?php
list($ret, $stdout, $stderr) = process("test.cmd");
print "ret=$ret\n";
print "stdout=$stdout\n";
print "stderr=$stderr\n";
function process($cmd) {
$result_code = -1;
$result_stdout = '';
$result_stderr = '';
$descriptorspec = array(
0 => array("pipe", "r"), // 0=STDIN
1 => array("pipe", "w"), // 1=STDOUT
2 => array("pipe", "w") // 2=STDERR
);
$process = proc_open($cmd, $descriptorspec, $pipes);
if (is_resource($process)) {
fclose($pipes[0]);
$result_stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$result_stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$result_code = proc_close($process);
}
return array($result_code, $result_stdout, $result_stderr);
}
?>
---
stdin はパイプにする必要はありませんが、
入力待ちになって呼び出したプログラムが止まってしまうのを防ぐため、パイプにした上で何も入れずに閉じてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Excel(エクセル) VBAで、㉑という数値が、正しく、入力できない 2 2022/07/26 20:22
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Java Java 年数計算 3 2023/01/28 10:52
- その他(AV機器・カメラ) モバイルバッテリー(USB出力)でラジオを動かす方法 7 2022/05/31 11:17
- 教育・学術・研究 偏差値と標準得点の違いはなんですか? この前学力テストみたいなやつを受けて、英語の点数が88点で標準 1 2022/11/23 14:04
- UNIX・Linux JSLinuxのコマンドについて。 abの小文字aを大文字Aに置換して標準出力するコマンドを1行で示 1 2022/07/25 18:34
- Excel(エクセル) Excel ユーザー定義で変換したセルについて 3 2023/02/04 01:25
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスの日本語をロ...
-
2次元配列の値の受け渡しについ...
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
PHPで配列をPOSTデータで送った...
-
マッチング処理(1:N)
-
$_SESSIONに二次元配列を使える...
-
バイナリファイルの内容を、そ...
-
スカラーのベクトル微分
-
複数行のデータのPOST処理に関して
-
配列をループでたくさん宣言し...
-
PHPでCSVの一部の行を編集したい
-
Perlで重複行を削除したい
-
CSVファイルの最終行のデー...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
【Smarty】foreach関数やsectio...
-
C言語 最大値と最小値を求めて...
-
C言語の配列をPush(追加)する...
-
PHPのセレクトボックスの初期値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
QuickForm createElement での ...
-
phpのin_array()でわからない事...
-
バッチでFTPコマンド
-
NGワード設定もしくはテキス...
-
2次元配列の値の受け渡しについ...
-
file_get_contents()にて文字化け
-
Zend_Form_Element_Hash
-
日付、時間の2段階でソート
-
サイト名を取得するPHP
-
codeigniterのページネーション...
-
しりとり 無限ループ?
-
phpとmysqlで「あいまい検索」...
-
listへのappendが出来ない件
-
テキストボックスの日本語をロ...
-
usortで3つの項目を昇順・降順...
-
1~100の数字の9の倍数だけ同じ...
-
pukiwikiのユーザ認証の設定で...
-
cakephp2.6でfindを使い合計値...
-
PHP5の外部コマンド実行で、バ...
おすすめ情報