Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czyszczenie katalogu z fotkami
Forum PHP.pl > Forum > PHP
chomiczek
Mam pewnien problem, a mianowicie mam ok 10000 plików w jednym katalogu, jednak tylko 7500 jest mi potrzebnych, tzn. uzywanych czy gdzieś tam wyświetalnych przeze mnie.. musze w jakiś sposób skasować te zbędne pliki..
z bazy mogę wygenerować sobie nazwy plików, ale tylko do tych, które są mi potrzebne.. czyli do tych 7500 w jaki sposób wykasować pozostałe pliki, tzn. te, które nie będą przeze mnie wygenerowane.
Pomysły, które rozważam to np.:

1. Pobranie z bazy nazwy pliku i zmiana nazwy tego pliku np. na OK_nazwapliku, a następnie wykasowanie tych plików, które nie mają na początku OK_.

2. Drugi pomysł (chociaż chyba mało wydajny) miałby polegać na wpisaniu całości nazw plików do jednej tablicy (tych, któe mogę wyciągnąć z bazy), potem wpisanie zawartości katalogu do drugiej tablicy i ich porównanie. Zastanawiam się na porównaniem, a mianowicie.. jeśli nazwa pliku z katalogu nie znalazłaby się w tablicy z nazwami plików z bazy to plik jest kasowany.. problem taki, że takie porównanie musiałoby byc powtórzone 10000 razy!!

Żeby było ciekawiej 10000 zdjęć jest w 3 katalogach, czyli tak naprawę muszę ten skrypt powtórzyć 3 razy dla każdego katalogu oddzielnie (są tam różne pliki)..

Jak myślicie, które rozwiązanie jest lepsze, szybsze, wydajniejsze.. a może jest jakis inny (czyt. łatwiejszy) sposób??
ave
ja bym uzyl sposobu 2. porownywanie wcale nie trwa tak dlugo,
ostatnio porownywalem tablice z 1500 elementami z tablice z 17000 elementow + zaladowanie danych z pliku, czas cos kolo 50 sekudn.
Radarek
Gotowca pewnie nikt ci nie podsunie winksmiley.jpg. Zarys bedzie wygladac tak:

  1. <?php
  2. $pliki_z_bazy = pobierz_z_bazy_tablice_nazw_plikow_ktore_chcesz_zostawic();
  3. $pliki_z_katalogu = pobierz_nazwy_plikow_z_wybranego_katalogu();
  4.  
  5. foreach ($pliki_z_katalogu as $plik) {
  6. if (!in_array($plik, $pliki_z_bazy) {
  7. skasuj($plik);
  8. }
  9. }
  10.  
  11. ?>


Dla pewnosci (gdybys sie bal, ze jednak sobie cos skasujesz;)) mozesz te pliki przeniesc do jakiegos innego katalogu.
chomiczek
Spoko spoko.. niechodzi tutaj o to jak to będzie wyglądało, bo nie ma problemu, żebym nadpisał.. a co do testów.. zawsze robię backup.. po kilku przykrych doświadczeniach nauczyłem sie biggrin.gif
Bora
dla pewności porównałbym rozmiar.
chomiczek
w tym przypadku nie ma chyba potrzeby porównania rozmiary.. właśnie sprawdzam jak to zadziała.. :/
kszychu
A masz miejsce, by skopiowac gdzies te potrzebne pliki? Jeśli tak to robisz pętlę w której odczytujesz z bazy nazwę pliku, kopiujesz go do nowej lokalizacji i tak dla wszystkich rekordów. Na koniec wywalasz stary katalog.
chomiczek
Już sobie poradziłem.. wpisałem faktyczną zawartość katalogu do jednej pętli, a to co mogłem wyciągnąć z bazy wpisałem do drugije.. następnie poruwnałem zawartośc obu tablic i skasowałem pliki, które nie powinny się znaleźć w katalogu.. skrypt nie wykonywał sie więcej jak 60 sekund (wyczyszczenie 3 katalogów z 10000 zdjęc każdy). Jeśli ktoś będzie chciał to wrzuce listing.. ogólnie podobny do tego co napisał Radarek

Dzięki serdeczne za pomoc.
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.