Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> TorrentVolve - praca w tle
Michu
post
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Witam. Zainteresowałem się programem TorrentVolve (klient bittorrent napisany w php). Zauważyłem że ściąga on pliki nawet jeśli sam skrypt nie jest uruchomiony w przeglądarce. Główne pliki mają po 250 kb (5000+ linii), więc nie mam możliwości przeanalizowania działania programu krok po kroku.

Moje pytanie brzmi: jak zbudować w php skrypt który działałby nawet przy wyłączonej przeglądarce? Niekoniecznie ma to być ściąganie plików, po prostu interesuje mnie możliwość wykonywania przez php operacji "w tle".
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Michu
post
Post #2





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 15.10.2006
Skąd: zewsząd :P

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


Hm... chyba rozgryzłem sposób działania tego torrenta. On ma dołączoną aplikację w javie, to ona jest odpowiedzialna za ściąganie. Ale dzięki za odpowiedź.


Ale google wskazało mi jeszcze jeden sposób, omijający crona i aplety w javie.
ignore_user_abort" title="Zobacz w manualu PHP" target="_manual


EDIT:---------------------------------------------------------------------------
A jednak wracam do tematu. Zainteresowała mnie możliwość pracy wielowątkowej w php (odsyłam do http://www.alternateinterior.com/2007/05/m...es-in-php.html).

Skrypt ten używa funkcji proc_open" title="Zobacz w manualu PHP" target="_manual do uruchamiania równolegle wielu skryptów php, tzw. procesów. Główny skrypt (wywołujący procesy) będzie działać tak długo jak najdłużej pracujący proces. Zastanawiam się nad przeróbką skryptu tak, aby nie czekał on na zakończenie działania procesów (po prostu kończył się, a procesy działałyby nadal). Co na takiej konstrukcji można zyskać? Na przykład niezależnie działające skrypty ściągające duże pliki: wystarczy poprzez ini_set zignorować timeout i dodać sleep(), aby nie przeciążyć interpretera.

Przystąpiłem do pracy. Zauważyłem że funkcja proc_open() nie blokuje interpretera, tylko samo wysłanie danych końcowych do przeglądarki (trochę jaśniej: po wykonaniu funkcji plik jest dalej przetwarzany, lecz sam wynik działania skryptu nie zostanie wysłany dopóki nie zakończą się wywołane tą funkcją skrypty). Zatem używanie proc_open() jest kiepskim pomysłem.

Próbowałem użyć:
  1. <?php
  2. echo shell_exec('php -q p5.php');
  3. ?>

lecz efekt taki sam - interpreter oczekuje na odpowiedź konsoli 10 sekund (w pliku p5.php jest linijka sleep(10); ).

Podobnie ma się sytuacja przy użyciu exec(), passthru() i system().


Powiedzcie mi:
1) Jak wywołać z jednego pliku uruchomienie drugiego tak aby oba kończyły się niezależnie?


Oczywiście nie ma mowy o JS ani AJAX (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Michu 27.03.2009, 19:55:27
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 00:50