Как проверить есть ли на хостинге изображение InstantCMS2

#1 2 июня 2015 в 01:50
В default_item вывел отдельно код вывода фото и указал размер big, в админке указал создавать большие копии фото, но тут обнаружилась проблема, ранее загруженные картинки имеют размер normal и получается что при просмотре старой записи картинка не загружается. Получается нужно определить есть ли большой размер фото, если есть то загружать этот если нет то размер по меньше.
#2 2 июня 2015 в 02:02
  1.  
  2. $img= '/upload/u1/000/foto.jpg';
  3. if (file_exists($img)) {
  4. echo "Картинка есть";
  5. } else {
  6. echo "Картинки нет";
  7. }
  8.  
#3 2 июня 2015 в 02:07
У меня еще идея проверить заполнено ли поле фото в базе данных
  1. ---
  2. original: u1/004/abda415c.jpg
  3. big: u1/004/3cc38009.jpg
  4. normal: u1/004/29a7c938.jpg
  5. small: u1/004/8d391531.jpg
  6. micro: u1/004/8b15968b.jpg
  7.  
#4 2 июня 2015 в 02:11
Парвиз, проверка файла на хостинге не прокатывает, даже при наличии файла он выдает что файла нет. Видимо он путь к файлу по своему вычисляет. Второй вариант более надежнее
#5 2 июня 2015 в 02:24
Чувствую что разгадка здесь
  1. function html_avatar_image($avatars, $size_preset='small'){
  2.  
  3. $config = cmsConfig::getInstance();
  4.  
  5. $default = array(
  6. 'normal' => 'default/avatar.jpg',
  7. 'small' => 'default/avatar_small.jpg',
  8. 'micro' => 'default/avatar_micro.png'
  9. );
  10.  
  11. if (empty($avatars)){
  12. $avatars = $default;
  13. }
  14.  
  15. if (!is_array($avatars)){
  16. $avatars = cmsModel::yamlToArray($avatars);
  17. }
  18.  
  19. $src = $avatars[ $size_preset ];
  20.  
  21. if (!strstr($src, $config->upload_host)){
  22. $src = $config->upload_host . '/' . $src;
  23. }
  24.  
  25. $size = $size_preset == 'micro' ? 'width="32" height="32"' : '';
  26.  
  27. return '<img src="'.$src.'" '.$size.' alt=""/>';
  28.  
  29. }
но разобрать не могу
#6 2 июня 2015 в 07:29
Тут может быть два варианта. В случае с аватаром то использовать
  1. function html_avatar_image($avatars, $size_preset='small')
в случае с отдельными картинками, то лучше этот
  1. function html_image($image, $size_preset='small', $alt='')
Но правки вносить удобнее в этот метод
  1. function html_image_src($image, $size_preset='small', $is_add_host=false)
В нём все значения изображения уже получены. В нём есть код
  1.  
  2. if (isset($image[ $size_preset ])){
  3. $src = $image[ $size_preset ];
  4. } else {
  5. return false;
  6. }
  7.  
меняем его на что-то типа
  1.  
  2. if (isset($image[ $size_preset ])){
  3. $src = $image[ $size_preset ];
  4. } else {
  5. if (isset($image[ 'normal' ])){
  6. $src = $image[ 'normal' ];
  7. } else {
  8. return false;
  9. }
  10. }
  11.  
Вместо return false; можно продолжать условия до значения micro. Но в данном случае это нормально если названия пресетов известны и не изменятся со временем.
Второй вариант это копнуть глубже — записывать названия пресетов с путями отсортированные по ширине пресета в БД и выводить их потом с проверкой в цикле поочереди начиная с большего.
#7 2 июня 2015 в 08:42
Можно проверять как предложил Evanescence. Только для функции file_exists нужен полный путь от корня хостинга а не сайта.
Например так
  1. $img= cmsConfig::getInstance()->upload_root . 'u1/000/foto.jpg';
или так
  1. $img= cmsConfig::getInstance()->upload_path . 'u1/000/foto.jpg';
Точно сейчас не припомню который правильнее. Возможно ещё слеши надо добавить перед u1. Пробуйте.
#8 5 июня 2015 в 01:03
С базой данных ничего не получится, есть, нет картинки на хостинге разницы нет, в базе данных почему то каждый размер заполняется ссылкой
  1. ---
  2. original: u1/004/abda415c.jpg
  3. big: u1/004/3cc38009.jpg
  4. normal: u1/004/29a7c938.jpg
  5. small: u1/004/8d391531.jpg
  6. micro: u1/004/8b15968b.jpg
original: u1/004/abda415c.jpg
big: u1/004/3cc38009.jpg этих картинок нет но ссылка на них в базе есть.
Выходит что придется проверять через file_exists.
#9 5 июня 2015 в 01:19
Кстати данный вопрос касается всех пользователей InstantCMS2.
Допустим у вас есть какой нибудь тип контента (в моей случае объявления), вы добавляете к записям фотографии среднего размера, а спустя время вам понадобилось добавлять большие фотографии, вы для этого идете в настройки поля фотография у необходимого типа контента, ставите галочку на против -создавать прервью: большой, размер в записи: большой. Сохраняете и тут выявляется недочет, у всех старых записей нет в наличии прервью фоток — большой, и естественно все они будут без фотографий.
#10 5 июня 2015 в 01:53
Пока записал так.
  1. <?php
  2. $img_found= $_SERVER['DOCUMENT_ROOT'][html_image_src($item['photo'], 'big', true)];
  3.  
  4. if (file_exists($img_found)) {
  5. $img_found_size = 'normal';
  6. } else {
  7. $img_found_size = 'big';
  8. }
  9. ?>
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.