Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RAR - przerwane wypakowanie
Forum PHP.pl > Forum > PHP
pablo_w
Mam serwer z zainstalowaną obsługą rar. Archiwa, które trzeba wypakować zawierają średnio 1500 niewielkich plików tekstowych.
Kod wypakowujący wygląda następująco:
  1. $rar_file = rar_open($sciezka_pliku);
  2. $rar_list = rar_list($rar_file);
  3.  
  4. foreach($rar_list as $file) {
  5. $file->extract('folder-docelowy');
  6. }


Niestety - serwer kończy pracę po wypakowaniu 119-120 plików. Sprawdzałem wielokrotnie kod, próbowałem przeróżnych rozwiązań - nic nie pomaga.
Pliki rar ma ok 3MB, zwiększana była pamięć memory_limit do 64M, nic nie dało.
Serwer po prostu przerywa pracę, nie ma żadnych komunikatów błędu, cisza.

Dodam, że mechanizm jest uruchamiany z crona, więc operacja musi się zamknąć w jednym wywołaniu.

Czy ktoś się spotkał z tym zagadnieniem? Może jest jakaś inna metoda, inna biblioteka, która pozwoli obejść ten problem?
erix
Ok, zwiększyłeś ilość pamięci, ale o set_time_limit zapomniałeś?

Poza tym, nie masz binarki unrar w systemie? O wiele lepiej będzie, gdy zrobisz to samodzielną aplikacją niż niepotrzebnie zaciągnięsz do tego PHP.
Pilsener
Cytat
1500 niewielkich plików tekstowych

Cytat
Serwer po prostu przerywa pracę


No sorry Winetou, serwer nie został stworzony po to, by wykonywał każdą komendę aż do dnia Sądu Ostatecznego, jest coś takiego jak timeout, w wypadku PHP to:
http://pl.php.net/manual/pl/function.set-time-limit.php
Musisz pliki wypakowywać na raty, wywołując wiele razy ten sam skrypt z parametrem liczby rekordów lub wywoływać go co jakiś czas dopóki wszystko nie zostanie rozpakowane.
pablo_w
Cytat
Ok, zwiększyłeś ilość pamięci, ale o set_time_limit zapomniałeś?


Cytat
serwer nie został stworzony po to, by wykonywał każdą komendę aż do dnia Sądu Ostatecznego, jest coś takiego jak timeout, w wypadku PHP to:
http://pl.php.net/manual/pl/function.set-time-limit.php


Po pierwsze, skrypt odpalany jest z crona, więc - z tego co się orientuję - ustawienie limitu czasu wykonywania nie ma związku. Próbowałem zresztą i tego, bez skutku.
Widać wyraźnie, że jeszcze daleko do przekroczenia aktualnego czasu wywołania. Te pliki na prawdę są lekkie, skrypt kończy działanie po ok 1 sekundzie. W dodatku nie pojawia się komunikat o przekroczeniu czasu, a błędy są raportowane.

Cytat
O wiele lepiej będzie, gdy zrobisz to samodzielną aplikacją niż niepotrzebnie zaciągnięsz do tego PHP


To prawda, ale kłopot w tym, że jestem w stanie działać tylko w obrębie php.
Poza tym aktualny skrypt z założenia powinien być całkowicie ok, ale tak nie jest - i szukam odpowiedzi, czy nie wystarczy po prostu czegoś przekonfigurować, czy nie jest to jakiś błahy powód.
erix
Cytat
więc - z tego co się orientuję - ustawienie limitu czasu wykonywania nie ma związku. Próbowałem zresztą i tego, bez skutku.

Gwoli ścisłości, nie ma znaczenia, w jaki sposób wywołujesz interpreter. Limit czasu obowiązuje w ramach skryptu, a nie sposobu jego wywołania.

Cytat
skrypt kończy działanie po ok 1 sekundzie.

A skąd wiesz? Na tym samym serwerze sprawdzasz? Jeśli na tym samym, to podejrzewam, że problem wynika z innej konfiguracji interpreterów - inna dla WWW, inna wywoływana przez cron.

Spróbuj przenieść skrypt do katalogu serwera www i niech cron odpala zadanie pobrania strony, a nie sam interpreter (np. wget http://fdsfsdfsdf/skrypt.php zamiast php -f /home...).
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.