2011-01-11 17 views
45

Estoy trabajando en un script de carga.php :: ¿cuánto tiempo permanecen los archivos tmp?

Si un usuario carga un archivo y ya existe, quiero advertir al usuario (todo esto a través de ajax) y darles la opción de reemplazarlo o cancelarlo.

En lugar de mover el archivo, Tenía curiosidad si pudiera simplemente dejar el archivo en tmp y devolver la ruta a ese archivo en la respuesta ajax.

Si el usuario dice sobrescribir el archivo anterior en esa solicitud ajax, pase la ruta de regreso a php, que continúa trabajando en el archivo.

Para que esto funcione, sin embargo necesito saber cuánto tiempo permanece en un archivo dir tmp de php

+0

Cuando hago una herramienta de carga de archivos, primero comprobar si el archivo ya está en el servidor - si ya existe, voy a cambiar el nombre del nuevo archivo con un número delante del nombre del archivo, dependiendo de cuántos de ellos hay. Sin conflictos, todos se van a casa felices. –

+1

si pasa la ruta en tmp en la respuesta ajax, ¿eso no implica que alguien pueda meterse con la próxima solicitud y mover algún otro archivo desde otro lugar reemplazando ese valor? (Sólo un pensamiento) –

+1

así más o menos, todo lo que realmente podría hacer es mover un archivo desde el directorio tmp en el directorio que ha especificado, y las probabilidades de que ellos sepan lo que está en el directorio tmp es un poco improbable, aunque un buen pensamiento. – Hailwood

Respuesta

60

archivos subidos a través del poste son borrados inmediatamente después de script php termina su ejecución.

De acuerdo con php.net: "El archivo se eliminará del directorio temporal al final de la solicitud si no se ha movido o cambiado de nombre".

+0

archivos pares que se han cargado desde una entrada html? – Hailwood

+0

No importa de dónde vino el archivo. Además, cada entrada en el navegador es html one ;-) – zerkms

+0

realmente? php realiza un seguimiento de cada archivo que escribe y lo elimina? estoy bastante seguro de que no! Tengo una secuencia de comandos php que genera miniaturas a petición de imágenes, y si php elimina archivos después de ejecutar una secuencia de comandos, ¡las miniaturas nunca existirían! –

18

Para los archivos cargados, the manual states:

El archivo será borrado del directorio temporal al final de la solicitud si no se ha movido lejos o cambiado de nombre.

Los archivos que deben mantenerse deben, por lo tanto, trasladarse a otra ubicación.

De manera más general, como su título de pregunta podría implicar, el sistema debe limpiar las carpetas temporales. Esto es cierto cuando se usan funciones como tempnam o tmpfile, o simplemente cuando se escribe en el directorio temporal (consulte sys_get_temp_dir).

En Ubuntu, esto se hace en cada reinicio del sistema, o en un intervalo de tiempo, como se define en /etc/default/rcS.

En algunas distribuciones basadas en Red Hat, se hace usando la utilidad tmpwatch de un cronjob. En otros, la partición /tmp se monta usando el sistema de archivos tmpfs, que es similar a un disco RAM (por lo tanto, se limpia cuando la computadora se apaga).

Otro mecanismo conocido es un umbral de tamaño, lo que significa que el directorio temporal se limpiará de los archivos más antiguos cuando alcance un determinado tamaño.

0

Hay tres variables que se deben establecer en PHP para asegurarse de que la recogida de basura del directorio/tmp pasa correctamente y que son:

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

Conjunto session.gc_maxlifetime sea el número de segundos quiere que cada archivo tmp dure antes de que se elimine. Si inicia sesión en el administrador en OpenCart, este es el número de segundos hasta que se cerrará automáticamente. Por ejemplo, para establecer media hora, harías 60 segundos por 30 minutos, lo que sería un valor de 1800 segundos.

Las otras dos variables están relacionadas con cuándo se ejecutará el Recolector de basura, y es importante que se establezcan en los valores anteriores si tiene problemas con esto.

Más información aquí: https://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/

+0

Esto solo es válido para las sesiones de PHP que están configuradas para usar el almacenamiento de archivos, y no es relevante para los archivos temporales creados por la carga de archivos. –

Cuestiones relacionadas