У меня есть форма с действием, установленным в php-файл (verify.php). В форме я сделал довольно хороший раздел загрузки изображений. После отправки формы check.php открывается, чтобы проверить заполненную пользователем форму.
Значения формы размещаются внутри другой формы на странице verify.php. Только изображение загружается в папку на сервере, и это моя проблема. Я хочу, чтобы изображение было удалено, если пользователь сожалеет (не проверяет), помещая в объявление, или если пользователь возвращается, чтобы снова изменить объявление.
Как мне это сделать?
Один из способов – удалить имя файла, когда страница «unLoads» (кнопка возврата пользователя). Но это не решит проблему, если пользователь закроет браузер на странице verify.php, потому что это не считается «выгрузкой»?
Решения?
Если вам нужно больше ввода, скажите мне, и я обновлю это сообщение!
благодаря
К сожалению, это довольно сложная задача, проще было бы проверить, какие файлы старые, и удалить их при следующем доступе к странице. Это можно сделать полностью через PHP и будет очень надежным.
Возможно, я неправильно понял, но процесс может быть следующим:
1 Пользователь загружает файл (который идет в папку * nix / tmp как обычно)
2 Вы перемещаете файл во вторую временную папку / upload_unconfirmed
3 Когда пользователь ACTUALLY подтвердит действие, вы затем a) переместите его в свою папку, чтобы сохранить его надолго, скажем, /clientfolder/theirusername.jpg b) затем удалить theirusername.jpg in / upload_unconfirmed
В фоновом режиме используйте cron to rm everyfile старше, чем 1 час in / upload_unconfirmed / *
Если у каждого клиента только один образ, последующие загрузки будут перезаписывать их старый файл.
Обнаружение «заброшенных», таких как закрытие браузера, практически невозможно. Нет надежного способа отслеживать его на стороне сервера в режиме реального времени. Самый простой способ удалить эти изображения – настроить запущенный процесс, который удаляет изображения, связанные с оставленными посылками.
обычно скрипт на стороне сервера не знает, что пользователь покидает страницу или закрывает браузер, он может проверять только время ожидания сеанса, но обычно 30 минут или больше зависит от настройки.
Поэтому, если вам действительно нравится делать это в режиме реального времени, поместите ajax-таймер на страницы и отправьте запрос hello каждые 30 секунд или что-то в этом роде на сервер, а затем вы можете удалить файл изображения, если нет ответа более 1 минуты или что-то вроде того.
Но отправка запроса ajax на сервер каждые 30 или менее может повлиять на производительность сервера, если на нем много пользователей.
Не перемещайте файл в его постоянное место, пока пользователь явно не проверит. PHP помещает загруженные файлы в определенное место, обычно в каталог / tmp (на установках * nix), который автоматически очищается в порядке fifo, поскольку требуется пространство. Поэтому, если вы не переместите файл из этого специального каталога, он будет автоматически очищен без вашего дальнейшего вмешательства в неуказанное время в будущем.
Я бы назвал изображение временем эпохи (используя функцию time ()), как 1258560055.jpg, затем создайте задание cron, которое входит и удаляет каждое изображение, которое составляет час, два часа или что-то еще после.
Вот как вы это делаете:
JQuery:
$(window).bind('beforeunload',function(){ if(check){ //whatever check you wish to do return 'Are you sure you want to leave?'; } }); $(window).unload(function(){ $.ajax({ type: 'POST', url: 'file.php', data: 'value=unload', async: false // this will not work if set to 'true' }); alert('done'); });
PHP:
if(isset($_POST['value'])){ if($_POST['value']=='unload'){ foreach(glob($targetFolder.'*.*') as $file){ unlink($file); // remove every file } rmdir($targetFolder); // remove directory } }
Примечание. У меня также есть задание cron
один раз в неделю, на всякий случай. В php
ситуации пользователь получает определенную папку tmp и загружает файлы (например, CV, мотивационное письмо …), если он уезжает без отправки, файлы и папка удаляются.
Я бы поставил лимит времени на то, как долго пользователь должен подтвердить свою рекламу. Затем выполните задание мониторинга, которое будет срабатывать в указанное заранее время, и если объявление не подтверждено, удалите изображение с сервера.
Я не думаю, что очень легко обнаружить, когда пользователь действительно оставляет страницу. Большинство решений, которые я вижу, обычно выполняют некоторые действия (например, удаление временных файлов), когда время сеанса заканчивается.
Настройте запись базы данных для каждого файла с меткой времени. Затем, когда ваш процесс будет завершен, удалите эту запись. Затем один раз в день просматривайте таблицу, удаляйте все файлы и удаляйте эти записи из таблицы … это самая безопасная ставка.
Не могли бы вы просто загрузить изображение после проверки представленных данных?