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

Linker

Guest
ObinoS:

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

ObinoS

Guest
Автор оригинала: Ramzes
ответь на вопрос, какой запрос посылает твой сервер удаленному и что приходит в ответ при использовании file()
при использовании, file("http://localhost/") отправил запрос:

GET / HTTP/1.0
Host: localhost

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

ObinoS

Guest
Автор оригинала: Linker
ObinoS:

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

По вопросу топика, я не могу судить, сколько файлов предполагается получать, какого они размера, и какие ситуации предполагаются быть чаще - отсутствие файлов, или их наличие. Все эти вопросы влияют на метод решения задачи.
 

Ramzes

Новичок
Автор оригинала: ObinoS
Я, честно говоря, не совсем понимаю, что Вы хотите от меня услышать?
пречитай первый пост Crazy (внимательно)
почитай RFC HTTP коды ответов и разницу между HEAD и GET
делай выводы , что дальше делать file или fgets уже неважно
 

Linker

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

ObinoS

Guest
Автор оригинала: Ramzes
пречитай первый пост Crazy (внимательно)
почитай RFC HTTP коды ответов и разницу между HEAD и GET
делай выводы , что дальше делать file или fgets уже неважно
Хорошо, надо разрешить наши разногласия. Какую задачу пытаетесь решить именно Вы? Определить, доступен ли удаленный файл для чтения, или же получить удаленный файл в виде массива?

Это очень важный вопрос.
 

ObinoS

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

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

Linker

Guest
ObinoS:

Вот пример:
Соединяемся первый раз, используем функцию file(), удалённый сервер временно не доступен (по разным причинам) что произойдёт? Скрипт Ваш будет прибит по таймауту секунд через 30 так и не отработав до конца.
А fsockopen() позволяет ограничить время на попытку соединения, а также выводить и анализировать ошибки.
 

ObinoS

Guest
Честно скажу, что понятия не имею какой у file() тайм-аут при попытке соединения. Не сталкивался.
 

ObinoS

Guest
Автор оригинала: Vetal
проверка доступности/существования http-ресурса нужна была для того, чтобы избавиться от варнингов
@file("http://hostname/filename.ext");
 

Vetal

Новичок
Автор оригинала: ObinoS
Честно скажу, что понятия не имею какой у file() тайм-аут при попытке соединения. Не сталкивался.
тайм-аут у скрипта, обычно равен 30-ти секундам, определеяется де-то в php.ini, Linker имел ввиду это...


Автор оригинала: ObinoS
@file("http://hostname/filename.ext");
вот оно! всё дело в собаке
 

Aku Aku

Guest
Линкер имел ввиду таймаут на соединение, один из аргументов fsockopen()
 

Aku Aku

Guest
ладно.. дело не в том
обьяснили ж что если пользоваться file() то при недоступности
ресурса скрипт будет тужиться сколько стоит max_execution_time в php.ini (30 сек по дефолту)
а в fsockopen() можно самому задать разумное время на попытку подключения
 

confguru

ExAdmin
Команда форума
Не думаю что с 1998года что-то изменилось :))
http://phpclub.net/samples/103.phps
 

Vetal

Новичок
Aku Aku, не, нифига
у меня с file() не было таких мрачных задержек, тока варнинги утомляли...
 

Linker

Guest
Vetal:

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

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

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

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