Открытие удаленного файла

3D

Новичок
Открытие удаленного файла

Никак не могу разрешить проблему.
Я пытаюсь открыть удаленный файл функцией
fopen(). В принципе все работает нормально, но если удаленный сервер по какой-то причине долго не отвечает, то скрипт прекращает работать!

Т.е. не функция прекращает работать и возвращает ошибку, а весь php скрипт прекращает выполняться.

Конечно можно увеличить timeout, но как обойтись без этого?
как сделать, чтоб если сервер не отвечает, то скрипт продолжал работать, а я получал сообщение об ошибке?

Помогите, plz
 

3D

Новичок
Tor
сервер доступен. Просто иногда не знаю почему, такое бывает особенно, когда посылаешь сразу несколько запросов подрят. Может пик нагрузок или еще что.


PS: а каким образом лучше проверить доступен ли сервер?
 

3D

Новичок
Все равно не получается

stream_set_timeout($fh,0);
if (!$fh = fopen ($server,'r')) $flagERR=1;

if (!$flagERR)
while ($buf=fread($fh, 256)){
$page.=$buf;
}
fclose($fh);

5 запросов проходит нормально, а 6ой прерывает работу всего скрипта
Причем скрипт прерывается после функции fopen();
 

alan4ick

Guest
Интересно, а как это ты устанавливаешь stream_set_timeout на неоткрытый поток ? ;-)
 

3D

Новичок
Переписал все через сокеты:

ini_set('default_socket_timeout', 0);
$fh = fsockopen($server, 80, $errno, $errstr, 10);
if ($fh) {
$out = "GET $get HTTP/1.1\r\n";
$out .= "Host: $server\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fh, $out);
while ($buf=fread($fh, 256)){$page.=$buf;};
fclose($fh);
}

5 запросов проходит, а на шестой опять выдает ошибку:
"Fatal error: Maximum execution time of 30 seconds exceeded in ..."
и прекращает выполнение
 

alan4ick

Guest
>>Maximum execution time of 30 seconds
http://ru2.php.net/set_time_limit
 

3D

Новичок
alan4ick
От того что я увеличу время для выполнения скрипта проблема не решится: а если сервер упал? То какой timeout не ставь все равно будет эта ошибка!!!
 

kost

Новичок
Есть такафя функции ob_start(), которая позволяет перехватывать данные, поступающие в выходной поток скрипта, и производить с ними любые преобразования. По счастливой случайности, ob_start() позволяет также перехватывать ошибки, произошедшие в скрипте, в том числе фатальные, не поддающиеся перехвату никакими другими способами!
 

С.

Продвинутый новичок
3D Писал:

> Т.е. не функция [[ fopen() ]] прекращает работать
> и возвращает ошибку, а весь php скрипт прекращает выполняться.

Согласно тому тексту сообщения об ошибке, это не правда. Финкция fopen() не прекращает работать и не выдает никого сообщения об ошибке. Сообщение проходит совсем из другого места.
 

3D

Новичок
С.
Но скрипт прекращает работать именно после нее!
 
Сверху