PHP: проверить, существует ли изображение (методы) - PullRequest
2 голосов
/ 31 марта 2012

У меня более 5000 ссылок на изображения, и мне нужно найти способ проверить, существуют ли они. Я использовал getimagesize(), но это заняло слишком много времени. Скорость для меня критична.

Я написал небольшую функцию, но она не работает, я не знаю почему.

function img_exists($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    if(curl_exec($ch))
        return true;
    else
        return false;

    curl_close($ch);
}

В данный момент я выполняю проверку с помощью PHP. Пожалуйста, дайте мне знать, если есть лучшее решение.

Обратите внимание, что если время соединения истекло (1 секунда), то функция возвращает false. Скорость критична.

ОБНОВЛЕНИЕ: Файлы расположены на другом сервере.

Ответы [ 2 ]

4 голосов
/ 31 марта 2012

Если вы можете, curl_multi_* функции должны ускорить весь процесс, посмотрите руководство .

Кроме того, просто выполнение запроса HEAD (вместо GET) сэкономит вам довольно много байт / времени, добавьте следующее:

curl_setopt_array($ch, array(CURLOPT_HEADER => true, CURLOPT_NOBODY => true));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
2 голосов
/ 31 марта 2012

если вам нужно проверить файлы на вашем собственном сервере, вы можете просто использовать file_exists() - если вам нужно проверить удаленные файлы и включить allow_url_fopen, вы можетеиспользуйте fopen() примерно так:

function url_exists($path){
    return (@fopen($path,"r")==true);
}

небольшую заметку для вашей функции: вы пытаетесь вызвать curl_close() после возврата значения, так что это утверждение бессмысленно, так какникогда не будет достигнут (и может вызвать утечки памяти, потому что вы никогда не закрываете поток).

...