Проверка на существование картинки

Рейтинг: 1.0714  
На голосовании
Предложил Пользователь 163266 28.10.2014 10:41:11

Проверка на существование картинки

Коллеги, добрый день. Предлагаю в следующих версиях продукта дополнять проверку на существование картинки (анонсной или детальной, любой в принципе) в шаблонах, где присутствует вывод картинок (список товаров, список новостей, корзина, детальная новость - не важно), функцией file_exists

Сейчас примерный алгоритм вывода изображения следующий (считайте псевдокодом):

if(!empty($arItem["PREVIEW_PICTURE"]["SRC"] ))
     выводим img c src = $arItem["PREVIEW_PICTURE"]["SRC"];
else 
      выводим img c src = "путь_к_no_photo.png";

ну или другие варианты. К слову, где-то вообще наличие пути из базы не проверяется и тег img сразу выводится.

Считаю эту проверку в стандартных версиях продукта неполной.

Предлагаю дальше делать так:

if(!empty($arItem["PREVIEW_PICTURE"]["SRC"] && file_exists($_SERVER['DOCUMENT_ROOT'].$arItem["PREVIEW_PICTURE"]["SRC"]  ))
     выводим img c src = $arItem["PREVIEW_PICTURE"]["SRC"];
else 
      выводим img c src = "путь_к_no_photo.png";

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

Рейтинг: 0  
Пользователь 11898 28.10.2014 11:34:48
Эту проблему дешевле решить nginx - отдавать картинку по умолчанию, когда не найдена в файловой системе.
Рейтинг: 0  
Пользователь 163266 28.10.2014 11:43:17
Как вариант, можно. Но я тут вижу 3 проблемы:

1. Насколько я знаю, nginx не везде стоит как веб-сервер.
2. Врятли в nginx можно указать путь к обрезанной по нужным размерам картинке. Нельзя же использовать одну и ту же картинку для всех случаев.
3. Раз в коде эта проверка стоит, значит там ее тоже нужно дополнить :)
Рейтинг: 0  
Пользователь 105375 07.11.2014 21:00:52
>2. Нельзя же использовать одну и ту же картинку для всех случаев.

Так а зачем такую проверку делать в стандартных компонентах, они тоже не будут знать, где у Вас какие картинки.
Рейтинг: 0  
Пользователь 163266 13.11.2014 11:56:54
Почему это не будут знать - Вы же видите, что в ветке else указывается путь к файлу-заглушке с обрезанными размерами. Эти файлы обычно (ну или иногда) находятся в папке images соответствующего шаблона.