2011-06-05 57 views
1

我認爲在瀏覽特定網站時記錄我的瀏覽或執行特定任務的一種有趣方式是創建某種覆蓋(前端)以坐在我的頂部瀏覽器視圖窗口並在後臺解析Web服務器數據中使用PHP。這些對於基於腳本的代理和廣告等服務非常普遍。哪個PHP函數最適合檢索Web服務器數據

如果我使用PHP來保存維基百科文章的純文本副本,那麼在離線緩存的情況下,如果您願意,哪種檢索數據的方法最合適?

使用流函數(file_get_contents,文件etc ..)或cURL/core PHP HTTP請求甚至套接字? (儘管修改TCP/IP並不是最簡單的方法)。

回答

1

使用file_get_contents()如果您只是檢索數據,它是最簡單的方法並且始終可用。

如果你需要POST數據,使用捲曲(一個PHP擴展,從而它不能保證你的服務器上啓用),如果你需要其他的東西比HTTP

套接字只需要,https或ftp。
(對於支持的協議檢查「已註冊的PHP流」在你的phpinfo)

如果你想下載的網頁,包括CSS,等你可能想看看wget
一個標準的Linux命令行工具來下載內容。

<?php 
chdir('/path/to/store/the/files/'); 
system('wget -E -H -k -K -p -nd http://www.example.com/'); // use passthru() instead of system if you want to see the output/errors. 
?> 

(我不知道所有這些參數的意思是,我只是複製這個片段來自here,檢出manual瞭解詳細信息)

+0

我正在使用file_get_contents()和分鐘,但它顯然不保留樣式表等的相對路徑,因此縮小了使用範圍。我可以使用cURL和前一個函數的組合來請求數據以及接收數據。 – Lee 2011-06-05 12:49:51

+0

等一下...'file_get_contents()'總是可用?我認爲PHP配置可能會禁止通過URL-s進入此功能,並且實際上有服務器拒絕它... – rhino 2011-06-05 20:39:54

+0

非常感謝您提醒我wget!在Cpanel上配置CronJob時,我忘了使用了這個和其他一些linux命令。 – Lee 2011-06-05 21:53:03

1

我曾經將Zend Framework的一個組件看作一個http客戶端。
我認爲這是最容易和最強大的做這種蜘蛛。我正試圖記住它的名字。

這是Zend_Http_Client。例如:

$client = new Zend_Http_Client('http://wiki/'); 
$response = $client->request(); 
print_r($response->getBody()); 
+0

哇,我還沒有看到過。告訴我,通常可以通過PHP訪問嗎?在聯機手冊中我找不到zend_http_client。 – Lee 2011-06-05 10:29:52

+0

不,它的Zend框架的一部分 – 2011-06-05 10:31:10

+0

@Lee:您必須下載Zend Framework,然後將其包含在您的應用程序中。你可以在這裏找到很多有用的東西 – dynamic 2011-06-05 10:32:24

1

我敢肯定,捲曲將是你最好的選擇。輕鬆入門,輕鬆適應您的需求,非常強大。瞭解更多:http://php.net/manual/en/book.curl.php

+1

cURL與XML解析器結合應該做同樣的詭計。 – 2011-06-05 10:32:06

相關問題