PHPで外部コマンドを実行する(2)


ちゃんと違いがありました。

昔のエントリでPHPから外部スクリプトを実行するときに、「“(バッククオート:実行演算子)」を利用することができることを学びましたが、system()関数との違いがわかりませんでした。

で、今日気づいたので備忘録。

  • system()関数は標準出力の結果が表示される
  • 「“(バッククオート:実行演算子)」は標準出力の結果が表示されない
    ※変数格納し、PHPでの出力処理が別途必要となる

これが大きな違いですね。
なので、

<?php

$result = system('ls');

echo "\n-----------\n\n";

echo $result;

echo "\n-----------\n\n";

$result = `ls`;

echo "\n-----------\n\n";

echo $result;

?>

これを実行すると、

fuga.txt
hoge.php
hoge.txt
moge.txt
piyo.txt
-----------

piyo.txt
-----------

-----------

fuga.txt
hoge.php
hoge.txt
moge.txt
piyo.txt

こんな結果になるわけですね。

ファイル削除やコピー、圧縮のような出力のない処理で使うことが多かったので気づきませんでした。
ちなみに、system()関数の戻り値は標準出力の最終行しか取得できないようですね。

これでまた一歩前進できました。

  1. No comments yet.
(will not be published)
  1. No trackbacks yet.