Я знаю, что есть по крайней мере 10 одинаковых вопросов с ответами, но ни один из них не работает для меня безупречно. Я пытаюсь проверить, существует ли внутреннее или внешнее изображение (действителен ли URL-адрес изображения?).
fopen($url, 'r')
не работает, если я не использую@fopen()
:Warning: fopen(http://example.com/img.jpg) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in file.php on line 21
getimagesize($img)
не работает, если изображение не существует (PHP 5.3.8):Warning: getimagesize() [function.getimagesize]: php_network_getaddresses: getaddrinfo failed
- CURL не работает, потому что он не поддерживается некоторыми серверами (хотя он присутствует в основном везде).
fileExists()
терпит неудачу, потому что он не работает с внешними URL-адресами и не может проверить, имеем ли мы дело с изображением.
Четыре метода, которые являются наиболее распространенными ответами на этот вопрос, неверны. Каким будет правильный способ сделать это?
@
обычно не одобряют, но я считаю, что это один из немногих законных вариантов его использования. Пока вы предвидите и обрабатываете потенциальное состояние ошибки, подавление сообщения об ошибке приемлемо (ИМХО). Сказав это, вы все равно не должны беспокоиться о сообщении об ошибке в рабочей среде, потому чтоdisplay_errors
должно быть отключено ;-) - person DaveRandom   schedule 19.12.2012getimagesize()
? Разве вы не хотели просто посмотреть, существует ли файл? - person Ja͢ck   schedule 19.12.2012