Зацикливание скрипта :(

GrayMaster

Новичок
Зацикливание скрипта :(

Непойму при каких условиях этот скрипт может зациклиться ??
Иногда случается - очень редко, но все-же мне такого ох как не нужно...
PHP:
function get_content_sock($url, $proxy = null) {
        global $config;
        
        $parsed_url = parse_url($url);
        
        if (!empty($proxy)) {
                list($host, $port) = explode(":", $proxy, 2);
        } else {
                $host = $parsed_url['host'];
                $port = 80;
        }
        
        $sock = fsockopen($host, $port, $errno, $errstr, 2);
        if (!$sock) {
                return false;
                exit();
        }

        fputs($sock, "GET ".$url." HTTP/1.0\r\n");
        fputs($sock, "Host: ".$parsed_url['host']."\r\n");
        fputs($sock, "Accept: */*\r\n");
        fputs($sock, "User-Agent: ".$config['spam']['user_agent']."\r\n");
        fputs($sock, "Connection: close\r\n");
        fputs($sock, "\r\n");

        $buf = null; $n = 0;
        while (!feof($sock)) {
                $buf .= fgets($sock, 4096);
                $status = socket_get_status($sock);

                if (strlen($buf) > 1024*256 or $n > 64 or $status['timed_out']) {
                        break;
                }
                $n++;
        }
        
        list($headers, $body) = split("\r\n\r\n", $buf, 2);
        
        fclose($sock);
        
        return $body;
}
 
как ты определил, что зацикливается?
зациклевается может в цикле :) он у тебя один
while...
 

GrayMaster

Новичок
Да я знаю что больше и негде...
Скрипт работает с множеством URL'ов - иногда всё оки, редко приходиться ждать пару минут пока выполнится, а иногда вообще стопорится... из за чего же непойму...
2 проверки запихал в цикл - всё равно...
 
интеренсно какие проверки?
на каких урлах стопорится?
 

GrayMaster

Новичок
Да вот даже не понять, их очень много, и иногда динамически определяются...

интеренсно какие проверки?
PHP:
$buf = null; $n = 0;
while (!feof($sock)) {
        $buf .= fgets($sock, 4096);
        $status = socket_get_status($sock);

        if (strlen($buf) > 1024*256 or $n > 64 or $status['timed_out']) {  // Вот это вот...
                break;
        }
        $n++;
}
-~{}~ 05.10.05 11:53:

Больше в скрипте зацикливаться негде, повисает скрипт из-за серваков с коротыми работает :D
Вот в чём дело непойму... Работает, работает, иногда бац и встанет. В шелл его до сих пор вижу - стоит, логи тоже стоят...
 

GrayMaster

Новичок
Вот именно что немогу :(
Это мне ничего думаю не даст, хотя попробую в логи выводить чтоб поймать того гада из за которого скрипт дохнет.
В чём ещё может быть ? Идей нет ?
 

Dreammaker

***=Ф=***
Как вариант... Может это не скрипт зацикливается, а всё таки, как ты и говорил, проблемы с серваками, к которым он обращается.. Перегруз там или что-то, вот они и не спешат отдававать требуемое....
Пример пхпклуб две ночи подряд, где-то в районе 2-3 часов по мск., он погружается в тяжкие раздумья и спустя несколько минут выдаёт тайм-аут гейтвей...
 
найди на каком $url висит
натрави свою функцию(с проксей) на него локально, посмотри что будет..
потом без прокси...
 

GrayMaster

Новичок
Как вариант... Может это не скрипт зацикливается, а всё таки, как ты и говорил, проблемы с серваками, к которым он обращается.. Перегруз там или что-то, вот они и не спешат отдававать требуемое....
Пример пхпклуб две ночи подряд, где-то в районе 2-3 часов по мск., он погружается в тяжкие раздумья и спустя несколько минут выдаёт тайм-аут гейтвей...
Без проблем такое быть может... Как можно таймаут сделать ?
 

tony2001

TeaM PHPClub
$buf .= fgets($sock, 4096);
>
$buf .= fread($sock, 4096);

fgets() - это для построчного чтения.
 
Сверху