Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Optymalne usuwanie wszystkich plików z katalogu, Usuwanie 30 tys plików...
xPatryk
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


kasujesz 200 i sleep() na troche...
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
Radarek
post
Post #4





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

Ostrzeżenie: (0%)
-----


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) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
xPatryk
post
Post #5





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


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...
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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ą (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )
Go to the top of the page
+Quote Post
yavaho
post
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


A gdyby tak kazdy z tych odwiedzajacych w nocy usunal po 100 plikow?
Albo jeszcze lepiej, niech to zrobia boty odwiedzajace strone.
Go to the top of the page
+Quote Post
xPatryk
post
Post #8





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


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. ?>


Ten post edytował xPatryk 6.01.2006, 00:06:56
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A do czego sa te pliki potrzebne? Nie mozesz ich usuwac po kazdej wizycie?
Go to the top of the page
+Quote Post
xPatryk
post
Post #10





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


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...
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
xPatryk
post
Post #13





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

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

Pozdrawiam
Patryk
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A moze zmien sposob przechowywania danych, np. zapisuj wszystko w bazie, jednym pliku. Latwiej bedzie przeniesc/usunac.
Go to the top of the page
+Quote Post
xPatryk
post
Post #15





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


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 ;/
Go to the top of the page
+Quote Post
Viktor
post
Post #16





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 12.09.2004
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 06:27