Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]wykonanie długiego skryptu, dzieląc go na części
Cromwell
post 11.12.2009, 13:25:00
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


Mam skrypt, którego zadaniem jest pobieranie danych z pliku, następnie odpowiednie ich przerabianie.
Niestety, plik ma ponad 50mb samych informacji tekstowych, przez co skrypt się po prostu wywala.
W pliku php.ini zmieniłem maksymalny czas wykonywania skryptu, jednak to nie zupełnie to, o co mi chodziło.

Chciałbym wykorzystać rozwiązanie, które pozwoliłoby podzielić wykonanie całości na części. Coś takiego, co pozwoliłoby na wykonanie części skryptu, następnie automatyczne przeładowanie całości i zaczęcie od miejsca, gdzie skrypt ostatnio skończył.
Plus możliwość samodzielnego wznowienia skryptu w danym momencie.

Nie wiem jak to ugryźć, a także nie wiem w jaki sposób wyszukać tutaj na forum, czy w google.
Pomoże ktoś?
Go to the top of the page
+Quote Post
wookieb
post 11.12.2009, 13:34:01
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




1) Jak pobieraz dane z tego pliku? File_get_contents?
Jeżeli tak to zamień na fopen i fread. Czytaj fragmentami i na tych fragmentach operuj
2) Zrób wykrywanie kończącego się czasu czyli. Pobierasz początkowy czas wykonywania skryptu i przy przeanalizowaniu kolejnych fragmentów pliku sprawdź czy aktualna roznica czasu (aktualny_czas - czas_poczatkowy) jest mniejszy od limitu czasy wykonywania. Jeżeli tak zapisujesz stan operacji i konczysz działanie.


--------------------
Go to the top of the page
+Quote Post
Cromwell
post 11.12.2009, 14:11:10
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


Dane z pliku pobieram poprzez fopen i fread.
Jednak po wykonaniu całości, dane powinny być zapisane w innym pliku, gdzie używam file_put_contents. Zamienić to też?

Czyli rozumiem, że gdy skrypt rusza, to mam pobrać czas, następnie po wykonaniu raz pętli sprawdzić, jak wygląda różnica czasu i tak w kółko, aż uzyskam czas zbliżony do limitu, wtedy zapisuje wynik działania, a następnie przeładowuję skrypt i idę dalej?

A czy można by prosić o odnośnik do takiego kodu? Nie musi być oczywiście dokładnie taki, po prostu chciałbym zobaczyć, jak to wygląda na przykładzie.
Go to the top of the page
+Quote Post
wookieb
post 11.12.2009, 16:02:14
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat
Jednak po wykonaniu całości, dane powinny być zapisane w innym pliku, gdzie używam file_put_contents. Zamienić to też?

Przyznam, że nie wiem. Wydaje mi się że nie ma różnicy ale możesz sprawdzić testowo smile.gif

  1.  
  2. // z php.net/microtime
  3. function getmicrotime()
  4. {
  5. list($usec, $sec) = explode(" ", microtime());
  6. return ((float)$usec + (float)$sec);
  7. }
  8. $start = getmicrotime();
  9.  
  10. for(...)
  11. {
  12.  
  13. $roznica = getmicrotime() - $start;
  14.  
  15. if($roznica >= ($limitCzasu - 1)) // 1 sekunda zabezpieczenia
  16. {
  17. // koniec skryptu. oznaczamy aktualny stan pracy
  18. }
  19.  
  20. }
  21.  



--------------------
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 Wersja Lo-Fi Aktualny czas: 8.07.2025 - 01:08