Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Usunięcie najstarszych plików
Forum PHP.pl > Forum > PHP
perlas
Cześć,

Nie wiem jak sie zabrac za napisanie skryptu, który usunie 10 najstarszych plików z katalogu. Dokładniej chodzi o to, że mam na serwerze folder "obrazki", do którego użytkownicy na bierząco dosyłają nowe chciałbym aby po uruchomieniu przezemnie lub przez CRONa skryptu usunęło 10 najstarszych plików.
Czy w ogóle istnieje taka możliwość a jeżeli tak to ... Panowie prosze o pomoc biggrin.gif !
ayeo
Jakbyś trzymał dane nt obrazków w bazie to by nie było problemu, a tak to musisz zaszaleć z funkcją filemtime() zwraca ona czas ostatniej modyfikacji pliku lub filectime czyli utworzenie pliku. Co jeszcze? W PHP jest wbudowana klasa dir, z jej pomocą bez problemu możesz przeglądać zawartość danego katalogu i w jakiejś pętli posprawdzać pliki pod kątem daty....

Pozdrawiam!
perlas
Dzięki, póki co się wstrzymam z tym bo nie wiem jak to napisac smile.gif
Ale dzięki za pomoc!
ayeo
Poznaj moje chamskie serce winksmiley.jpg

  1. <?php
  2. function getFilesData($folder) {
  3. $content = dir($folder); 
  4. $FILES = array(); //tablica z wynikami
  5.  
  6. while($file = $content->read())
  7. {
  8. if($file == "." OR $file == "..") continue; //omijamy . i .. 
  9.  
  10. $create_data = date ("F d Y H:i:s.", filemtime($folder."/".$file));
  11. $FILES[] = array('name' => $file, 'date' => $create_data);
  12. }
  13. return $FILES;
  14. }
  15.  
  16. print_r(getFilesData('Testowy')); //jako parametr dajemy ścieżkę do katalogu
  17. ?>


Ja jako katalog podałem Testowy i dało mi taką oto tablicę wyników smile.gif
Kod
Array (    
   [0] => Array         (             [name] => 39.jpg                    
                       [date] => December 08 2007 02:34:00.         )      
   [1] => Array         (             [name] => avatar.jpg
                       [date] => November 18 2007 20:20:29.         )      
   [2] => Array         (             [name] => DF0006.jpg            
                       [date] => November 18 2007 20:19:22.         )      
   [3] => Array         (             [name] => przytulaski.gif            
                       [date] => November 23 2007 23:13:09.         )      
   [4] => Array         (             [name] => zakochany choniczek.jpg            
                       [date] => November 23 2007 22:50:28.         )  
   )


Oczywiście takie właśnie pliki miałem w katalogu Testowy winksmiley.jpg
Teraz wystarczy posprawdzać daty i pousuwać co trzeba, ale to już tylko formalność. Jakbyć napotkał jakieś trudności to pisz - chętnie pomogę..
Pozdrawiam

Poprawiłem to trochę i teraz możesz usunąć najstarsze pliki w jednej linijce winksmiley.jpg (możesz nawet podać ile najstarszych plików chcesz usunąć) Kod składa się z 3 funkcji, ale wywołujesz tylko jedną i ona się wszystkim zajmie: Oto mój genialny kod (joke):

  1. <?php
  2. function getFilesData($folder) 
  3. {
  4. $content = dir($folder); 
  5. $FILES = array(); //tablica z wynikami
  6.  
  7. while($file = $content->read())
  8. {
  9. if($file == "." OR $file == "..") continue; //omijamy . i .. 
  10.  
  11. $create_data = date ("F d Y H:i:s.", filemtime($folder."/".$file));
  12. $FILES[] = array('name' => $file, 'date' => $create_data);
  13. }
  14. return $FILES;
  15. }
  16.  
  17. function sortByDate($FILES) 
  18. {
  19. $date = array();
  20. foreach($FILES as $file) 
  21. {
  22. $date[] = $file['date'];
  23. }
  24. array_multisort($date, SORT_DESC, $FILES);
  25.  
  26. return $FILES;
  27. }
  28.  
  29.  
  30.  
  31. function deleteOldFiles($folder, $howMany) 
  32. {
  33. $FILES = getFilesData($folder); //pobiera pliki z katalogu
  34. $FILES = sortByDate($FILES); //soruje od najstarszego do najnowszego ;)
  35.  
  36. for($x = 0; $x<$howMany; $x++) { //usuwa pliki 
  37. $file_name = $folder."/".$FILES[$x]['name'];
  38. if(is_file($file_name)) 
  39. {
  40. unlink($file_name);
  41. $deleted[] = $file_name;
  42. }
  43. }
  44. return $deleted;
  45. }
  46.  
  47. //przykład użycia :)
  48. $usuniete = deleteOldFiles('Testowy', 3); //usuwa 3 pliki i zwraca tablice z nazwami usunietych plikow
  49. print_r($usuniete); //pokazuje usuniete pliki
  50. echo "<br /> Usunięto ".count($usuniete)." plików!";
  51. ?>


PS Przydałoby się sprawdzać jeszcze rozszerzenia plików i brać pod uwagę tylko obrazki smile.gif
perlas
Dosłownie jesteś wielki biggrin.gif:D
Dzięki dzięki!

edit:
Sprawdziłem skrypt działa aż miło tongue.gif tongue.gif
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.