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

Matinier

Постоялец
Регистрация
5 Окт 2009
Сообщения
65
Реакции
4
День добрый!

Есть нагруженный проект. Пусть это будет электронный магазин, в коем товаров over 9000 и все были без картинок.
Появилась необходимость поставить каждому товару в соответствие картинку, которая лежит в определенной папке на сервере.
Нужно теперь определять есть ли у товара картинка или выводить заглушку.
Я вижу 2 варианта:
1) Сделать альтер таблицы с информацией о товаре и добавить поле с флагом о существовании картинки
2) Каждый раз проверять существование файла с картинкой на сервере одной из встроенных функций ( file_exists, is_file, stat etc.), т.е. дергать файловую систему

Внимание вопрос: что более правильно с архитектурной точки зрения и менее пагубно скажется на производительности?
 
Как вариант в таблицу описания товара добавь поле в котором будет храниться путь к картинке. Инфу о товаре ты по любому будешь выгружать из таблицы полностью, при этом проверка на пустое поле практически никакого влияния не окажет на загрузку сервера...
 
Понимаешь, тут вот какая проблема встает: если добавлять поле в таблицу, то нужно будет просмотреть код, что бы везде правильно были прописаны insert'ы в эту таблицу.
 
Хм... а информация о том какая картинка какому продукту принадлежит у тебя где хранится? а insert должен быть только в двух местах - при добавлении продукта в базу ну и в редактировании существующего продукта...
 
При редактировании будет апдейт, а не инсерт.
 
проверяй наличие файла методами реврайта, если файла нету выдавай заглушку
 
PHP:
if ( file_exists('путь до картинки') ){
echo '<img src="'.'путь до картинки'.'">'
}
else{
echo '<img src="'.'путь до заглушки'.'">'
}
при этом пути указываются для хостинга, на котором запускается php скрипт. Если указывать путь через http:// то работать не будет.

Путь до картинки и до заглушки вы должны уже знать заранее.
 
PHP:
if ( file_exists('путь до картинки') ){
echo '<img src="'.'путь до картинки'.'">'
}
else{
echo '<img src="'.'путь до заглушки'.'">'
}
при этом пути указываются для хостинга, на котором запускается php скрипт. Если указывать путь через http:// то работать не будет.

Путь до картинки и до заглушки вы должны уже знать заранее.
Ты читал вообще, что до тебя писали тут, нуб? Самый оптимальный вариант предложил Xardas. Пример для apache mod_rewrite:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.jpg$ img/thumbnail.jpg [L]
 
Я вижу 2 варианта:
1) Сделать альтер таблицы с информацией о товаре и добавить поле с флагом о существовании картинки
2) Каждый раз проверять существование файла с картинкой на сервере одной из встроенных функций ( file_exists, is_file, stat etc.), т.е. дергать файловую систему
имхо ФС придется дергать в любом случае, т.к. картинки хранятся именно на диске - верно?

тогда почему вы не хотите попробовать вариант 2 с половиной? - например кешировать результаты проверки? ведь если проект высоконагруженный, то логично предположить что если картинку отдали юзеру А (получили true, т.е. картинка на месте) то для юзера Б результат проверки получится аналогичным (т.е. картинка никуда не денется)

зы
немного снизить нагрузку на ФС можно если раскидать файлы по категориям... имхо 9000 картинок в одном каталоге - это перебор...
 
мои 5 копеек
если выводится менее 100 картинок на страницу нагрузка на ФС (файловая система) минимальная. затраты по времени на проверку file_exists малы, более быстрый метод это проверка размера filesize() но он выдтает ошибку если фаила нет поэтому его придется закрыть "собакой" @filesize()
при это ошибки не будет и ее лучше обрабатывать руками.

либо как вариант проверять наличие лишь 1 раз, и потом при выводе проверять наличие значения поля нужной записи, те если поле пустое то выводить заглушки если что то есть то картинку ту что в поле. в этом случае можно перенести роль проверки в .ht* нагрузка в том случае возможо такая же или выше как при проверке в пхп. не проверял низнаю
у меня проверка на этапе внесения записи и по крону при очистке раз 1 месяц. остальное из записи дергается.
 
Назад
Сверху