[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов
Santehnick
Здравствуйте.

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

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

Представим сборщик запустился и начал чистить мертвые файлы, в это время пользователь пишет запись и прикрепляет изображения, которые сборщик благополучно удаляет, после чего пользователь отправляет всё это дело в базу и в итоге вместо изображений получает крестики (

Как это можно решить? Спасибо.
Kopipaster
Цитата (Santehnick @ 18.05.2014 - 02:45)
Представим ситуацию, пользователь загрузил файл, и закрыл браузер, в идеале он должен был загрузить файл ввести некоторые дополнительные данные и нажать кнопку которая бы всё это записала в бд. Проблема только в том что он может загрузить файл и выйти, а в бд нечего незапишется.

А не проще ли довести до ума функцию которая добавляет картинки. Допустим сохранять картинки во временную папку, а когда запись добавлена в БД в полном объёме перегружать из временного хранилища в основное, а если запись не добавлена очищать временную папку.
Santehnick
Kopipaster, может и проще. Но тоже самое, что я уже описал, пользователь прикрепляет файлы к изображению, в это время по крону запускается скрипт, который чистит временную папку и естественно удаляет его файлы, он отправляет всё дело в базу данных, а перегружать из временного в основное уже нечего, в итоге получаются битые ссылки на изображения.
Kopipaster
Цитата (Santehnick @ 18.05.2014 - 03:02)
по крону запускается скрипт

С кроном я сам пока не разобрался. Но не надо по крону, надо доработать тот скрипт с которым ты загружаешь картинки.
1) пользователь загружает картинки
1.1) создаёшь временную папку с уникальным названием
1.2) складываешь туда его картинки
1.3) задаёшь таймаут на уничтожение временной папки.
1.4) спустя заданное время папка удаляется
и не надо никаких плавающих скриптов.
Santehnick
У меня еще нет никакого скрипта, я только собираюсь его писать и думаю, как лучше решить эту задачу.

С таймаутом тоже может быть проблема, допустим выставляем 6 часов, по истечении которого удаляем временную папку. Пользователь пишет запись, прикрепляет изображения и уходит спать, возвращается через 10 часов к компьютеру и добавляет запись. И опять тот же результат.

Я не знаю, но крупные ресурсы (такие как вконтакте, авито и т.п.) похоже вообще не удаляют изображения и они хранятся там вечно, я смоделировал подобную ситуацию вконтакте с пару месяцев назад и картинки доступны и по сей день. Я так предполагаю что именно из-за вот этих вот возникающих сложностей.
Kopipaster
Цитата (Santehnick @ 18.05.2014 - 03:32)
С таймаутом тоже может быть проблема, допустим выставляем 6 часов

Какие 6 часов? От силы минут 15.
По нажатии кнопки делаешь проверку на введённую информацию в поля, а так же на наличие картинок, если папки уже нет выводишь алерт:
"! друг ты слишком долго копошился, введи изображения заного!"
Если всё введено верно и таймаут не истёк. Значит всё ок. Заносишь данные в БД, переносишь файлы, удаляешь временную папку и выводишь:
"!Данный удачно добавлены в базу!"

sergeiss
Цитата (Santehnick @ 18.05.2014 - 03:02)
в это время по крону запускается скрипт, который чистит временную папку и естественно удаляет его файлы

Тебе достаточно добавить еще параметр "время загрузки файла во временную папку", где-нибудь в отдельной таблице. Лучше так, мне кажется, чем смотреть на время создания файла.
И удалять не всё подряд из временной папки, а только то, что там хранится больше, допустим, чем неделю.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.