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

  • Автор темы Автор темы 3D
  • Дата начала Дата начала

3D

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

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

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

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

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


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

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();
 
Интересно, а как это ты устанавливаешь stream_set_timeout на неоткрытый поток ? ;-)
 
Переписал все через сокеты:

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
От того что я увеличу время для выполнения скрипта проблема не решится: а если сервер упал? То какой timeout не ставь все равно будет эта ошибка!!!
 
Есть такафя функции ob_start(), которая позволяет перехватывать данные, поступающие в выходной поток скрипта, и производить с ними любые преобразования. По счастливой случайности, ob_start() позволяет также перехватывать ошибки, произошедшие в скрипте, в том числе фатальные, не поддающиеся перехвату никакими другими способами!
 
3D Писал:

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

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