Генерация галереи изображений из папки на FTP

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

Генерация галереи изображений из папки на FTP

Сообщение CheBuraw » Вт мар 27, 2018 8:31 pm

Здравствуйте! Возникла необходимость в генерации превьюшек фото с моей локальной папки на сетевом диске. На диске поднят FTP. В папку попадают фото. Нашел код как можно генерировать превьюшки из указанной папки. Генерация работает, фотки сканируются, выводятся на страничку. Превьюшки являются ссылками на файл источник. Все какбы классно, НО! превьюшки не отображают картинки. По нажатию на них открывается полноразмерная картинка, тут все нормально. Но вот смасштабированные картинки не подгружаются, хотя адреса ведут правильно к источникам.
Первый вариант скрипта:
СпойлерПоказать

Код: Выделить всё

$date_mas = getdate();
$d = $date_mas['mday'];
if ($d < 10) { $d = '0' . $d;}
$m = $date_mas['mon'];
if ($m < 10) { $m = '0' . $m;}
$y = $date_mas['year'];
$hrs = $date_mas['hours'];
if ($hrs < 10) { $hrs = '0' . $hrs;}
$min = $date_mas['minutes'];
if ($min < 10) { $min = '0' . $minh;}
$sec = $date_mas['seconds'];
if ($sec < 10) { $sec = '0' . $sec;}

$dir = 'ftp://192.168.1.150/192.168.1.151_0012152d8188/' . $y . '-' . $m . '-' . $d . '/01/pic/'; // Папка с изображениями
  $cols = 7; // Количество столбцов в будущей таблице с картинками
  $files = scandir($dir); // Берём всё содержимое директории
  echo "<table>"; // Начинаем таблицу
  $k = 0; // Вспомогательный счётчик для перехода на новые строки
  for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы
    if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем
      if ($k % $cols == 0) echo "<tr>"; // Добавляем новую строку
      echo "<td>"; // Начинаем столбец
      $path = $dir.$files[$i]; // Получаем путь к картинке
      echo "<a href='$path'>"; // Делаем ссылку на картинку
      echo "<img src='$path' alt='' width='100' />"; // Вывод превью картинки
      echo "</a>"; // Закрываем ссылку
      echo "</td>"; // Закрываем столбец
      /* Закрываем строку, если необходимое количество было выведено, либо данная итерация последняя */
      if ((($k + 1) % $cols == 0) || (($i + 1) == count($files))) echo "</tr>";
      $k++; // Увеличиваем вспомогательный счётчик
    }
  }
  echo "</table>"; // Закрываем таблицу       
Второй вариант уже конкретно с подключением к FTP. Если в пером случае нужен анонимный доступ, то тут уже можно задать логин и пароль.
СпойлерПоказать

Код: Выделить всё

$date_mas = getdate();
$d = $date_mas['mday'];
if ($d < 10) { $d = '0' . $d;}
$m = $date_mas['mon'];
if ($m < 10) { $m = '0' . $m;}
$y = $date_mas['year'];
$hrs = $date_mas['hours'];
if ($hrs < 10) { $hrs = '0' . $hrs;}
$min = $date_mas['minutes'];
if ($min < 10) { $min = '0' . $minh;}
$sec = $date_mas['seconds'];
if ($sec < 10) { $sec = '0' . $sec;}

$ftp_server = "192.168.1.150";
$ftp_user = "admin";
$ftp_pass = "pass";
$ftp_imageDir = '192.168.1.151_0012152d8188/' . $y . '-' . $m . '-' . $d . '/01/pic/';

  $ftp = ftp_connect($ftp_server, "21", "30"); // Создаём идентификатор соединения (адрес хоста, порт, таймаут)
  $login = ftp_login($ftp, $ftp_user, $ftp_pass); // Авторизуемся на FTP-сервере
  if (!$login) exit("Ошибка подключения");
  
  ftp_chdir($ftp, $ftp_imageDir); // Заходим в созданную директорию
  $cols = 7; // Количество столбцов в будущей таблице с картинками
  echo "<table>"; // Начинаем таблицу
  $k = 0; // Вспомогательный счётчик для перехода на новые строки
  $files = ftp_nlist($ftp, "."); // Получаем список файлов из текущей директории
  for ($i = 0; $i < count($files); $i++) {
    if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем
      if ($k % $cols == 0) echo "<tr>"; // Добавляем новую строку
      echo "<td>"; // Начинаем столбец
      $path = 'ftp://'.$ftp_server.'/'.$ftp_imageDir.'/'.$dir.$files[$i]; // Получаем путь к картинке
      echo "<a target='_blank' href='$path'>"; // Делаем ссылку на картинку
      echo "<img src='$path' alt='' width='100' />"; // Вывод превью картинки
      echo "</a>"; // Закрываем ссылку
      echo "</td>"; // Закрываем столбец
      /* Закрываем строку, если необходимое количество было выведено, либо данная итерация последняя */
      if ((($k + 1) % $cols == 0) || (($i + 1) == count($files))) echo "</tr>";
      $k++; // Увеличиваем вспомогательный счётчик
    }
  }
  echo "</table>"; // Закрываем таблицу
  ftp_close($ftp);
Фотографии складируются программой по странному пути, но одной из папок вложения является дата загрузки фото. Т.к. фото туда попадают каждый день, то скрипт выводит фотки именно за сегодняшний день.
Исходники скриптов не мои, но мною модифицированы.
Так вот и вариант с подключением по FTP выдает тот же результат.
Изображение

