4
Total accesses: 296282 - Total Traffic: 1.2 GB
CPU Usage: u757.94 s165.33 cu0 cs0 - 2.56% CPU load
8.22 requests/sec - 33.5 kB/second - 4175 B/request
22 requests currently being processed, 26 idle workers

上記を文字列として持ち、その文字列を変数に格納するとします。問題:次の値を取得したい:

  1. リクエスト/秒-現在の値は8.22です
  2. 現在処理中のリクエスト-現在の値は22です
  3. アイドル状態のワーカー-現在の値は26です

strpossubstrを使用していくつかの解決策を実行しましたが、上記の値は動的であるため、2桁または4桁以上になる可能性があるため、まったく良い解決策とは思いません。

サンプルコード:

$rps = substr($data,strpos($data,"requests/sec")-5,4);
echo $rps; //displays 8.22

これを行う別の方法はありますか?私はどんな応答にも感謝します:)

4

3 に答える 3

4

正規表現。

$values = array();
preg_match("/(?P<rps>[\d.]+) requests\/sec(.*)(?P<requests>[\d]+) requests (.*)(?P<workers>[\d]+) idle workers/", $your_text, $values);

print 
"requests/sec - CURRENT VALUE IS {$values['rps']}
 requests currently being processed - CURRENT VALUE IS {$values['requests']}
 idle workers - CURRENT VALUE IS {$values['workers']}";
于 2012-07-17T15:47:43.923 に答える
3

正規表現は機能します:

<?php
$data = 'Total accesses: 296282 - Total Traffic: 1.2 GB
CPU Usage: u757.94 s165.33 cu0 cs0 - 2.56% CPU load
8.22 requests/sec - 33.5 kB/second - 4175 B/request
22 requests currently being processed, 26 idle workers';

if( preg_match('/(\d*\.?\d*)\srequests\/sec/', $data, $m) ){
    echo $m[1];
}else{
    echo 'no match';
}
于 2012-07-17T15:45:54.960 に答える
2

そのすべての出力が文字列変数$outputにあると仮定します。あなたはこれを行うことができます:

// requests per second
$regex = '#^([0-9]*\.?[0-9].*)\040requests/sec#';
preg_match($regex, $output, $matches);
$req_per_sec = $matches[1];

// request being processed
$regex = '/([0-9]*)\040requests\040currently/';
preg_match($regex, $output, $matches);
$req_processed = $matches[1];

// idle workers
$regex = '/\040([0-9]*)\040idle\040workers/';
preg_match($regex, $output, $matches);
$idle_workers = $matches[1];
于 2012-07-17T15:57:57.257 に答える