2007/09/10

[函數] file_get_contents 讀取網頁,並分析內容

參考資料來源 :
http://www.tsingfeng.com/show-552-1.html

最近在幫客戶寫網頁程式的時候,客戶希望能夠從另一個 Server (B)的 MySQL 讀取內容並且及時更新
問題來了,就是 Server(B) 的 MySQL 並沒有對外開放連結
那要如何做到讀取資料庫內容,並及時更新呢

我採用了以下的方法 :
  1. 在 Server(B) 寫一個網頁程式 (news.php),讀取 Server(B) 資料庫內容,並且輸出最簡單格式的文字檔
  2. 在 Server(A) 寫一個網頁程式,讀取 news.php 的內容,並且加以整理成 SQL 字串,就可以順利更新 Server(A) 的資料庫了
讀取網頁內容的程式如下 :
================================================
$file_contents = file_get_contents('http://www.helloks.com/');
echo $file_contents;
================================================

不過 file_get_contents() 不是每個 Server 都能順利執行,PHP 版本 < 4.3.10 就不能使用(官方說的)
不能用 file_get_contents() 的原因,我所知的只有2個:
  1. PHP 版本 < 4.3.10
  2. 主機服務商把 php 的 allow_url_fopen 選項關閉了,使用 phoinfo() 可以查詢這些項目
很詭異的,這次的案子,以上兩個障礙都不存在,但依然不能使用
我用 function_exists() 來查詢的結果 file_get_contents() 也存在於 Server 上
我無計可施,只好再一次請出Google大神,找到了一個替代法 : 使用另外一個函數 curl

原來使用 file_get_contents 函數的範例 :
================================================
$file_contents = file_get_contents('http://www.helloks.com/');
echo $file_contents;
================================================

換成curl函數的使用範例 :
================================================
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'http://www.helloks.com');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
================================================

沒有留言:

張貼留言