Существование файла (удалённо)

  • Автор темы Автор темы 2People
  • Дата начала Дата начала

2People

Новичок
Существование файла (удалённо)

Мне надо проверить существование файла на удалённой машине.

fopen не подходит, т.к. если файла нет, то скрипт долго пытается достучаться до файла, т.е. мне надо что-то с возможностью выставлять лимит времени.

А точнее, мне надо определять наличие файла http://62.203.*.*:****/listen.pls и выводить в браузер состояние работы.

Мне бы что-то типа ftp_connect
 
Пробовал, не работает.
Если адрес вида 62.203.*.* работает, а на 62.203.*.*/listen.php нет.
 
Не работает (всегда выводит OFF.jpg):
PHP:
$ip=$ipend . "/listen.pls";
$login_result = fsockopen("$ip", $port);
if ($login_result=="" || $login_result==false) {
	readfile("OFF.jpg");
} else {
	readfile("ON.jpg");
}

(Я не спрашивал, рабочие ли не работают или утюги.)
(Если бы была ошибка, я бы её описал, а это не работает)
 
Работает так:
PHP:
$ip=$ipend;  //<= ИЗМЕНЕНО ТОЛЬКО ТУТ
$login_result = fsockopen("$ip", $port);
if ($login_result=="" || $login_result==false) {
	readfile("OFF.jpg");
} else {
	readfile("ON.jpg");
}
но мне это не надо, мне нужен именно файл.
 
2People

Тебе нужно основы читать.

ip адрес и HTTP запрос - разные вещи.
Тебе нужно не просто установить соединение, но и послать HTTP запрос, Хотя-бы HEAD.
 
Автор оригинала: alexhemp
2People

Тебе нужно основы читать.

ip адрес и HTTP запрос - разные вещи.
Тебе нужно не просто установить соединение, но и послать HTTP запрос, Хотя-бы HEAD.
Типа того : Соединяюсь с сервером, а потом спрашиваю его про нужный мне файл. Смотрю что он мне ответит.

Спасибо.
 
Реализавл данную проблему так
PHP:
function fast_chec($url)
    {
        $c = curl_init($url);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_TIMEOUT, 2); // максимальное время отклика
        curl_setopt($c, CURLOPT_HEADER, 1);
        $page = @curl_exec($c);
        curl_close($c);
        $page = explode("\n", $page);
		echo $page["0"];
        if (eregi("200", $page["0"]))
        {
            return true; // Файл существует и доступен для скачивания
			
        }
        else
        {
			
            return false; // При любом другом ответе сервера отличного от 200
        }
    }
однако иногда даже если файл существует в $page["0"] возвращает
HTTP/1.1 302 Moved Temporarily
никак не могу понять в чем причина
 
Romeo, ты про протокол http и коды статуса слышал что-нибудь? что делает броузер получив HTTP/1.1 302 Moved Temporarily представляешь?
 
fopen не годиться так как файл большой да и смысл его открывать если нужно проверить только его существование
 
fsockopen

-~{}~ 18.08.08 02:33:

И freadом читаешь до конца заголовков, курл счас не помню, может так делать или нет.
А 302(редирект) код обрабатывается элементарно strpost или preg_match в руки.
 
Romeo
А что по-вашему означает проверить существование , ну-ка? =)
Это и есть - получение только заголовков, не не контента .
Fopen не читает файл, а как раз таки делает подготовку к его чтению .
В общем разницы нет, способов куча .
Anarki
Если курлом - то CURLOPT_NOBODY в true и получаем всю нужную информацию о соединении через curl_getinfo() .
 
Проблема с HTTP/1.1 302 Moved Temporarily решаеться так
PHP:
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
кажалось бы добавить еще.как посоветовал Farsh
PHP:
curl_setopt($ch, CURLOPT_NOBODY, 1);
и все путем будет однако возниклапроблема на удаленном сервере стоит мод реврайт и если файла не существует то они выдает картинку и поэтому с включенным CURLOPT_NOBODY он выдает что файл существует. если же выключить то сценарий завершиться фатальной ошибкой, так как проверяемые файлы большие и не хватит памяти на выполнение скрипта
 
Смотри заголовки Content-Type и Content-Lenght и по ним ориентируйся. HINT: Если картинка, то они всегда одни и теже и известны.
 
если выдача картинки идет как редирект, то можно смотреть в сторону redirect_count из curl_getinfo()
 
Сверху