Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要将fsocketopen更改为CURL才能导航重定向_Php_Curl - Fatal编程技术网

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

Php 需要将fsocketopen更改为CURL才能导航重定向,php,curl,Php,Curl,我最近在一个php脚本中添加了一个数组。php脚本检查数组中的URL,以查找数组中的一组文本。除了脚本不会跟随重定向或检查子页面之外,其他一切都很好。 我被告知这是fsocketopen的一个限制,我需要使用CURL。 如果是这种情况,那么我需要一些帮助将其从使用fsocketopen转换为CURL。希望有办法让fsocketopen跟随重定向,或者至少访问子页面 function check($host, $find){ $fp = fsockopen($host, 80, $errn

我最近在一个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是我最好的选择吗?有什么例子我可以看一下吗?

当你从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:header执行重定向。

Stackoverflow不是一个请为我编写此代码的网站。如果你在某些特定的事情上需要帮助,或者不知道为什么某些事情起作用/不起作用,那很好。你自己试试看。检查文档。如果你想不出其他的例子。那么,确认一下我关于fsocketopen的假设是否正确,怎么样。我不记得曾要求别人为我编写代码。我请求帮助,这包括为某人指明正确的方向。fsockopen本身不会遵循重定向,但是如果你看到了,你可能会知道如果你做了某种递归函数,这是如何实现的。只要确保在重定向循环的情况下对重定向的数量进行某种限制,这是大多数浏览器所做的。感谢链接Mike,这里有一些很好的示例。