今回は、PHP でサーバのディスク状況を取得してみます。
サーバ上ではコンソールから df コマンドで標準出力されますが、PHP でも同じ要領で取得することが可能です。
では、早速 PHP で試してみましょう。
ディスクの状況確認
PHP には df の関数は用意されていないので、exec コマンドでdf コマンドを呼び出して結果を取得します。
1 2 3 4 5 | // DISK INFO exec ('df -h', $result, $status); df -h : ディスク状況を表示(容量に適したサイズで出力) $result : コマンドの結果が入る配列 $status : コマンドの結果(0:成功) |
後は配列に入った結果を整形すれば、HTML の表形式などできれいに見せることが可能です。
HTMLの整形でハマったこと
参考までに、HTML の表への整形でハマったことをまとめておきます。
$result には標準出力される内容が 1 行ずつ入ります。
よって、$result[0] は下記のような内容です。
1 | Filesystem Size Used Avail Use% Mounted on |
これを整形するには、スペースで区切るのが手頃ですので、1 行ずつ取り出し split 関数でさらに分解します。
1 2 3 | foreach ($result as $key => $value) { $view = split(" ", $value); } |
しかし、半角スペースの数は状況によって違うので、これではうまくいきません。
まずは、連続するスペースを 1 つのスペースにします。
また、「Mounted on」は 1 つの項目名なので、このスペースを取り除きます。
(もしくは、スペース以外の文字で連結する)
1 2 3 4 5 6 7 | foreach ($result as $key => $value) { // 前後に空白のある「Mounted on」と一致(\b[文字列]\b) $value = preg_replace("/\bMounted on\b/i", "MountedOn", $value); // 連続するスペースに一致 $value = preg_replace("/\s+/", " ", $value); $view = split(" ", $value); } |
あとは、$view をうまく利用して整形すれば完成です。