|
|
|
|
|
在php里,要想打開網(wǎng)頁URL獲得網(wǎng)頁內(nèi)容,比較常用的函數(shù)是fopen()和file_get_contents()。如果要求不苛刻,此兩個函數(shù)多數(shù)情況下是可以根據(jù)個人愛好任意選擇的,本文談下此兩函數(shù)的用法有什么區(qū)別,以及使用時需要注意的問題。
fopen()打開URL
下面是一個使用fopen()打開URL的例子:
<?php
$fh = fopen('http://www.baidu.com/', 'r');
if($fh){
while(!feof($fh)) {
echo fgets($fh);
}
}
?>
從此例子可以看到,fopen()打開網(wǎng)頁后,返回的$fh不是字符串,不能直輸出的,還需要用到fgets()這個函數(shù)來獲取字符串。fgets()函數(shù)是從文件指針中讀取一行。文件指針必須是有效的,必須指向由 fopen() 或 fsockopen() 成功打開的文件(并還未由 fclose() 關閉)。
可知,fopen()返回的只是一個資源,如果打開失敗,本函數(shù)返回 FALSE 。
file_get_contents()打開URL
下面是一個使用file_get_contents()打開URL的例子:
<?php
$fh= file_get_contents('http://www.baidu.com/');
echo $fh;
?>
從此例子看到,file_get_contents()打開網(wǎng)頁后,返回的$fh是一個字符串,可以直接輸出的。
通過上面兩個例子的對比,可以看出使用file_get_contents()打開URL,也許是更多人的選擇,因為其比fopen()更簡單便捷。
不過,如果是讀取比較大的資源,則是用fopen()比較合適。
知識擴充
file_get_contents()模擬referer,cookie, 使用proxy等等
參考代碼
ini_set('default_socket_timeout',120);
ini_set('user_agent','MSIE 6.0;');
$context=array('http' => array ('header'=> 'Referer: http://www.baidu.com/', ),);
$xcontext = stream_context_create($context);
echo $str=file_get_contents('http://gazebo2go.com/',FALSE,$xcontext);