2011-10-25 14 views
0

我有一個php腳本,我最近添加了一個數組。 php腳本從數組中檢查URL的一組文本,這些文本也在數組中。除非腳本不遵循重定向或檢查子頁面,否則一切都很好。 我被告知這是fsocketopen的限制,我需要使用CURL。 如果是這種情況,那麼我需要一些幫助,從使用fsocketopen轉換爲CURL。希望有一些方法可以讓fsocketopen遵循重定向或至少訪問子頁面。需要將fsocketopen更改爲CURL以便能夠導航重定向

function check($host, $find){ 
    $fp = fsockopen($host, 80, $errno, $errstr, 10); 
    if (!$fp){ 
     echo "$errstr ($errno)\n"; 
    } else { 
     $header = "GET/HTTP/1.1\r\n"; 
     $header .= "Host: $host\r\n"; 
     $header .= "Connection: close\r\n\r\n"; 
     fputs($fp, $header); 
     while (!feof($fp)) { 
      $str.= fgets($fp, 1024); 
     } 
     fclose($fp); 
     return (strpos($str, $find) !== false); 
    } 
} 

function alert($host){ 
    $headers = 'From: Set your from address here'; 
    mail('[email protected]', 'Website Monitoring', $host.' is down' $headers); 
} 

$hostMap = array(
    'www.my-domain.com' => 'content on site', 
    'www.my-domain2.com' => 'content on second site', 
); 

//if (!check($host, $find)) alert($host); 
foreach ($hostMap as $host => $find){ 
    if(!check($host, $find)){ 
     alert($host); 
    } 
} 
unset($host); 
unset($find); 

顯然我不清楚我的問題。我正在尋找確認fsocketopen無法關注重定向,或者無法訪問子頁面(url.com/subpage)。 如果是這樣的話,CURL是我最好的選擇,並且有我能看的任何例子嗎?

+0

Stackoverflow不是「請爲我代碼」網站。如果你需要某些特定的幫助,或者不知道爲什麼有些事情不行,那很好。親自嘗試一下。檢查文檔。如果無法弄清楚,請查找其他示例。 – Mike

+0

那麼如何確認我的假設對於fsocketopen是否正確。我不記得要求某人爲我編碼。我尋求幫助,包括指點某人在正確的方向。 – Havock

+0

'fsockopen'本身不會遵循重定向,但是如果您看到http://www.php.net/manual/en/function.fsockopen.php#52033,您可能會了解如何完成這項工作做了某種遞歸函數。只要確保在重定向循環的情況下對重定向的數量設置某種限制,這是大多數瀏覽器所做的。 – Mike

回答

0

當你得到從feof()返回的數據時,你可以從頭文件中解析出重定向信息並創建連接,但是這很煩人,並且它自己做。

你應該只能夠使用

$ch = curl_init($host); 
curl_setopt_array($ch, array(
    CURLOPT_RETUNTRANSFER => true 
    , CURLOPT_FOLLOWLOCATION => true 
    , CURLOPT_HEADER => true 
)); 
$str = curl_exec($ch); 

cURL遵循使用Location:頭默認重定向。