出力行をキャプチャするには、参照によって渡される変数とともにexecを使用する必要があります。
$lastLine = exec('df -h',$output);
execは、戻り値として、最後の行のみを返します。実行されたコマンドexecの完全な出力は、$ outputパラメーター(exec()が配列に変換して埋める参照によって提供された変数)で実行されます。また、PHP:参照の説明)
例えば
<?php
$lastLine = exec('df -h',$output);
print "\n$lastLine\n";
print_r($output);
印刷します
none 990M 0 990M 0% /var/lock
Array
(
[0] => Filesystem Size Used Avail Use% Mounted on
[1] => /dev/sda1 145G 140G 5.8G 97% /
[2] => none 981M 668K 980M 1% /dev
[3] => none 990M 3.4M 986M 1% /dev/shm
[4] => none 990M 240K 989M 1% /var/run
[5] => none 990M 0 990M 0% /var/lock
)
ご覧のとおり、$ lastLineは、実際にはコマンドが出力した最後の行です。
申し訳ありませんが、shell_execまたはbackticksが機能しない理由がわかりません。
次に、構文解析パターンについて説明します。
<?php
// was stil using your posted 'wrong output'
$output = "JID Pri S Owner Number Pages Dials TTS Status 36 127 R www-da 0xxxxxxxx 0:1 0:12 32 127 R www-da 0xxxxxxxx
0:1 0:12 35 127 R www-da 0xxxxxxxx 0:1 0:12";
// we just strip the header out
$header = "JID Pri S Owner Number Pages Dials TTS Status ";
$headerless = str_replace($header,'',$output);
$pattern = '/([0-9]+)\s+([0-9]+)\s+([A-Z]+)\s+([^\s]+)\s+([^\s]+)\s+([0-9:]+)\s+([0-9:]+)/m'; // m to let it traverse multi-line
/*
we match on 0-9 whitespace 0-9 WS A-Z 'Anything not WS' WS ANWS WS 0-9:0-9 WS 0-9:0-9
*/
preg_match_all($pattern,$headerless,$matches);
print_r($matches);
これにより、すべての個別の要素が得られます。明らかに、execを使用して配列で返す場合は、ヘッダーなどをすべて削除する必要はありませんが、私の意見では、パターンは正常に機能するはずです。