Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> RAR - przerwane wypakowanie, wypakowuje tylko 120 plików...
pablo_w
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.02.2010

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


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?

Ten post edytował pablo_w 13.02.2010, 18:05:44
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.02.2010

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


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.

Ten post edytował pablo_w 16.02.2010, 09:23:21
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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...).
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: 17.09.2025 - 23:55