2011-01-11 1 views
45

Я работаю над сценарием загрузки.php :: сколько времени осталось до tmp-файлов?

Если пользователь загружает файл, и он уже существует, я хочу предупредить пользователя (все это через ajax) и дать им возможность заменить его или отменить.

Вместо перемещения файла Мне было любопытно, могу ли я оставить файл в tmp и передать путь к этому файлу в ответе ajax.

Если пользователь говорит, что перезаписывает старый файл в том, что запрос ajax передает путь обратно к php, который продолжает работать над файлом.

Для этого, чтобы работать, однако мне нужно знать, как долго файл находится в директории TMP РНР

+0

Когда я делаю инструмент загрузки файлов, я сначала проверить, если файл уже находится на сервере - если он уже существует, я переименуйте новый файл с номером перед имени файла, в зависимости от того, сколько из них есть. Никаких конфликтов, все идут домой счастливыми. –

+1

Если вы передадите путь в tmp обратно в ответе ajax, разве это не означает, что кто-то может испортить следующий запрос и переместить какой-либо другой файл из другого места, заменив это значение? (просто мысль) –

+1

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

ответ

60

Файлы, загруженные через POST будут удалены сразу после PHP скрипт завершает свое выполнение.

Согласно php.net: «Файл будет удален из временного каталога в конце запроса, если он не был удален или переименован».

+0

даже файлы, загруженные с входа в html? – Hailwood

+0

Не имеет значения, откуда взялся этот файл. Также - каждый вход в браузере - html один ;-) – zerkms

+0

действительно? php отслеживает каждый файл, который он пишет, и удаляет его? я уверен, что нет! У меня есть php-скрипт, который генерирует миниатюры по требованию для изображений, а если php удаляет файлы после запуска скрипта, миниатюры никогда не будут существовать! –

18

Для загрузки файлов, the manual states:

Файл будет удален из временного каталога в конце запроса, если он не был перемещен в сторону или переименован.

Поэтому файлы, которые необходимо хранить, следует переместить в другое место.

В общем, как может быть указано в заголовке вопроса, временные папки должны быть очищены системой. Это верно при использовании таких функций, как tempnam или tmpfile, или просто при записи во временный каталог (см. sys_get_temp_dir).

В Ubuntu это делается при каждой перезагрузке системы или в промежутке времени, как определено в /etc/default/rcS.

В некоторых дистрибутивах на основе Red Hat это делается с помощью утилиты tmpwatch из cronjob. В других разделах раздел /tmp монтируется с использованием файловой системы tmpfs, которая похожа на RAM-диск (поэтому очищается при выключении компьютера).

Другим известным механизмом является порог размера, а это означает, что временный каталог будет очищен от старых файлов, когда достигнет определенного размера.

0

Есть три переменные, которые должны быть установлены в PHP, чтобы убедиться, что сбор мусора из каталога/TMP происходит правильно, и они:

session.gc_maxlifetime = 21600 
session.gc_probability = 1 
session.gc_divisor = 100 

Set session.gc_maxlifetime быть количество секунд вы хотите, чтобы каждый файл tmp задерживался до его удаления. Если вы входите в админ в OpenCart, это будет количество секунд, пока вы не будете автоматически выведены из системы. Например, чтобы установить полчаса, вы будете делать 60 секунд раз 30 минут, что будет стоить 1800 секунд.

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

Больше информации здесь: https://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/

+0

Это справедливо только для сеансов PHP, которые настроены на использование хранилища файлов и не имеют отношения к временным файлам, созданным при загрузке файлов. –