Задача легко решается с помощью PHP. Делаем проверку наличия файла картинки на диске. Если его не оказывалось, то меняем путь на другую картинку — заглушку. Этот способ работает, но есть более простое решение.
Старый способ, используя PHP:
// Путь картинки.
$img = 'datas/img/foto123.jpg';
// Если картинки нет или её размер подозрительно маленький.
if (!file_exists($img) || filesize($img) < 512) {
// Перезаписываем переменную, путь картинки — заглушки.
$img = 'datas/img/none.png';
}
Минус этого способа в том, что он дёргает лишний раз диск. Для большого и посещаемого сайта с кучей картинок — это критично.
Другой способ использует для этой же цели возможности HTML:
<img src="datas/img/foto123.jpg" onError="this.src='datas/img/none.png'">
В итоге получаем аналогичный результат. Работает быстро. Никакой видимой заминки, если картинка не найдена. Событие onError
поддерживают все современные веб-браузеры. Есть какие-то проблемы лишь в IE8. Поищите информацию сами, если для вас это актуально.
Для справки, оба противоположных по смыслу события:
onLoad
— если загрузка успешна.onError
— если при загрузке произошла ошибка.
Вариант скрытия изображения:
<img src="datas/img/foto456.jpg" onError="this.style.display='none'">
Чтобы максимально разгрузить диск существует ещё способ решения с использованием Nginx.