Как проверить, существует ли файл по URL - PullRequest
38 голосов
/ 07 октября 2011

Мне нужно проверить, существует ли определенный файл на удаленном сервере. Использование is_file() и file_exists() не работает. Есть идеи, как сделать это быстро и легко?

Ответы [ 6 ]

71 голосов
/ 18 апреля 2015

Для этого вам не нужен CURL ... Слишком много накладных расходов, чтобы просто захотеть проверить, существует файл или нет ...

Использовать get_header PHP .

$headers=get_headers($url);

Затем проверьте, содержит ли $ result [0] 200 OK (что означает, что файл есть)

Функция проверки работоспособности URL может быть такой:

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}

/* You can test a URL like this (sample) */
if(UR_exists("http://www.amazingjokes.com/"))
   echo "This page exists";
else
   echo "This page does not exist";
70 голосов
/ 07 октября 2011

Вы должны использовать CURL

function does_url_exists($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($code == 200) {
        $status = true;
    } else {
        $status = false;
    }
    curl_close($ch);
    return $status;
}
16 голосов
/ 24 июля 2013

Я только что нашел это решение:

if(@getimagesize($remoteImageURL)){
    //image exists!
}else{
    //image does not exist.
}

Источник: http://www.dreamincode.net/forums/topic/11197-checking-if-file-exists-on-remote-server/

7 голосов
/ 29 августа 2016

Привет согласно нашему тесту между двумя различными серверами, результаты выглядят следующим образом:

с использованием curl для проверки 10 файлов .png (каждый около 5 МБ) в среднем составлял 5,7 секунды.проверка заголовка для одной и той же вещи занимает в среднем 7,8 секунды!

Так что в нашем тесте скручивание было намного быстрее, если вам нужно проверять большие файлы!

наша функция скручивания:

function remote_file_exists($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if( $httpCode == 200 ){return true;}
    return false;
}

вот наш пример проверки заголовка:

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}
1 голос
/ 07 октября 2011

Сделайте запрос с помощью curl и посмотрите, вернет ли он код состояния 404.Выполните запрос, используя метод запроса HEAD, чтобы он возвращал только заголовки без тела.

0 голосов
/ 17 октября 2018

Вы можете использовать функцию file_get_contents ();

if(file_get_contents('https://example.com/example.txt')) {
    //File exists
}
...