временное хранение файла - файл или сессия?

Alkinoy

Начинающий
временное хранение файла - файл или сессия?

Задача - пользователь проходит через некоторое количество шагов для создания картинки. Первый шаг - аплоаз картинки, которая используется как бэкгроунд. потом еще несколько шагов (добавление текста, ссылок и прочее). если в конце его удовлетворил результ - он тыкает на кнопалку и полученная картинка сохраняется в ФС.
Теперь вопрос - где лучше хранить файл бэкгроунда? Размеры файла - до 10 кБ. Вижу 2 варианта - либо временный файл либо в сессию кидать. Чем не нра временный файл - могут накапливаться старые файлы (файлы, которые остались после незавершенных операций). Надо придумывать сборщика мусора. В сессиях это и так все уже сделано...
Покритикуйте вариант с сессиями, плз.
 

Апокалипсис

тех дир matras.ru
не нада картинки кидать в сессии.
сделай временную папку и кидай туда потом чисть раз в час её.
 

dimagolov

Новичок
Alkinoy, ты в содержимое сессионного файла хоть раз заглядывал?
 

Alkinoy

Начинающий
Base64 кодирование мне никто не мешает сделать. Вопрос - насколько это ресурсоемко - это да. но опять же - никто аргументы так и не привел...
 

Alexandre

PHPПенсионер
Вопрос - насколько это ресурсоемко - это да.
ресурсоемко.
в сессию кидай имя файла.
а сам файл храни, как посоветовали во временной папке.

по крону запускай "чистильщик"
старые имена файлов легко отсортировываются по дате
 

dimagolov

Новичок
можно временным файлам давать имена равные session_id и убивать все, для которых сессионных файлов уже нету.
 

Alexandre

PHPПенсионер
можно временным файлам давать имена равные session_id и убивать все, для которых сессионных файлов уже нету.
можно но не нужно.
мой подход: один раз читаешь директорию, отмечаешь устаревшие файлы.
твой подход: читаешь директорию сессий, выбираешь файлы, читаешь временную директорию, сравниваешь. Операций в два раза больше.
 

dimagolov

Новичок
Alexandre, дело в том, что не все файлы старше периода expire сессии надо удалять. потому что сессионные файлы будут обновляться в процессе обработки и не експайриться из-за этого, а файл картинки при этом может и не меняться.
для твоего подхода надо синхронизировать время обновления временного файла и файла сессии что не особо прозрачно.
 

dr-sm

Новичок
Alkinoy храни во временном файле полюбому, иначе пхп будет жрать память.

hint из каментов в php.ini:
cd /path/to/sessions; find -cmin +24 | xargs rm
 

dimagolov

Новичок
dr-sm, это как раз не аргумент. потому что с файлом надо делать манипуляции, а для этого все равно грузить его в память. при этом картинка сжатая jpeg-ом а потом сериализованая в Base64 будет наверняка занимать меньше места в памяти, чем row. И если манипулировать картинкой надо будет при каждом старте скрипта с этой сессией, то ничего плохого в чтении-записи картинки вместе с ней не будет.
Но это все имеет смысл пока где-то не потребуется сохранение картинки как файла на диск. Если хоть одно такое место есть, то мучать сессии смысл пропадает.
 

Alexandre

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

-~{}~ 13.03.08 18:58:

потому что с файлом надо делать манипуляции
ну и делай себе наздоровье любые манипуляции.
а для этого все равно грузить его в память. при этом картинка сжатая jpeg-ом а потом сериализованая в Base64 будет наверняка занимать меньше места в памяти
сжимаем, а потом снова расширяем Base64, а потом сюреализуем... больше...
И если манипулировать картинкой надо будет при каждом старте скрипта с этой сессией, то ничего плохого в чтении-записи картинки вместе с ней не будет
ага, 10kb картинки превратятся в 32к - Base64 - чего гонять туда сюда данные если их можно просто положить в отдельное место.
хотя - делай как хочешь, чего тогда с вопросами лезть.
 

Alkinoy

Начинающий
Автор оригинала: Апокалипсис
Уже много дали аргументов.
+ поиск по форуму + почитай на сколько base64 увеличивает вес.
за аргументы спасибо. Но из реальных был только один - кодирование-раскодирование требует много ресурсов.
отдельно по Base64 - она увеличивае размер не в 3 раза, а в среднем на 33%...
Но это все имеет смысл пока где-то не потребуется сохранение картинки как файла на диск. Если хоть одно такое место есть, то мучать сессии смысл пропадает.
просто проблема в том, что картинка сохраненная в итоге на диск претерпевает много извенений с момента ее записи... Хотя щас делаю тесты - тоже склоняюсь к записи временного файла на диск...
 

С.

Продвинутый новичок
А между прочим совершенно не вижу ничего плохого в хранении небольшого файла в сессии. Ресурсоемкость не ахти как сильно повышается. К тому же компенсируется отсутствием дополнительного сборщика мусора, которому тоже нужны ресурсы. То на то и получается. Я бы предпочел работать в рамках одного скрипта, если это возможно, чем "размазывать" функциональность по разным углам.
 

Alexandre

PHPПенсионер
А между прочим совершенно не вижу ничего плохого в хранении небольшого файла в сессии.
если планируется пять или десять посетителей в день, то я тоже не вижу ничего плохого в этом.
 

С.

Продвинутый новичок
При размере до 10К, там совершенно без разницы, сколько посетителей.
 

weregod

unserializer
С.
не скажите, при миллионах сессий файловая система нагибаться будет, не то что php :)
 

С.

Продвинутый новичок
О боже, откуда вы такие крупномыслящие? У него сессии запускаются в любом случае, независимо от того, будет он в ней хранить эти микрофайлы или нет.
 

weregod

unserializer
я бы перед session_start всё равно хотя бы user-agent проверял, чтобы ботов пытаться откинуть.

а крупномылсие простое - шареный хостинг, 10000 сайтов, 100 кликов на сайт в день ботом, который не протягивает id сессии от страницы к странице - уже полный ахтунг
 
Сверху