PHP & GD: хранение файлов, созданных во время сеанса, для последующего удаления после окончания сеанса - PullRequest
0 голосов
/ 26 сентября 2011

Я создаю онлайн многослойный инструмент для создания изображений GD. Пользователи могут загружать новые изображения на сервер, чтобы добавить к GD произведенное изображение. Я хочу иметь возможность хранить образ gd и все загруженные пользователем файлы в течение всего сеанса php. Затем пользователь может выбрать сохранение этих файлов в своей учетной записи, но по умолчанию будет использоваться удаление неиспользуемых файлов после истечения сеанса.

У кого-нибудь есть какие-нибудь указатели для меня, чтобы исследовать?

Спасибо

Ответы [ 3 ]

2 голосов
/ 26 сентября 2011

Здесь я вижу 2 возможности.

  1. Установить пользовательский обработчик сеанса , который определит функцию сбора мусора для удаления старых изображений.

  2. Другим простым решением будет использование CRON.Вы запускаете его каждые 10 минут и удаляете старые образы.

Недостаток первого решения заключается в том, что иногда пользователь получит более длительное время загрузки из-за запуска вашей сборки мусора.1016 * Недостатком второго решения является то, что у вас может не быть доступа к нему на невыделенном сервере.

Вы также можете комбинировать оба решения.Я бы, наверное, сделал это.

1 голос
/ 26 сентября 2011

Вы не получите уведомление, когда сессия истекает. Это просто происходит в фоновом режиме. То, что вы можете сделать, - это запустить задание в некотором регулярном интервале (скажем, каждый час), чат проверяет все файлы во временном каталоге и удаляет все файлы, которые не были затронуты в течение определенного периода времени. filemtime() ваш друг здесь.

0 голосов
/ 23 апреля 2015

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

Я загружаю изображение, преобразую его в base64 ( base64_encode () ), а затем сохраняю в переменной сеанса, чтобы я снова мог удалить исходные изображения с диска.

Когда вы хотите выполнить операции GD с ним, вам нужно получить сохраненные данные сеанса, декодировать их ( base64_decode () ) и создать объект изображения ( imagecreatefromstring () )

Это просто быстрая идея, и она работает для моего приложения ...

Heads Up!

base64-data может получить много для больших изображений, а Session-Memory (memory_limit) является общим пространством для всех остальных пользователей на странице. Так что не переусердствуйте, потому что если много людей используют ваше приложение одновременно, ваш memory_limit может превысить ...

...