Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pliki tymczasowe
Forum PHP.pl > Forum > PHP
yavaho
Uzytkownik robi jakies operacje na plikach graficznych. Najpierw ustala pewne parametry (rozdzielczosc, kompresje, dodaje takst na obraz itp) Wciska OK i otrzymuje wynik w postaci obrazka na monitorze. W tym samym momencie obrazek zostaje zapisany na serwerze jako plik tymczasowy - i gdy uzytkownik zdecyduje sie na ta wersje obrazka to zapisze go do swojej galerii.
Ale zanim zdecyduje sie na zapis wlasciwego obrazka to z pewnoscia bedzie generowal kilka jego poprzednich wersji.
Kazda wygenerowana wersja obrazka ma inna nazwe pliku z tego wzgledu aby uniknac cachowania obrazka w przegladarce.
I teraz pytanie: jak usunac obrazek gdy uzytkownik w pewnej chwili zrezygnuje i opusci strone? Bo jezeli zakonczy wszystko normalnie i zapisze swoj obrazek to bez problemu mozna usunac ten "temp".
dr_bonzo
Trzeba by zapamietac nazwy wszystkich tych plikow, lub tworzyc je w jednym katalogu (zapamietac jego nazwe) i pozniej go usunac z cala zawartoscia. Albo przechowywac obrazki w bazie danych - dodajesz im pole temp (wskazujace czy jest do usuniecia) i id usera (sesji -- zeby rozpoznac czyje to obrazki) i usuwasz wszstkie rokordy z temp = 1 i pasujace do danego usera.
Darti
Ja miałem podobny problem. Miałem skrypcik generujący wykresy dynamicznie.
Zastosowałem katalog TEMP + kasowanie plików "starszych niż" (np 3 dni). Temp sprawdzany był co pierwszą wizytę każdego dnia. Działa smile.gif

ps - starszych niż - czyli sprawdzana data utworzenia pliku i warunek if w pętli
yavaho
Ale kiedy je usunac?
Jezeli user w pewnej chwili przerwie wykonywanie operacji ktore powinien dokonczyc i zostawi po sobie smieci, ktore normalnie zostaly by usuniete jezeli by doszedl do konca operacji ktore rozpoczal.
dr_bonzo
No to wtedy (kiedy przechowujesz obrazki w bazie + dodajesz pole data_utworzenia_obrazka) przy wejsciu dowolnego usera na strone usuwasz wszystkie STARE obrazki (tzn starsze niz np. 30 minut) -- dzieki temu usunesz 'pozostawione' obrazki przez niezakonczone akcje.
yavaho
Juz mialem isc spac ale chyba dzieki Wam cos wymyslilem winksmiley.jpg
Nazwy plikow tymczasowych beda mialy czas pobierany z time();
I kazdy nastepny user bedzie sprzatal po poprzednim - czyli zrobie skrypt ktory uruchomi kazdy user i bedzie usuwal pliki starsze niz np 1 dzien.
To powinno chyba dzialac?
Darti
znaczy niekoniecznie data byla w bazie - wogole po co mieszac w to baze? skoro czyscimy cyklicznie tempa, to tam jest gora kilka(nascie) obrazkow - uzylem readdir() albo cos takiego zeby sprawdzic datę utworzenia pliku.

ps - takie cos zrobilem (możliwe że częściowo przy pomocy manuala - nie pamiętam)
  1. <?php
  2.  
  3. define('_TEMP_DIR','./temp');
  4. function czysc_temp(){
  5.     
  6.     list($a,$czas) = explode(&#092;" \",microtime());
  7.     if ($handle = opendir(_TEMP_DIR)) {        
  8.         while (false !== ($file = readdir($handle))) {            
  9.             if ($file != &#092;".\" && $file != \"..\" && file_exists(_TEMP_DIR .$file)) {                
  10.                 if (filectime(_TEMP_DIR . $file) + 86400 < $czas){
  11.                     unlink(_TEMP_DIR . $file);                    
  12.                 }
  13.             }
  14.         }
  15.         closedir($handle);
  16.     }
  17.     
  18. }
  19.  
  20. ?>
dr_bonzo
@Darti: twoje rozwiaznie jest ok i chyba najprostsze (tzn kodu nie sprawdzalem, chodzi mi o pomysl)

DLaczego baza? Chcialem w prosty sposob zapamietac czas utworzenia obrazkow i usera do nich przyporzadkowanego -- dla latwego usuwania.

Ide spac.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.