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

Vetal

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

перед вызовом file('http://host.domain/page.html') необходимо узнать доступность/существование данного ресурса,
пробовал file_exist - возвращает всегда false

может есть какой-нибудь совсем другой способ считывания http-файла в массив? с проверкой...
 

ObinoS

Guest
По-мойму, функция file возвращает false, в случае отсутствия/недоступности ресурса.
 

Crazy

Developer
Решение, которое кажется мне разумным:

1. Посылаем HEAD-запрос через сокет.
2. При таймауте считаем ресурс временно недоступным.
3. При получении ответа анализируем код. К примеру, при 401 или 404 -- недоступен. При 301 или 302 -- совсем дугое дело.
 

Vetal

Новичок
не пробовал это только потому что в доке написано "возвращает массив", но попробую
 

ObinoS

Guest
В мануале так и написано:

Identical to readfile(), except that file() returns the file in an array.
(...)
Upon failure, file() returns FALSE.
 

Ramzes

Новичок
ObinoS, объясни зачем трафик гнать?
надо делать, как сказал Crazy.
По этому принципу работает яндекс каталог, на проверку живучести ресурса
 

ObinoS

Guest
Мой вариант как раз и трафу, по идее, меньше тратит, и работает быстрее.
Смотри, допустим удаленный файл существует, и сервер работает нормально. Сначала мы в скрипте коннектимся к серверу, делаем запрос, читаем ответ, затем с помощью функции file снова(!) коннектимся к серверу, и делаем практически тот-же самый запрос. С другой стороны, если файла не существует, число запросов у этих двух вариантов одинаково, но file по определению проработает быстрее.
 

ObinoS

Guest
не поверишь, я и то и то почитал ) Что же я там такого пропустил?
 

Crazy

Developer
В рассуждениях ObinoS'а есть рациональное зерно: экономия трафика будет, если мы всегда после проверки доступности будет запрашивать контент. Но, опять таки, делать это лучше не через file, а вручную через сокеты. Ибо иначе я не виду способа отличить недоступность от несуществования.

Если автору треда важен лишь сам факт прихода/неприхода данных, то мой способ действительно избыточен -- и по трафику, и по сложности.
 

ObinoS

Guest
Автор оригинала: Ramzes
По этому принципу работает яндекс каталог, на проверку живучести ресурса
Угу... А функция file работает не по этому принципу?
 

Linker

Guest
Obinos:

Как думаете - что быстрее:
скорость работы скрипта на сервере или скорость соединения с удалённым сервером?
 

ObinoS

Guest
В большинстве случаев я полагаю, что скорость работы скрипта. Хотя это разумеется зависит от того, какой скрипт, и где удаленный сервер.
 

Linker

Guest
Тогда из этого следует, что file() или fsockopen() - по скорости практически равны?

А вот возможности первой уступают возможностям второй, так?
 

ObinoS

Guest
Автор оригинала: Ramzes
попробуй послать запрос телнетом : HEAD http://localhost/ HTTP/1.1
сравни ответ с тем, что возвращает file() при удачной попытке
Он вернет заголовки. Хотя и file() в случае отсутствия файла тоже вернет небольше чем заголовки. Хотя если файл есть, функция вернет нам именно то, что нужно. Никто не предлагает только проверять доступность ресурса с помощью функции file().

// Вам кстати тоже можно почитать рфски всякие ;) запрос http://localhost HTTP/1.1 к серверу избыточен :-Р
 

Vetal

Новичок
извиняюсь за вмешательство ;)

проверка доступности/существования http-ресурса нужна была для того, чтобы избавиться от варнингов
пока реализованно php_flag display_errors off в .htaccess, не очень конечно

продолжайте...
 

Ramzes

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

ObinoS

Guest
Автор оригинала: Linker
Тогда из этого следует, что file() или fsockopen() - по скорости практически равны?

А вот возможности первой уступают возможностям второй, так?
Из того что я сказал, этого абсолютно не следует. fsockopen() лишь открывает соединение, а file() открывает соединение и работает с ним (запрос, овтет, анализ ответа). А вот та разница в скорости о которой я говорил получается, что после открытия соединения fsockopen'ом с этим соединением надо в скрипте еще работать. И не говорите мне, что две идентичные программы на пхп, и исполняемый код выполняются с одинаковой скоростью.
 
Сверху