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


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
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) 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...


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
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ą 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.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
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


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
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?


--------------------
Nie lubię jednorożców.
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...


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
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 tongue.gif

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

Pozdrawiam
Patryk


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
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.


--------------------
Nie lubię jednorożców.
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 ;/


--------------------
Linux is like a Wigwam - no windows, no gates, Apache INSIDE...
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 04:52