С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
52 / 52 / 9
Регистрация: 09.10.2009
Сообщений: 984

Проверка удалённого файла

05.03.2013, 00:22. Показов 2848. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно проверить по ссылке есть файл на сервере или нет ?
fopen не куда не годиться !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2013, 00:22
Ответы с готовыми решениями:

Проверка файла на json
Пользователь выбирает файл в формате json и нажимает кнопку отправить. На стороне сервера идет проверка на струкруту json, если нормальная...

Загрузка документа с удалённого сервера через Proxy
Здравствуйте, мне надо сделать скрипт, который будет читать файл с другого сервера через прокси сервер и заносить его в переменную....

Проверка типа загружаемого файла
Здравствуйте, такая проблема, при загрузке файла нужного типа выдаёт ошибку. if ($_FILES != 'image/png') { echo 'Вы можете...

19
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
05.03.2013, 02:21
http://www.php.net/manual/ru/function.is-file.php
0
52 / 52 / 9
Регистрация: 09.10.2009
Сообщений: 984
05.03.2013, 10:14  [ТС]
сразу убило "Определяет, является ли файл обычным файлом."
0
05.03.2013, 10:50

Не по теме:

Цитата Сообщение от SATMAN Посмотреть сообщение
сразу убило
http://ru.wikipedia.org/wiki/%D4%E0%E9%EB

0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
05.03.2013, 13:40
Нужно проверить по ссылке есть файл на сервере или нет
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
 
function http_headers( $file_url ) {
 
        # Запрашиваем http заголовки
        if( $responce = get_headers( $file_url ) ) {
        
            # Ответ сервера
            if( preg_match('/HTTP\/\d\.\d\s200\sOK/', $responce[0]) ) {
            
                    # Код ответа 200. Файл существует
                        return true ;
                } ese {
                
                        # Нет ответа. Файл не существует
                            return false ;
                    }
            } else {
            
                    # Ошибка открытия файла. Файл не существует
                        return false ;
                }
    }
 
?>
fopen не куда не годиться
возможно из-за того что на сервере, в конфигурационном файле парметр allow_url_fopen установлен в значение Off. Очень мало хостингов где он установлен в енейбл, т.е. On. Настройки конкретног интерпретатора php можно увидеть выполнив такой скрипт
PHP
1
<?php php_info() ; ?>
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
05.03.2013, 13:49
не проще тогда уж так:
PHP
1
2
3
if( $responce = get_headers( $file_url ) )
    return preg_match('/HTTP\/\d\.\d\s404\sOK/', $responce[0]) ? true : false;
return false;
1
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
05.03.2013, 14:17
не проще тогда уж так
ну, проще. можно еще и вот так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
function read_file($url) {
 
    if( ini_get('allow_url_fopen') ) {
    
            if( fopen($url, 'rt') ) {
                    return true ;
                } else {
                        return false ;
                    }
        } else {
        
                retrun 'disallow function' ;
            }
    }
    
?>
0
 Аватар для Mark666
20 / 20 / 3
Регистрация: 01.07.2010
Сообщений: 52
06.03.2013, 11:22
а вот это проще будет:
PHP
1
2
3
4
5
function read_file($url) {
    if(!ini_get('allow_url_fopen'))
        retrun 'disallow function' ;
    return (boolean)fopen($url, 'rt');
}
но как-то получается не красиво, в том плане, что функция возвращает и boolean и string. А при проверке, типа такого:
PHP
1
if(read_file('http://dsfsdfd...')) ...
если результат будет "отключена функция", то программа решит, что удаленный файл существует. Эта функция нас принуждает использовать оператор "===", но лучше просто исправить вывод функции.
В таком случае, хорошо бы вставить исключение и получим окончательно:
PHP
1
2
3
4
5
function read_file($url) {
    if(!ini_get('allow_url_fopen'))
        throw new Exception("allow_url_fopen disabled...");
    return (boolean)fopen($url, 'rt');
}
0
87 / 87 / 8
Регистрация: 02.09.2012
Сообщений: 510
10.03.2013, 14:27
А можно по научному сделать:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ch = curl_init();
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//вывод в переменную
 
        curl_setopt($ch, CURLOPT_URL, $url);
        if(!$ret=curl_exec($ch)){
            curl_close($ch);
            throw new Exception('not found url '.$url);
        }
        $info=  curl_getinfo($ch);
        if(isset($info['http_code']) &&
                ($info['http_code'] ==404 || $info['http_code'] ==403)){
            curl_close($ch);
            throw new Exception('not found url '.$url);
        }
        curl_close($ch);
return $ret;
0
 Аватар для Mark666
20 / 20 / 3
Регистрация: 01.07.2010
Сообщений: 52
10.03.2013, 15:34
casual_visitor, чтобы проверить, есть ли файл, ваш скрипт сначала его скачает, а потом скажет результат.
И зачем тут использовать исключения? Подумаешь, удаленного файла не оказалось, а наша программа из-за этого тормознет основной процесс.
Плюс использовать cUrl, то что гибко можно настроить запрос, и стоит указать таймаут ответа сервера.
Внесем апдейт в такую реализацию:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function read_file($url, $timeout = 3)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_URL, $url);
    $result = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
    if(!$result || array_search($info['http_code'], array(404, 403)) !== false)
        return false;
    return true;    
}
1
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
10.03.2013, 16:31
Дополним код в 15 строчке кодами ответа сервера по которым можно точно сказать что файл не существует.Hypertext Transfer Protocol -- HTTP/1.1

