phpでunixコマンドを実行する際に使うラッパー関数を作成した
phpでunixコマンドを実行する事が多かったので、簡単な関数を作ってみました。
終了ステータスあり版となし版を作ってみました。
exec()(終了ステータスあり)
exec.php
function exec_cm($command){
$command .= ' 2>&1'; //error内容出力
exec($command, $output, $re);
return [
'output' => implode("\n", $output),
'is_error' => ($re == 0) ? false : true
];
}
$command = 'cp test.txt test2.txt';
$re = exec_cm($command);
if($re['is_error']){ //エラーの場合のみ内容を出力
echo $re['output'];
}
これで実行した場合、test2.txtが作成されます。
また、ファイルがなかったりしたら
cp: cannot stat ‘atest.txt’: No such file or directory%
って感じで出力されます。
exex()の場合終了ステータスは取れますが、出力結果が配列で返って来るため加工が必要です。
passthru()(終了ステータスなし)
exec.php
function exec_cm($command){
$command .= ' 2>&1'; //error内容出力
ob_start();
passthru($command);
$output = ob_get_clean();
return $output;
}
$command = 'cp test.txt test2.txt';
$re = exec_cm($command);
echo $re;
これで実行した場合もexec()の時と同じ結果になります。
ただ、こちらは終了ステータスを見ることはできません。
標準出力と標準エラー出力をそのまま変数に突っ込みたい時などに使えそうです。
passthru()の場合終了ステータスは取れないですが、出力結果が未整形で返って来るためそのまま使えます。
まとめ
exec()
終了ステータス取れる。
出力は配列で返ってくるので加工しないといけない。
passthru()
終了ステータス取れない。
出力は未整形で返ってくるのでそのまま使える。
※実際は主に画像のバイナリを出力したりする時に使うみたいです。
phpの中で複数のunixコマンドを実行する必要がある時などは使えそうです。
Author And Source
この問題について(phpでunixコマンドを実行する際に使うラッパー関数を作成した), 我々は、より多くの情報をここで見つけました https://qiita.com/manato0119/items/209c39e8868e4622b25c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .