Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalne usuwanie wszystkich plików z katalogu
Forum PHP.pl > Forum > PHP
xPatryk
Witam,

w jaki sposób napisać skrypt, który jak najmniej obciążając serwer (będzie wywoływany raz dziennie, ok. godz 2-3 nad ranem) usunie z katalogu tymczasowego ok. 30 tys plików tymczasowych (każdy 32 bajtowy) ?

Pozdrawiam i proszę o pomoc
ActivePlayer
kasujesz 200 i sleep() na troche...
mike
Moim zdanie najlepiej zrobić to poleceniem z konsoli.
Polecenie takie można wydać też z php za pomocą ... tego juz możesz dowiedzieć się tu: Program Execution Functions
(niestety tunkcje te są żadko udostępniane na serwerach)
Radarek
No to skoro bedziesz go uruchamiac w nocy, kiedy jest maloprawdopodobne ze ktokolwiek bedzie uzywac serwera, to lepiej byloby kasowac od razu hurtem, bez przestojow na spanie (sleep) smile.gif.
xPatryk
Heh... sleep odpada, procesy są ubijane po 60 sekundach,
w nocy mamy oglądalność na poziomie 100-300 odsłon na minutę, więc serwer też jest obciążony...

Wywoływanie lokalnych poleceń jest zablokowane i nie da się go odblokować...

Proszę o inne propozycje...
mike
Skrypt z cron'a chodzący przez powiedzmy 40 sek. a potem wywołujący sie ponownie lu uruchamiany co minutę. Wyjdzie 20 sek. przerwy.

(możliwości sie kończą winksmiley.jpg)
yavaho
A gdyby tak kazdy z tych odwiedzajacych w nocy usunal po 100 plikow?
Albo jeszcze lepiej, niech to zrobia boty odwiedzajace strone.
xPatryk
Hmmm... może być i tak, ale ile średnio trwa usunięcie 100 plików ?

poza tym, pliki muszą zniknąć w miarę w jednym momencie, gdyż jeżeli pozostawałyby dłużej, stanowiłoby to zagrożenie dla bezpieczeństwa serwisu.. No powiedzmy, że maksymalnie powinny istnieć 2-3 minuty... (czas tworzenia i usuwania byłby losowy, w nocy, tak, aby nie było nigdy wiadomo, kiedy istnieją a kiedy nie...


I następna kwestia...
tak myślę, że aby usunąć pliki "po kolei" trzeba by było wczytać do tablicy ich listę (np. przez maptree i File_Find (z klasy PEAR) a następnie po kolei je usuwać w pętli, ale to zapcha sporo zasobów...

A do unlink'a nie podam raczej jako nazwe pliku *.* ani *... jaka metode wybrac?

Pozdrawiam
Patryk


Hmmm....

rozwiązałem to chwilowo tak, ale to działa strasznie wolno i obciąża procesor ;/ Można prosić inną propozycję ?

  1. <?php
  2.  
  3. foreach (glob("*.pin") as $filename) {
  4.    unlink($filename);
  5. }
  6.  
  7. ?>
dr_bonzo
A do czego sa te pliki potrzebne? Nie mozesz ich usuwac po kazdej wizycie?
xPatryk
Nie, są one zapisywane codziennie (w nocy) na nowy nośnik (marnowanie płytek ;/) i przechowywane w archiwum przez 5 lat... Zawierają shashowane identyfikatory operacji, ktore w razie czego beda sluzyly za dowód w sądzie... Zresztą sporo tłumaczenia by to wymagało...
mike
Widzę że jest jakaś ważniejsza aplikacjia, więc dlaczego admin nie współpracuje i nie udostępni na serwerze mechanizmów, które bede do tego idealne (jeden z powyższych pomysłów) :?:

IMO nie ma sensu kombinować, bo pewnie łatwiej bedzie wymóc na adminie dostosowanie się.
ActivePlayer
jesli proces jest zabijany po 60 sec to proponuje tak:

mierzysz ile czasu zajmuje usunięcie n plikow...

i potem skrypt:
Kod
kasujesz n plików...
sleep(50-czas kasowania_n_plikow)
header(na siebie)


header otworzy nowy proces.
xPatryk
No może faktycznie... Trzeba będzie go pomęczyć, ale wiadomo, jak to pracowników w banku się męczy...
Może by wreszcie zatrudnili jakąś fajną adminkę? Taką, żeby molestowanie jej było chociaż przyjemne tongue.gif

Ale wracając do tematu, myślisz, że wywołanie funkcji powłoki przez php bedzie optymalniejsze?

Pozdrawiam
Patryk
dr_bonzo
A moze zmien sposob przechowywania danych, np. zapisuj wszystko w bazie, jednym pliku. Latwiej bedzie przeniesc/usunac.
xPatryk
Heh.. nie mogę... każdy rekord musi być w osobnym pliku, z tego pierwsze 24 znaki to indentyfikator rekordu a tresc to hash operacji...

Nic tu zmieniac nie moge, bo potem program w centrali tego nie otworzy ;/
Viktor
A może by tak stworzyć dwa katalogi, które na przemian, o losowej godzinie stawały by się bieżącymi katalogami. Podczas gdy do jednego były by zapisywane nowe pliki, z drugiego były by sukcesywnie usuwane, lub usuwany i ponownie tworzony był by cały katalog. Jeżeli pliki przeznaczone do skopiowania mogą się znajdować wyłącznie w katalogu o jednej ustalonej nazwie, to można by pokombinować ze zmianami nazw katalogów.
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.