PHP
1
if(!$result || array_search($info['http_code'], array(301, 404, 403, 410, 417)) !== false)
Кликните здесь для просмотра всего текста
"100" Continue
"101" Switching Protocols
"200" OK
"201" Created
"202" Accepted
"203" Non-Authoritative Information
"204" No Content
"205" Reset Content
"206" Partial Content
"300" Multiple Choices
"301" Moved Permanently
"302" Found
"303" See Other
"304" Not Modified
"305" Use Proxy
"307" Temporary Redirect
"400" Bad Request
"401" Unauthorized
"402" Payment Required
"403" Forbidden
"404" Not Found
"405" Method Not Allowed
"406" Not Acceptable
"407" Proxy Authentication Required
"408" Request Time-out
"409" Conflict
"410" Gone
"411" Length Required
"412" Precondition Failed
"413" Request Entity Too Large
"414" Request-URI Too Large
"415" Unsupported Media Type
"416" Requested range not satisfiable
"417" Expectation Failed
"500" Internal Server Error
"501" Not Implemented
"502" Bad Gateway
"503" Service Unavailable
"504" Gateway Time-out
"505" HTTP Version not supported
1
87 / 87 / 8
Регистрация: 02.09.2012
Сообщений: 510
10.03.2013, 17:25
Цитата Сообщение от Mark666 Посмотреть сообщение
чтобы проверить, есть ли файл, ваш скрипт сначала его скачает, а потом скажет результат.И зачем тут использовать исключения?
если файла нет, или нет доступа - то не скачает А исключения вроде не запрещали еще к использованию. Проверять наличие файла на сервере ради интереса есть ли он там или нет, не скачивая.. довольно специфическая задача...

Не по теме:

А функции поиска в массивах для меня интересны, не знал - я к php проще подхожу, как в си - хочешь найти ищи сам

0
 Аватар для Mark666
20 / 20 / 3
Регистрация: 01.07.2010
Сообщений: 52
10.03.2013, 19:10
casual_visitor, цель этой ветки была в проверке наличия файла, а вы изменили поведение функции (скачивание файла) и об этом даже не предупредили, на что можно сказать - это баг. По вашей теме вообще стоит использовать file_get_contents() - и проверил, и скачал.
Если считаете, что:
PHP
1
return $ret;
вернет файл, то вы ошибаетесь. Функция вернет файл вместе с заголовками ответа, поэтому файл будет битым. Для этого еще нужно выключить заголовки CURLOPT_HEADER -> false. Но опять-таки, это уже другая задача.

А исключения вроде не запрещали еще к использованию
Например, eval тоже никто не запрещает использовать. А вы в каждой своей функции используете exception, где просто нужно вернуть false?
Хотя в принципе, все зависит от, того, как использовать try..catch и вполне, вы можете быть здесь правы.

Проверять наличие файла на сервере ради интереса есть ли он там или нет, не скачивая.. довольно специфическая задача...
Вот пример, заказчик дал вам задачу: хочу спарсить статистику по всем товарам из магазина, где у каждого товара есть фото, описание, прилепленный видео-ролик - демонстрация товара и прочие поля. Так вот, в результате хочу получить таблицу со всеми текстовыми полями, фотографией и пометкой, есть ли прикрепленный видео-ролик или нет.
Если фотографию нам нужно и проверить, и скачать, да и весит она не так уж и много, то с видеороликами дела обстоят иначе. К примеру, ролик в среднем весит 10Мб, а товаров в магазине 5000 шт. У половины товаров есть ролики. Значит, для заметки о том, есть ли видео-ролики у товаров или нет, вам понадобится 25Гб трафика на обход, плюс дополнительное время на загрузку файлов.
Тут и возникает резонный вопрос о проверке удаленного файла
0
87 / 87 / 8
Регистрация: 02.09.2012
Сообщений: 510
10.03.2013, 19:44
Цитата Сообщение от Mark666 Посмотреть сообщение
file_get_contents() - и проверил, и скачал.
сервер может обломать такой подход, а с curlом проблем будет меньше
Цитата Сообщение от Mark666 Посмотреть сообщение
Если считаете, что:
PHP
1
return $ret;
вернет файл, то вы ошибаетесь.
Вот пример, заказчик дал вам задачу: хочу спарсить статистику по всем товарам из магазина, где у каждого товара есть фото, описание, прилепленный видео-ролик - демонстрация товара и прочие поля. Так вот, в результате хочу получить таблицу со всеми текстовыми полями, фотографией и пометкой, есть ли прикрепленный видео-ролик или нет.
Если фотографию нам нужно и проверить, и скачать, да и весит она не так уж и много, то с видеороликами дела обстоят иначе. К примеру, ролик в среднем весит 10Мб, а товаров в магазине 5000 шт. У половины товаров есть ролики. Значит, для заметки о том, есть ли видео-ролики у товаров или нет, вам понадобится 25Гб трафика на обход, плюс дополнительное время на загрузку файлов.
Тут и возникает резонный вопрос о проверке удаленного файла
Я так не считаю и соответственно не ошибаюсь. По поводу видеороликов - достаточно парсить html на предмет ссылок на ресурсы.
Задача творческая, но интересная
0
 Аватар для Mark666
