Проверка доступности/существования http-ресурса

  • Автор темы Автор темы Vetal
  • Дата начала Дата начала
ObinoS:

И сколько по Вашему составит разница между file() и fsockopen()+fread()/fgets() ?
Неужели это сопоставимо с временем которое уходит на соединение с удалённым сервером?
 
Автор оригинала: Ramzes
ответь на вопрос, какой запрос посылает твой сервер удаленному и что приходит в ответ при использовании file()
при использовании, file("http://localhost/") отправил запрос:

GET / HTTP/1.0
Host: localhost

Очень много, правда? Я, честно говоря, не совсем понимаю, что Вы хотите от меня услышать? Признание в том, что чтобы получить удаленный файл в виде массива лучше пользоваться сокетами, чем функцией file()? Но это же не правда.
 
Автор оригинала: Linker
ObinoS:

И сколько по Вашему составит разница между file() и fsockopen()+fread()/fgets() ?
Неужели это сопоставимо с временем которое уходит на соединение с удалённым сервером?
Все зависит от задачи(число файлов и размер файлов), и желания писать рациональные программы.

По вопросу топика, я не могу судить, сколько файлов предполагается получать, какого они размера, и какие ситуации предполагаются быть чаще - отсутствие файлов, или их наличие. Все эти вопросы влияют на метод решения задачи.
 
Автор оригинала: ObinoS
Я, честно говоря, не совсем понимаю, что Вы хотите от меня услышать?
пречитай первый пост Crazy (внимательно)
почитай RFC HTTP коды ответов и разницу между HEAD и GET
делай выводы , что дальше делать file или fgets уже неважно
 
Многие люди используют file(http://...) или fopen(http://...)
потому что: "ну ведь работает же!!!" а вот fsockopen() - функция какая-то "неправильная" она не хочет "сама всё сделать в одной строчке" по этому всячески поддерживаются сказки о том, что она медленная "геморная" одним словом "не подходит".
 
Автор оригинала: Ramzes
пречитай первый пост Crazy (внимательно)
почитай RFC HTTP коды ответов и разницу между HEAD и GET
делай выводы , что дальше делать file или fgets уже неважно
Хорошо, надо разрешить наши разногласия. Какую задачу пытаетесь решить именно Вы? Определить, доступен ли удаленный файл для чтения, или же получить удаленный файл в виде массива?

Это очень важный вопрос.
 
Автор оригинала: Linker
Многие люди используют file(http://...) или fopen(http://...)
потому что: "ну ведь работает же!!!" а вот fsockopen() - функция какая-то "неправильная" она не хочет "сама всё сделать в одной строчке" по этому всячески поддерживаются сказки о том, что она медленная "геморная" одним словом "не подходит".
Вы полагаете, я отношусь к этому большинству?

Вы в корне не правы. Я не хочу использовать fsockopen(), потому что не вижу смысла писать на пхп то, что уже есть в стандартных методах. Примерно это было написано и в статье, которая называлась (не помню точно, могу и наврать) "10 Стандартных Ошибок Программистов".
 
ObinoS:

Вот пример:
Соединяемся первый раз, используем функцию file(), удалённый сервер временно не доступен (по разным причинам) что произойдёт? Скрипт Ваш будет прибит по таймауту секунд через 30 так и не отработав до конца.
А fsockopen() позволяет ограничить время на попытку соединения, а также выводить и анализировать ошибки.
 
Честно скажу, что понятия не имею какой у file() тайм-аут при попытке соединения. Не сталкивался.
 
Автор оригинала: Vetal
проверка доступности/существования http-ресурса нужна была для того, чтобы избавиться от варнингов
@file("http://hostname/filename.ext");
 
Автор оригинала: ObinoS
Честно скажу, что понятия не имею какой у file() тайм-аут при попытке соединения. Не сталкивался.
тайм-аут у скрипта, обычно равен 30-ти секундам, определеяется де-то в php.ini, Linker имел ввиду это...


Автор оригинала: ObinoS
@file("http://hostname/filename.ext");
вот оно! всё дело в собаке
 
Линкер имел ввиду таймаут на соединение, один из аргументов fsockopen()
 
ладно.. дело не в том
обьяснили ж что если пользоваться file() то при недоступности
ресурса скрипт будет тужиться сколько стоит max_execution_time в php.ini (30 сек по дефолту)
а в fsockopen() можно самому задать разумное время на попытку подключения
 
Не думаю что с 1998года что-то изменилось :))
http://phpclub.net/samples/103.phps
 
Aku Aku, не, нифига
у меня с file() не было таких мрачных задержек, тока варнинги утомляли...
 
Vetal:

Я имел ввиду вот что:

обычно скрипт по-умолчанию работает 30 сек. (set_time_limit() - в расчёт не беру, во-первых не каждый хостер позволяет разбазаривать ресурсы сервера, во-вторых в нашем случае держать скрипт работающим вхолостую бесполезно)

если использовать file() или fopen() - мы не сможем контролировать результат обращения к удалённому серверу, это вроде бы происходит из-за перегруженности каналов связи, или перегруженности сервера - т.е. мы вынуждены ждать ответ сервера.
А указав timeout для fsockopen() мы жёстко задаём время, после которого принудительно прекращается попытка соединения, т.е. оставляем своему скрипту несколько секунд чтобы он успел отработать сам до конца - ошибки зафиксировать, результат работы вывести и т.д.

Глушить ошибки собакой работая с file() - конечно можно, всё равно file() ничего не "скажет" о соединении с удалённым сервером, кроме как: "can't create stream", а вот fsockopen()
укажет номер ошибки по которой можно определить что не так.
 
Сверху