PHP讀取頁面內容的四種方法
阿新 • • 發佈:2018-12-19
方法1: 用file_get_contents 以get方式獲取內容
$url='http://www.domain.com/?para=123';
$html = file_get_contents($url);
echo $html;
用時:10個頁面 (4-5 s)
header("Content-type:text/html;charset=utf-8"); //程式執行時間 $starttime = explode(' ',microtime()); /*········以下是程式碼區·········*/ for ($i=1;$i<11;$i++) { $url='http://xiangmu.1637.com/p'.$i.'.html'; $html = file_get_contents($url); } /*········以上是程式碼區·········*/ //程式執行時間 $endtime = explode(' ',microtime()); $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]); $thistime = round($thistime,3); echo "本網頁執行耗時:".$thistime." 秒。";
方法2: 用fopen開啟url, 以get方式獲取內容
$fp = fopen($url, 'r');
$header = stream_get_meta_data($fp);//獲取報頭資訊
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
echo "url header: {$header} <br>";
echo "url body: $result";
fclose($fp);
用時:10個頁面 (4-5 s)
header("Content-type:text/html;charset=utf-8"); //程式執行時間 $starttime = explode(' ',microtime()); /*········以下是程式碼區·········*/ for ($i=1;$i<11;$i++) { $url='http://xiangmu.1637.com/p'.$i.'.html'; $fp = fopen($url, 'r'); $header = stream_get_meta_data($fp);//獲取報頭資訊 while(!feof($fp)) { $result .= fgets($fp, 1024); } //echo $result; fclose($fp); } /*········以上是程式碼區·········*/ //程式執行時間 $endtime = explode(' ',microtime()); $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]); $thistime = round($thistime,3); echo "本網頁執行耗時:".$thistime." 秒。";
方法3:用fsockopen函式開啟url,以get方式獲取完整的資料,包括header和body
$url='http://xiangmu.1637.com/p1.html';
echo get_url($url);
function get_url ($url,$cookie=false)
{
$url = parse_url($url);
$query = $url[path]."?".$url[query];
echo "Query:".$query;
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
if (!$fp) {
return false;
} else {
$request = "GET $query HTTP/1.1\r\n";
$request .= "Host: $url[host]\r\n";
$request .= "Connection: Close\r\n";
if($cookie) $request.="Cookie: $cookie\n";
$request.="\r\n";
fwrite($fp,$request);
while( [email protected]($fp)) {
$result .= @fgets($fp, 1024);
}
fclose($fp);
return $result;
}
}
//獲取url的html部分,去掉header
function GetUrlHTML($url,$cookie=false)
{
$rowdata = get_url($url,$cookie);
if($rowdata)
{
$body= stristr($rowdata,"\r\n\r\n");
$body=substr($body,4,strlen($body));
return $body;
}
return false;
}
用時:10個頁面 (3-6 s)
header("Content-type:text/html;charset=utf-8");
//程式執行時間
$starttime = explode(' ',microtime());
/*········以下是程式碼區·········*/
function get_url ($url,$cookie=false)
{
$url = parse_url($url);
$query = $url[path]."?".$url[query];
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
if (!$fp) {
return false;
} else {
$request = "GET $query HTTP/1.1\r\n";
$request .= "Host: $url[host]\r\n";
$request .= "Connection: Close\r\n";
$request.="\r\n";
fwrite($fp,$request);
while([email protected]($fp)) {
$result .= @fgets($fp, 1024);
}
fclose($fp);
return $result;
}
}
//獲取url的html部分,去掉header
function GetUrlHTML($url,$cookie=false)
{
$rowdata = get_url($url,$cookie);
if($rowdata)
{
$body= stristr($rowdata,"\r\n\r\n");
$body=substr($body,4,strlen($body));
return $body;
}
return false;
}
for ($i=1;$i<11;$i++) {
$url='http://xiangmu.1637.com/p'.$i.'.html';
//$url='http://xiangmu.1637.com/p1.html';
get_url($url);
}
/*········以上是程式碼區·········*/
//程式執行時間
$endtime = explode(' ',microtime());
$thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);
$thistime = round($thistime,3);
echo "本網頁執行耗時:".$thistime." 秒。";
方法4:使用curl庫,使用curl庫之前,可能需要檢視一下php.ini是否已經打開了curl擴充套件
$url='http://xiangmu.1637.com/p1.html';
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
用時:10個頁面 (3-6 s)
header("Content-type:text/html;charset=utf-8");
//程式執行時間
$starttime = explode(' ',microtime());
/*········以下是程式碼區·········*/
for ($i=1;$i<11;$i++) {
$url='http://xiangmu.1637.com/p'.$i.'.html';
//$url='http://xiangmu.1637.com/p1.html';
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
/*········以上是程式碼區·········*/
//程式執行時間
$endtime = explode(' ',microtime());
$thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);
$thistime = round($thistime,3);
echo "本網頁執行耗時:".$thistime." 秒。";
總結:這四種方法在速度上並沒有什麼卵子區別。。。。