Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Загрузка нескольких картинок на сервер.


Автор: =Женек= 22.10.2014, 08:19
Доброе утро. Не знаю где лучше было бы разместить этот вопрос, он довольно общего характера. Но посколько в конечном счете реализация решения будет на PHP, решил написать здесь.

А вопрос следующий - есть форма для загрузки текстовых строк и картинок на сервер. При этом картинки грузятся на сервер еще на стадии заполнения формы - то есть человек нажимает на кнопку, вбирает файл, картинка через AJAX запрос загружается, создается ее мелкая копия, которая отправляется пользователю и он видит результат загрузки.
  И лишь когда все каритнки загружены, поля заполнены, пользователь нажимает кнопку и в базе создается запись с информацией полученной из текстовых полей и ссылок на файлы с картинками

Скрипты и HTML разметка написаны, все работает, и в данный момент мне хочется предусмотреть нештатную ситуацию - когда пользователь загрузил картинку и забил на все. В результате записи в базе данных нет, а во временной папке невостребованные картинки. Нужно как-то определить, что они являются мусором и удалить их.
 На ум приходят 3 варианта:
1. Чистить папку вручную.
2. Чистить папку по расписанию.
3. Вставить кусок кода, который при каждом запуске скрипта (скрипта загрузки) проверяет содержимое папки, сравнивает дату создания файлов с текущим времени и если они старые, удаляет.

В принципе все это рабоать будет, ено каждый из вариантов - в какой-то степени изврат. 
Мне хотелось бы знать, может быть есть какое-то более культурное решение, ведь предварительная загрузка изображений в настоящее время широко используется, я не придумаол ничего нового.
Может быть есть способ вставлять уменьшенную копию картинки в страницу не отправляя ее на сервер? Если делать все локально, без Apache, то работать будет - выбрал картинку, получил ее путь, изменил srс в img, но если HTML страничка загружена из интернета ссылки на диск не работают. 

В общем, кто что думает?

Автор: Vardoulacha 22.10.2014, 08:23
По моему вариант 2 клевый и не затратный, чистить по крону раз в сутки и делов то, а главное быстро и просто. Надо исходить из задачи, если сервис небольшой, то затраты ресурсов на изучение папки будут минимальны.

Всегда можно будет в будущем придумать более элегантное решение. А так надо запускать скорее, а там может оказаться что это и не нужно никому ))

Автор: =Женек= 22.10.2014, 09:04
Vardoulacha, 
Цитата

чистить по крону раз в сутки и делов то

А если в 3 часа ночи кто-то захочет залить картинки, а тут крон. Помимо крона нужно еще и проверку времени создания файлов запускать.
Так что наверное все-таки третий вариант. Да, действительно. В этом случае частота проверок будет оптимальна, и объем работы по чистке минимален - ведь при открытии страниыц предварительной загрузки в папке мы будем иметь мусор, оставшийся только от последнего предыдущего пользователя. А если их месяцами не будет - то и мусора не будет много и нужда заглядывать в папку каждый день отпадет.

Понимаете, вопрос был с контекстом "как фактически делают", а не "как же сделать, чтоб заработало"

Автор: s0lman 22.10.2014, 11:43
Цитата(=Женек= @  22.10.2014,  07:19 Найти цитируемый пост)
В результате записи в базе данных нет

имхо, это в корне неправильно.
На этом шаге следует создать временную запись, а далее тем же кроном удалять картинки с вышедшим сроком давности (созданы больше суток назад, к примеру)


Автор: =Женек= 22.10.2014, 12:08
Код

На этом шаге следует создать временную запись, а далее тем же кроном удалять картинки с вышедшим сроком давности (созданы больше суток назад, к примеру)

Зачем?
Практический смысл в этой записи? 
И на каком этапе ее создавать? При клике на ссылку "добавить статью" ?
То мы папку засоряем мусором, а вы предлагаете кидать мусор еще и в базу даных.

Автор: s0lman 22.10.2014, 13:46
Цитата(=Женек= @  22.10.2014,  11:08 Найти цитируемый пост)
Практический смысл в этой записи? 

Момент загрузки изображения запоминается в базе, т.е. не происходит никаких незаметных действий. Это исключит сценарий 
Цитата(=Женек= @  22.10.2014,  08:04 Найти цитируемый пост)
А если в 3 часа ночи кто-то захочет залить картинки, а тут крон.

, то бишь 
Цитата(=Женек= @  22.10.2014,  08:04 Найти цитируемый пост)
Помимо крона нужно еще и проверку времени создания файлов запускать.

только работа с базой всяко выгоднее, чем файловые операции.
Цитата(=Женек= @  22.10.2014,  11:08 Найти цитируемый пост)
И на каком этапе ее создавать? При клике на ссылку "добавить статью" ?

В вашем случае - сразу после загрузки файла посредством AJAX .
Цитата(=Женек= @  22.10.2014,  11:08 Найти цитируемый пост)
То мы папку засоряем мусором, а вы предлагаете кидать мусор еще и в базу даных. 

Ничто не мешает с базы удалить/обновить запись, но будет легко установить судьбу записи для данного файла (была создана, или же нет).

Автор: =Женек= 22.10.2014, 14:13
Может я не вник в вашу идею, но по-моему количество телодвижений в вашем варианте меньше не станет.
Цитата

но будет легко установить судьбу записи для данного файла (была создана, или же нет). 


А зачем ее устанавливать?  Как только запись создается, файлы из временной папки копируются в отдельную папку для хранения.

В принципе оба варианта хороши. 

Автор: baldina 22.10.2014, 17:01
=Женек=, тут борьба не за количество телодвижений, а за согласованность данных

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)