Как определить перенаправление страницы с помощью PHP?

Я пытаюсь определить, существует ли изображение на удаленном сервере. Тем не менее, я пробовал несколько методов и не могу заставить ни один из них работать.

Прямо сейчас я пытаюсь использовать это:

if (!CheckImageExists("http://img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg")) {
    print_r("DOES NOT EXIST");
} else {
    print_r("DOES EXIST");
};

function CheckImageExists($imgUrl) {
    if (fopen($imgUrl, "r")) {
        return true;
    } else {
        return false;
    };
};

Но он возвращает «истину», независимо от того, существует ли изображение на самом деле или нет (изображение выше должно быть, но измените его на тарабарщину, и оно все равно вернет «истину»). У меня такое ощущение, что это может быть потому, что если URL-адрес не существует, он перенаправляет на домашнюю страницу сайта. Но я не знаю, как это обнаружить.

Спасибо за любую помощь!


person blabus    schedule 20.05.2010    source источник
comment
Вы можете легко проверить эту гипотезу, вставив URL-адрес в браузер (если только вы не думаете, что PHP перенаправляет... но я могу вам сказать, что это не так)   -  person Brian    schedule 20.05.2010
comment
О, я точно знаю, что это перенаправление - если изображение не существует, оно просто перенаправляет на домашнюю страницу сайта. Этот URL-адрес, который я тестирую выше, действителен, вы можете попробовать его сами.   -  person blabus    schedule 20.05.2010


Ответы (4)


Используйте cURL.

После извлечения ресурса вы можете получить код ошибки, вызвав curl_errno()< /а>.

person Seb    schedule 20.05.2010
comment
Я также пробовал этот метод, однако я возвращаю код «200», независимо от того, существует ли изображение на самом деле или нет, и просто перенаправляет. Поэтому я не знаю, как я могу использовать это, чтобы различать их. - person blabus; 20.05.2010
comment
Код 200 означает «ОК», что означает, что это не 404, так что забудьте об этом. Я вижу, что если я запрошу img2.netcarshow.com/ABT-Audi_R8_2008_1024x768_wallpaper_01.jpg2, которого не существует, я получаю действительную страницу. Учитывая, что этот сайт не соответствует W3C (не отправляет 404), вам нужно будет обработать его вручную, т. е. проверить полученный контент, чтобы убедиться, что это «пользовательская» страница 404. - person Seb; 20.05.2010

Скорее всего, вы получаете HTML-страницу обратно в свой $imgUrl, которая содержит «404 изображение не найдено» или что-то подобное.

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

person NibblyPig    schedule 20.05.2010
comment
Как мне проверить код? Потому что, как я сказал выше, один метод, который я пробовал, возвращал код «200», независимо от того, существовало ли изображение на самом деле или не существовало и просто перенаправлялось. - person blabus; 20.05.2010

Это должно помочь (используя размер изображения):

if (!CheckImageExists("http://www.google.com/intl/en_ALL/images/srpr/logo1w.png")) {
    echo 'DOES NOT EXIST';
} else {
    echo 'DOES EXIST';
};

function CheckImageExists($imgUrl) {
    if (@GetImageSize($imgUrl)) {
        return true;
    } else {
        return false;
    };
};
person Codex73    schedule 20.05.2010
comment
Я тоже пробовал этот метод, но он всегда возвращает false, даже для существующих изображений. - person blabus; 20.05.2010

Получил работу по методу Себа. Просто использовал YQL, чтобы проверить фактическое содержимое страницы и определить, является ли это ошибкой или нет.

person blabus    schedule 20.05.2010