20 / 20 / 3
Регистрация: 01.07.2010
Сообщений: 52
10.03.2013, 20:05
Я так не считаю и соответственно не ошибаюсь
Хорошо, и что вы хотели возвращать в качестве результата?

По поводу видеороликов - достаточно парсить html на предмет ссылок на ресурсы.
Задача творческая, но интересная
а если ссылки битые, заказчик будет недоволен, когда ваши результаты не соответствуют действительности
0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
10.03.2013, 20:27
Хорошо, и что вы хотели возвращать в качестве результата?
Mark,
PHP
1
return $ret;
где
PHP
1
$ret=curl_exec($ch)
а в мануале php есть строка
mixed curl_exec ( resource ch )
т.е. результатом выполнения curl_exec могут быть данные различного типа, в т.ч. и булевы истина или ложь, что и хотел применить в скрипте casual_visitor
PHP
1
2
3
4
5
if( curl_exec($ch) ) {
          return true ;
     } else {
               return false ;
          }
разве так нельзя?
0
87 / 87 / 8
Регистрация: 02.09.2012
Сообщений: 510
10.03.2013, 20:39
Цитата Сообщение от Mark666 Посмотреть сообщение
Хорошо, и что вы хотели возвращать в качестве результата?
возвращать я собирался данные согласно требованиям проекта, а получить я хотел всего лишь ответ сервера
Цитата Сообщение от Mark666 Посмотреть сообщение
а если ссылки битые, заказчик будет недоволен, когда ваши результаты не соответствуют действительности
Значит ресурс не заслуживает доверия. ... а если заказчик му-ак, если кирпич упадет... а если у заказчика трубу прорвало..

Добавлено через 1 минуту
Цитата Сообщение от tolimadokara Посмотреть сообщение
PHP
1
2
3
4
5
if( curl_exec($ch) ) {
          return true ;
     } else {
               return false ;
          }
разве так нельзя?
не всегда срабатывает

Добавлено через 2 минуты
Да что мы раздули тему. Не скачался файл - значит для нас его нет.. просто CURLом больше вероятности скачать и более подробный ответ сервера получаем
0
52 / 52 / 9
Регистрация: 09.10.2009
Сообщений: 984
11.03.2013, 19:50  [ТС]
Хорошая была тема , но решил её....
Сделал проверку заголовков , если 404 то нет если ок то дальше работать , скрипт скину если нужно
0
 Аватар для Mark666
20 / 20 / 3
Регистрация: 01.07.2010
Сообщений: 52
11.03.2013, 20:01
SATMAN, к тому же, если функция написана с применением сокетов, тогда тема будет очень хорошо развернута

tolimadokara, да, можно конечно. Мой вопрос был не с технической стороны, а скорее, с концептуальной.

casual_visitor, не знаю, почему так вышло. Тема просто оказалось довольно интересной
0
52 / 52 / 9
Регистрация: 09.10.2009
Сообщений: 984
11.03.2013, 21:37  [ТС]
Mark666,
Я данную тему поднял на стороннем форуме и там также подняли тему , посути не к чему не пришли к определёному .
P/S скину скрипт , сейчас я немного выперший .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2013, 21:37
Помогаю со студенческими работами здесь

Проверка порта удалённого компьютера
Пробросил в интернет порт VNC сервера на нестандартном для него порту. Кто-нибудь может выяснить какая служба открыла порт?

Восстановление удалённого файла
Приветствую всех, господа, возникла следующая ситуация, вчера по нелепой случайности удалил два файла формата .mov при том, что один из них...

Чтение удалённого XML-файла со своего web-сайта
Мне необходимо осуществить чтение удалённого XML-файла со своего web-сайта. Для того, чтобы осуществить чтение этого удалённого...

Получение контента из удалённого файла и вывод его в Toast
Всем привет, начал заниматься программированием под Android совсем недавно. Вот который день мучаюсь с простейшим кодом. Даже решил...

Не удаётся запустить Windows из-за испорченного или удалённого файла
При включении компьютера пишет мол не удаётся запустить виндовс из за испорченного или удалённого файла: windows root /sustem32/hal.dll....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru