Как вы сказали, если используется на несуществующий файл, getimagesize генерирует предупреждение:
Этот код:
if ($data = getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
поможет вам
Warning: getimagesize(not-existing.png) [function.getimagesize]:
failed to open stream: No such file or directory
Решение будет использовать @ operator, чтобы замаскировать эту ошибку:
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
Поскольку файл не существует, $ данные будут по-прежнему являются ложными; но предупреждение не будет отображаться.
Другим решением было бы check if the file exists, перед использованием getimagesize; что-то, как это будет делать:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
Если файл не существует, getimagesize не называется - что не означает предупреждение
Тем не менее, это решение не один, вы должны использовать для изображений, которые на другом сервере и доступ через HTTP (если вы в этом случае), так как это будет означать два запроса на удаленный сервер.
Для локальных изображений, что было бы вполне нормально, я полагаю; Единственная проблема, которую я вижу, - это уведомление, созданное при отсутствии ошибки чтения.
Наконец:
- я позволил бы ошибки, которые будут отображаться на вашем сервере DEVELOPPEMENT,
- И не будет отображать те на производственном сервере - см
display_errors
, об этом ;-)
заметь, если file_exists() говорит, что файл существует, getimagesize() все еще может потерпеть неудачу, так как файл может быть удален только между вызовами методов. Виори маловероятно, но бывает в худшие моменты ... – ya23
@ ya23: true; но вам бы очень не повезло ^^ И мне не нравятся маскирующие ошибки с @: если вы используете его, и у вас есть проблема, обычно это очень легко отлаживать :-( –
Ну, я думаю, что @ pretty dirty :) – Gigala