打开网易查看源代码,可以看到其中有这样的一段话........
<!-- 新闻中心 Start -->
<div id="NewsCenter">
....................
</div>
<!-- 新闻中心 End -->
.......我只要新闻中间的部分.当然不是想要网易上的东东.因为业务需要,要获得某网站上提交之后的内容.
<!-- 新闻中心 Start -->
<div id="NewsCenter">
....................
</div>
<!-- 新闻中心 End -->
.......我只要新闻中间的部分.当然不是想要网易上的东东.因为业务需要,要获得某网站上提交之后的内容.
<?php
error_reporting(E_ALL);
$contents='';function getTheTime(){
$time = gettimeofday();
return ((float)($time['usec']*0.000001) + (float)($time['sec']));
}$startTime1=getTheTime();$handle = fopen ("http://www.163.com", "r");
do {
$data = str_replace("\n",'',fread($handle, 8192));
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
$temp1=preg_replace("/.+新闻中心 Start -->(.+)<\!-- 新闻中心 End.+/",'\1',$contents);
fclose($handle);
$endTime1=getTheTime();//echo $temp1;
$startTime2=getTheTime();$handle = fopen ("http://www.163.com", "r");
do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
$temp2=substr($contents,strpos($contents,'<!-- 新闻中心 Start -->'));
$temp2=substr($temp1,0,strpos($temp2,'<!-- 新闻中心 End -->'));
fclose($handle);
$endTime2=getTheTime();//echo $temp2;echo "<br>第一种方法(正则表达式)用时:",$endTime1-$startTime1,"<br>";
echo "第二种方法(截取子字串)用时:",$endTime2-$startTime2,"<br>";?>
直接搜索子串当然比正则快,str_replace就比preg_replace快很多
而且你两次都用fopen()去取内容,影响结果的还有数据传输的因素.
将你的测试代码改正后,你很容易就能看出结果:
<?php
error_reporting(E_ALL);
$contents=file_get_contents('http://www.163.com');
//echo htmlspecialchars($contents);
function getTheTime(){
$time = gettimeofday();
return ((float)($time['usec']*0.000001) + (float)($time['sec']));
}$startTime1=getTheTime();$temp1=preg_replace("/.+新闻中心 Start -->(.+)<\!-- 新闻中心 End.+/",'\1',$contents);$endTime1=getTheTime();//echo $temp1;
$startTime2=getTheTime();$temp2=substr($contents,strpos($contents,'<!-- 新闻中心 Start -->'));
$temp2=substr($temp1,0,strpos($temp2,'<!-- 新闻中心 End -->'));$endTime2=getTheTime();//echo $temp2;echo "<br/>第一种方法(正则表达式)用时:",$endTime1-$startTime1,"<br/>";
echo "第二种方法(截取子字串)用时:",$endTime2-$startTime2,"<br/>";?>
HTML代码而已,要不要换行符又有什么区别呢?
<?php
error_reporting(E_ALL);
echo '<pre>';
$contents=file_get_contents('http://www.163.com');
function getTheTime(){
$time = gettimeofday();
return ((float)($time['usec']*0.000001) + (float)($time['sec']));
}
$startTime1=getTheTime();
$temp1=preg_replace('/.+新闻中心\sStart\s-->(.+)<\!--\s新闻中心\sEnd.+/s', '\1', $contents);
$endTime1=getTheTime();
echo $temp1;
$startTime2=getTheTime();
preg_match('/新闻中心\sStart\s-->(.+)<\!--\s新闻中心\sEnd/s', $contents, $arr);
$endTime2=getTheTime();
print_r($arr);
$startTime3=getTheTime();
$temp2=substr($contents,strpos($contents,'<!-- 新闻中心 Start -->'));
$temp2=substr($temp2,0,strpos($temp2,'<!-- 新闻中心 End -->'));
$endTime3=getTheTime();
echo $temp2;
echo "<br/>第一种方法(正则表达式 preg_replace)用时:",$endTime1-$startTime1;
echo "<br/>第一种方法(正则表达式 preg_match)用时:",$endTime2-$startTime2;
echo "<br/>第三种方法(截取子字串)用时:",$endTime3-$startTime3;
?>