2009年3月25日水曜日

死んだあとのPHPテスター

簡易負荷テスト用コード
min から max まで時間あけて接続します。
使いようによってはダウンローダーみたいにもいけるかと。

function microtime_float(){
list ($msec, $sec) = explode(' ', microtime());
$microtime = (float)$msec + (float)$sec;
return $microtime;
}
function gettest(){
$res = "";
if( empty($_REQUEST['min'] )
||empty($_REQUEST['max'])
||empty($_REQUEST['wait'])
||empty($_REQUEST['max_time'])){
return $res;
}
$min = (int)$_REQUEST['min'];
$max = (int)$_REQUEST['max'];
$wait = (int)$_REQUEST['wait']*1000;
$max_time = (int)$_REQUEST['max_time'];
$end_microtime =microtime_float()+$max_time;
set_time_limit( $max_time+10 );

for($i=$min;$i<=$max;$i++){
$folder_num = sprintf("%04d",ceil($min/1000));
$dirname = "./res/".$folder_num;
if(!is_dir($dirname)){
mkdir($dirname);
}
$filename=$dirname."/".$min.".html";
if(file_exists($filename)){
$min++;
$res = $min;
continue;
}
$testurl="$_REQUEST['URL']".
"$_REQUEST['URI']".$min;
$html =file_get_contents($testurl);
if(!$html){
sleep(10);
if(microtime_float()>$end_microtime || $min>=$max){
break;
}
continu;
}
$pattern = '適当な正規表現';
$matches = array();
preg_match($pattern,$html,$matches);
if(!empty($matches[1])){
$data = $matches[1];
$fp = fopen($filename, 'w');
if ($fp){
if (flock($fp, LOCK_EX)){
if (fwrite($fp, $data) === FALSE){
return $res;
}
flock($fp, LOCK_UN);
}
}
fclose($fp);
}
$min++;
$res = $min;
if(microtime_float()>$end_microtime || $min>=$max){
break;
}
usleep($wait);
}
return $res;
}
$next =gettest();
$next_max = ((int)$_REQUEST['max']>$next)?($_REQUEST['max']):($next);

?>

0 件のコメント:

コメントを投稿