Необходимо изменить fsocketopen на CURL, чтобы иметь возможность перемещаться по перенаправлениям - PullRequest
0 голосов
/ 25 октября 2011

У меня есть скрипт 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 голосов
/ 25 октября 2011

Когда вы получаете данные, возвращенные из 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:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...