Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > проблема с fsockopen


Автор: Grom 23.7.2007, 08:27
в общем есть скрипт 
Код

$fp = fsockopen("www.direct.yandex.ru", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET /stat/wordsstat.pl?text=%D0%B1%D0%B8%D1%82%D0%B2%D0%B0 HTTP/1.1\r\n";
    $out .= "Host: www.direct.yandex.ru\r\n";
    $out .= "Connection: Close\r\n\r\n";
$str=0;
    fwrite($fp, $out);
    while (!feof($fp)) {
        $str .= fgets($fp, 128);
    }
    fclose($fp);

на сервере все ок выполняется, на denwer на локалке тоже самое выдает ошибку 
Цитата

Warning: fsockopen() [function.fsockopen]: unable to connect to www.direct.yandex.ru:8080 in z:\home\localhost\www\d\index.php on line 2

Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\localhost\www\d\index.php on line 2


с чем может быть связано ? Денвер стоит на работе на работе весь инет через проксю. В браузере прокся нормально настроина... помогите  smile 

Автор: mishaSL 23.7.2007, 09:52
Grom, попробуй через другой порт. На проксе есть авторизация?

Автор: Glip 23.7.2007, 10:29
Цитата(Grom @  23.7.2007,  08:27 Найти цитируемый пост)
В браузере прокся нормально настроина...

php не работает с настройками браузера.
или через curl
или ищите протоколы работы с прокси.

Автор: Mal Hack 23.7.2007, 12:30
Выкиньте Денвер к чертовой бабушке.
Если через браузер вы к сайту можете достучаться, то все нормально и проблема - в сервере.
И cURL вам тут не поможет.
1. Проверьте, если есть установленный брандмауэр, разрешен ли выход  во внешнюю Интернет сеть Apache.
2. Тайм-аут в сокете ставьте меньше, чем максимальное время выполнения скрипта (php.ini).

Автор: Grom 23.7.2007, 14:31
Mal Hack, брандмауер стоит но он отключен т.к. управляется политикой win домена.

Автор: mishaSL 23.7.2007, 17:10
Grom, 
Цитата(Mal Hack @  23.7.2007,  12:30 Найти цитируемый пост)
Выкиньте Денвер к чертовой бабушке.

Это точно smile 


Grom, вы не ответили:
Цитата(mishaSL @  23.7.2007,  09:52 Найти цитируемый пост)
На проксе есть авторизация? 


Автор: Grom 25.7.2007, 13:09
mishaSL, да, авторизация.

Автор: mishaSL 25.7.2007, 13:54
А если так попробовать:
Код

function urlGetContents(& $cUrl, $url, $port = 80, $timeout = 5, $errCount = 1)
{
    curl_setopt($cUrl, CURLOPT_URL, $url);
    curl_setopt($cUrl, CURLOPT_PORT, $port);
    curl_setopt($cUrl, CURLOPT_PROXY, ''); //Имя HTTP прокси, через который будут направляться запросы
    curl_setopt($cUrl, CURLOPT_PROXYUSERPWD, '');//Стока с именем пользователя и паролем к HTTP прокси-серверу в виде [username]:[password]
    curl_setopt($cUrl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($cUrl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
    curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
    $content = curl_exec($cUrl);
    if (curl_getinfo($cUrl,CURLINFO_HTTP_CODE) != 200) {
        return (($errCount < 2) ? urlGetContents($cUrl, $url, $port, $timeout, ++$errCount) : false);
    } else {
        return $content;
    }
}

$cUrl = curl_init();
$urlAddress = 'http://www.direct.yandex.ru/stat/wordsstat.pl?text=%D0%B1%D0%B8%D1%82%D0%B2%D0%B0';
if (($html = urlGetContents($cUrl, $urlAddress)) === false) {
    print "Адрес <b>".$urlAddress."</b> в данный момент недоступен";
} else {
    print $html;
}
curl_close($cUrl);


Только 5 и 6 строку измените для вашего прокси.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)