Думал что проблема в том что превьюшки маленькие и из-за масштабирования не подгружаются, но даже полноразмерные (там у меня 704px по ширине и вес 80-100 КБ каждая) не отображаются на этой сгенерированной страничке. Что-то подсказывает что проблема может в самом FTP. но там количество максимальных подключений на одного юзера я сделал 50. Может мало?

Может кто подскажет что я не учел?
Почему ссылки ведут на файл, а он не отображается?
Что может мешать?
Последний раз редактировалось CheBuraw Вт мар 27, 2018 8:42 pm, всего редактировалось 1 раз.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

Re: Генерация галереи изображений из папки на FTP

Сообщение skysilver » Вт мар 27, 2018 8:37 pm

Загляни в логи апача.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

Re: Генерация галереи изображений из папки на FTP

Сообщение CheBuraw » Вт мар 27, 2018 8:43 pm

skysilver а не подскажете куда конкретно и что там искать? У меня MajorDoMo на малинке 3 установлен.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

Re: Генерация галереи изображений из папки на FTP

Сообщение skysilver » Вт мар 27, 2018 8:49 pm

/var/log/apache2
Искать ошибки с ответами на вопрос "где картинки?" ))
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

Re: Генерация галереи изображений из папки на FTP

Сообщение CheBuraw » Вт мар 27, 2018 9:03 pm

В error.log касательно FTP ничего не найдено. последняя запись имеет отношение к IP камере. other_vhosts_access.log вообще от прошлого года :)
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

Re: Генерация галереи изображений из папки на FTP

Сообщение skysilver » Вт мар 27, 2018 9:08 pm

Ну ftp там вряд ли будет. Выкладывай лог.

И как ссылка то выглядит в конечном итоге? Если её тупо в браузер вбить, открывается картинка?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
CheBuraw
Сообщения: 36
Зарегистрирован: Ср авг 23, 2017 6:29 pm
Благодарил (а): 13 раз
Поблагодарили: 15 раз

Re: Генерация галереи изображений из папки на FTP

Сообщение CheBuraw » Ср мар 28, 2018 11:15 am

skysilver ссылка при генерации выглядит корректно - путь до файла. Если чисто эту сгенерированную ссылку открыть в браузере то картинка открывается. Я так понимаю, что это не косяк, а свойство FTP. Он просто не создан для вывода картинок.
В общем проблему я решил. Весьма извращенским , свойственным для меня, способом :D .
На том же сетевом хранилище запустил WEB-сервер. В качестве хоста указал папку куда скидываются фото. Тут ождал другой подвох - нет возможности по http сканировать папку на наличие файлов по адресу этого хоста :( . Пришлось, все таки, частично использовать FTP.
Сейчас это работает следующим образом:
- по FTP сканируется папка с фото за текущий день: ftp://192.168.1.150/Camera/192.168.1.151_0012152d8188/' . $y . '-' . $m . '-' . $d . '/01/pic/'l, где $y,$m,$d представляют из себя текущую дату
- получаем имя файла, например 055220-5325.jpg
- берем наш путь до хоста http://192.168.1.150:1184/' . $y . '-' . $m . '-' . $d . '/01/pic/'
- присоединяем к нему имя нашей фотки и получаем http://192.168.1.150:1184/' . $y . '-' . $m . '-' . $d . '/01/pic/055220-5325.jpg
- фигачим это в цикле и таким образом перебираем все файлы в папке.
- Вуаля! Картинки отображаются стройными рядами в любых настроенных масштабах.
Если кому интересно то вот мой код
СпойлерПоказать

Код: Выделить всё

$date_mas = getdate();
$d = $date_mas['mday'];
if ($d < 10) { $d = '0' . $d;}
$m = $date_mas['mon'];
if ($m < 10) { $m = '0' . $m;}
$y = $date_mas['year'];
$hrs = $date_mas['hours'];
if ($hrs < 10) { $hrs = '0' . $hrs;}
$min = $date_mas['minutes'];
if ($min < 10) { $min = '0' . $minh;}
$sec = $date_mas['seconds'];
if ($sec < 10) { $sec = '0' . $sec;}
$val =  $y . '-' . $m . '-' . $d . '/01/pic/';

$dir = 'ftp://192.168.1.150/Camera/192.168.1.151_0012152d8188/' . $val; // Папка с изображениями
$dirHtml = 'http://192.168.1.150:1184/' .$val; 
  $cols = 7; // Количество столбцов в будущей таблице с картинками
  $files = scandir($dir); // Берём всё содержимое директории
  echo "<table>"; // Начинаем таблицу
  $k = 0; // Вспомогательный счётчик для перехода на новые строки
  for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы
    if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем
      if ($k % $cols == 0) echo "<tr>"; // Добавляем новую строку
      echo "<td>"; // Начинаем столбец
      $path = $dirHtml.$files[$i]; // Получаем путь к картинке
      echo "<a href='$path'>"; // Делаем ссылку на картинку
      echo "<img src='$path' alt='' width='100' />"; // Вывод превью картинки
      echo "</a>"; // Закрываем ссылку
      echo "</td>"; // Закрываем столбец
      /* Закрываем строку, если необходимое количество было выведено, либо данная итерация последняя */
      if ((($k + 1) % $cols == 0) || (($i + 1) == count($files))) echo "</tr>";
      $k++; // Увеличиваем вспомогательный счётчик
    }
  }
  echo "</table>"; // Закрываем таблицу
Ответить