phpのshell_execでハマったこととその対処法

phpでシェルスクリプトを実行し、実行結果を得るコマンドとしてshell_execというコマンドがあります。

実行結果がNULLかどうかを判断したかったので、

<?php

$output = shell_exec("/bin/sh command")
if ($output == NULL) {
処理
}

のように書いていましたが、$outputがNULLなはずなのに、if文の中に入らない時がありましたので、対処法を書きます。

$outputの中身を見てみる

print_r()を使う

print_r($output); die();

とすれば、

$outputの中身が表示され、die();により処理を止めることが出来ます。

しかし、NULLでも空白が入っていようとこれでは見た目は同じなので、今回の場合はあまり有効ではありません。

var_dumpを使う

同様に

var_dump($output); die();

とすることで、値を表示出来ますが、var_dumpの場合は文字列の長さも表示されます。

なので、

長さが0 → NULL
長さが0ではない → NULLではない(空白が入っている可能性)

と考えることが出来ます。

この空白をどのように処理するのか?

trim関数を使います。

この関数は空白を切り取ってくれる関数です。

なので、一番最初のプログラムに戻ると

<?php

$output = shell_exec("/bin/sh command")
if (trim($output) == NULL) {
処理
}

とすることで、$outputがNULL(空白が入っていても)if文の中を通ってくれます。