Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podzielenie zasobożernej operacji na kilka kroków, problem
vee
post
Post #1





Grupa: Zarejestrowani
Postów: 64
Pomógł: 5
Dołączył: 16.08.2011

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


Witam,

Pewnego dnia stanąłem przed potrzebą zrobienia kopii ogromnej bazy danych oraz jeszcze większej ilości plików.
Ponieważ nie mam dostępu do SSH, postanowiłem wykorzystać unixowe komendy przez PHP:

  1. exec('cp ...');


ze względu na dużą objętość danych, na których te operacje będą przeprowadzane, skrypt się wykrzaczał. Postanowiłem wtedy podzielić go na kilka kroków, dla przykładu
1. dump bazy danych
2. wgranie dumpa do innej bazy danych
3. kopia plików

  1. <?php
  2. $tmp = file_get_contents('tmp.txt');
  3. if($tmp = 'step1')
  4. {
  5. ...
  6. file_put_contents('tmp.txt', 'step2');
  7. header('Location: plik.php');
  8. }
  9. elseif($tmp = 'step2')
  10. {
  11. ...
  12. file_put_contents('tmp.txt', 'step3');
  13. header('Location: plik.php');
  14. }
  15. elseif($tmp = 'step3')
  16. {
  17. ...
  18. file_put_contents('tmp.txt', 'step1');
  19. }


jak widać po wykonaniu "kroku" zapisuję w pliku tymczasowym jaki krok jest następny oraz wysyłam nagłówek header('Location: plik.php') celem odświeżenia - wtedy wykonać ma się następny i następny krok.

Mój problem polega na tym, że dopóki testuję to z zakomentowanymi liniami odpowiedzialnymi za w/w operacje (zostaje samo "przechodzenie do nast kroku") - wszystko chodzi dobrze, w firebugu widać dokładnie, że wszystkie kroki się wykonują.

Problem pojawia się, gdy odkomentuję właściwy kod, tzn w momencie kopiowania jakiegoś bardzo dużego katalogu, lub podczas wykonywania innej, potrzebującej sporo czasu do ukończenia, operacji - praca jest przerywana, tzn. nie wysyła nagłówka o przekierowaniu, w pliku TMP mam elegancko wskazane na jakim kroku przerwało pracę.

Dodam, że limit czasu ustawiony na "0", raportowanie błędów mam włączone- jednak takie nie zostają wyświetlane.

Ma ktoś jakiś pomysł, dlaczego tak się dzieje i jak temu zaradzić?

Pozdrawiam (IMG:style_emoticons/default/wink.gif)

EDIT: Dodam, że na każdy krok przydzielona jest tylko jedna komenda uniksowa, tzn w jednym kroku jest tworzony dump bazy, w drugim jest on wgrywany do innej bazy, w trzecim np kopia plików z... do... itd.

Ten post edytował vee 18.01.2012, 13:49:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


http://sypex.net/en/ <-- możesz podłączyć to chyba nawet pod crona, jak nie masz nawet tego na serwerze, to może to być webcron, które są dostępne w necie za free (webcron.pl chociażby). Zrobi ci pięknie kopie nawet dość dużej bazy. Tyle w przypadku bazy, w przypadku plików, to IMO lepiej nie zaprzęgać do tego php, core systemu możesz machnąć w php, taki dużo przeważnie nie ma. Ale jakieś zewnętrzne obrazki, to już lepiej robić czym innym niż php. Jak możesz listować katalog z obrazkami, to wystarczyć ci będzie sam wget, który może pobrać wszystko rekursywnie, lub poprostu odpalić ftp z konsoli.
Go to the top of the page
+Quote Post

Posty w temacie
- vee   Podzielenie zasobożernej operacji na kilka kroków   18.01.2012, 13:45:19
- - Uriziel01   Jesteś pewny że to przekroczenie czasu ? Dla pewn...   18.01.2012, 14:12:53
- - vee   Krok, który się wywala najczęściej to: [PHP] pobi...   18.01.2012, 14:18:49
- - by_ikar   http://sypex.net/en/ <-- możesz podłączyć to ch...   18.01.2012, 14:21:23
- - vee   Niestety zewnętrzne rozwiązania odpadają z kilku w...   18.01.2012, 14:24:58
- - Uriziel01   Hmmm, a na czym to stoi ? Bo widząc `przykręca...   18.01.2012, 14:34:37
- - vee   Niestety wciąż home.pl, jest to jedyna tak "n...   18.01.2012, 14:38:30
- - adbacz   A masz jakoś ładnie ułozony, stworzony katalog/kat...   18.01.2012, 15:27:43
- - abort   1. Jak nigdy nie jestem zwolennikiem instrukcji ...   18.01.2012, 22:38:08
- - vee   Problem uprawnień rozwiązany; Główny problem jedna...   19.01.2012, 08:32:44
- - adbacz   A nie mozesz zrobić najpierw jednego kroku, późnie...   19.01.2012, 11:10:33
- - piotrooo89   wiec możesz to zrobić za pomocą nice i przekierowa...   19.01.2012, 11:21:48
- - vee   @piotrooo89 Ok, komendy wykonują się piorunem, jed...   19.01.2012, 13:30:26
- - piotrooo89   no możesz w samym php zapisać ile plików miałeś na...   19.01.2012, 13:34:59
- - vee   Mógłbyś mi jeszcze odpowiedzieć na takie pytanie, ...   19.01.2012, 14:00:10
- - piotrooo89   tak, możesz tak zrobić, każde polecenie możesz kie...   19.01.2012, 14:02:31
- - vee   Może uściślę, czysto dla pewności - w przypadku my...   19.01.2012, 14:05:45
- - piotrooo89   wydaje mi się na 99.99% że będzie ok: Kodmysql ...   19.01.2012, 14:10:19
- - vee   Dla potomnych - pliki SQL, w których miał znajdowa...   20.01.2012, 08:13:21


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: 8.10.2025 - 19:51