需要将fsocketopen更改为CURL才能导航重定向

时间:2011-10-25 14:54:13

标签: php curl

我有一个PHP脚本,我最近添加了一个数组。 php脚本检查数组中的URL,以查找数组中的一组文本。一切都很好,除了脚本不会遵循重定向或检查子页面。 我被告知这是fsocketopen的限制,我需要使用CURL。 如果是这种情况,那么我需要一些帮助,将其从使用fsocketopen转换为CURL。希望有一些方法可以让fsocketopen遵循重定向或至少访问子页面。

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('my-email@my-domain.com', '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是我最好的选择吗?我可以看一下这些例子吗?

1 个答案:

答案 0 :(得分:0)

当你从feof()返回数据时,你可以从标题中解析出重定向信息并创建连接到那个,但这有点烦人,cURL自己做。

你应该能够使用

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

cURL默认使用Location:标题重定向。