2011-01-11 13 views
45

Sto lavorando a uno script di caricamento.php :: quanto tempo restano i file tmp?

Se un utente carica un file ed esiste già, desidero avvisare l'utente (questo è tutto tramite ajax) e dare loro la possibilità di sostituirlo o annullare.

Invece di spostare il file, Ero curioso di poter lasciare il file in tmp e restituire il percorso a quel file nella risposta ajax.

Se l'utente dice che sovrascrive il vecchio file in quella richiesta Ajax, passa il percorso a php che continua a funzionare sul file.

per questo lavoro però ho bisogno di sapere per quanto tempo un file rimane nella directory tmp di php

+0

Quando faccio uno strumento di upload di file, in primo luogo ho controllare se il file è già sul server - se esiste già, io rinominare il nuovo file con un numero davanti del nome del file, a seconda di quanti di essi ci sono. Nessun conflitto, tutti vanno a casa felici. –

+1

se si passa il percorso in tmp di nuovo nella risposta ajax, ciò non implica che qualcuno potrebbe interferire con la richiesta successiva e spostare qualche altro file da qualche altra parte sostituendo tale valore? (solo un pensiero) –

+1

beh, tutto quello che potevano veramente fare è spostare un file dalla directory tmp alla directory che hai specificato, e le probabilità che loro sappiano cosa è nella tua directory tmp è un po 'improbabile, anche se una buona pensato. – Hailwood

risposta

60

file caricati tramite POST vengono cancellati subito dopo script php termina la sua esecuzione.

Secondo php.net: "Il file verrà eliminato dalla directory temporanea alla fine della richiesta se non è stato spostato o rinominato."

+0

anche i file che sono stati caricati da un input html? – Hailwood

+0

Non importa da dove provenga il file. Inoltre - ogni input nel browser è uno html ;-) – zerkms

+0

davvero? php tiene traccia di ogni file che scrive ed elimina? sono abbastanza sicuro che no! Ho uno script php che genera miniature su richiesta per le immagini, e se php ha cancellato i file dopo che uno script è stato eseguito, le miniature non sarebbero mai esistite! –

18

Per i file caricati, the manual states:

Il file sarà eliminato dalla directory temporanea alla fine della richiesta se non è stata allontanata o rinominato.

I file che devono essere conservati devono quindi essere spostati in un'altra posizione.

Più in generale, come può suggerire il titolo della domanda, le cartelle temporanee devono essere rimosse dal sistema. Questo è vero quando si usano funzioni come tempnam o tmpfile, o semplicemente quando si scrive nella directory temporanea (vedere sys_get_temp_dir).

In Ubuntu, questo viene eseguito ad ogni riavvio del sistema o in un intervallo di tempo, come definito in /etc/default/rcS.

In alcune distribuzioni basate su Red Hat, viene eseguito utilizzando l'utilità tmpwatch da un cronjob. In altri, la partizione /tmp viene montata utilizzando il file system tmpfs, che è simile a un disco RAM (quindi viene pulito quando il computer si spegne).

Un altro meccanismo noto è una soglia di dimensione, il che significa che la directory temporanea verrà eliminata dai file meno recenti quando raggiunge una determinata dimensione.

0

ci sono tre variabili che devono essere impostati in PHP per assicurarsi che Garbage Collection della directory/tmp avviene in modo corretto e sono:

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

Set session.gc_maxlifetime di essere il numero di secondi vuoi che ogni file tmp duri prima che venga cancellato. Se accedi all'Amministratore in OpenCart, questo è il numero di secondi fino a quando non sarai automaticamente disconnesso. Ad esempio per impostare mezz'ora, si farebbe 60 secondi per 30 minuti, che sarebbe un valore di 1800 secondi.

Le altre due variabili sono correlate a quando verrà eseguito Garbage Collector ed è importante che siano impostati sui valori sopra indicati in caso di problemi.

Maggiori informazioni qui: https://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/

+0

Questo vale solo per le sessioni PHP che sono configurate per utilizzare la memorizzazione di file e non è rilevante per i file temporanei creati dai caricamenti di file. –

Problemi correlati