Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
jareeny
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 23
Dołączył: 2.10.2007
Skąd: Słupsk

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


uruchomić go w usłudze Cron Jobs ;D
Go to the top of the page
+Quote Post
Michu
post
Post #3





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
erix
post
Post #4





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




Nie wiem, czy by nie pomogło odpalenie z wysłaniem polecenia w tło, tzn. polecenie &.

Jest jeszcze wielowątkowość napisana w cURL, gdzieś na stronach Zenda jest to opisane. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #5





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Odpowiedz jest prosta, shell_exec(), exec(), czekaja az uruchamiany proces sie zakonczy, a proc_open tego nie robi, przynajmniej tak jest na windowsie.
Go to the top of the page
+Quote Post
Michu
post
Post #6





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

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


Na windzie może i tak, ale jestem szczęśliwym użytkownikiem linuxa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
erix
post
Post #7





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




Na Linuxie też te polecenia działają.
Go to the top of the page
+Quote Post
guitarnet.pl
post
Post #8





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

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


jest jeszcze inny sposob aczkolwiek wymaga on swobodnego dostepu do serwera z dwoch powodow:
- czasami wystapi koniecznosc "ubicia" tego procesu i jego dzieci ktore zainicjowalismy z poziomu skryptu a ktore maja juz swoje "zycie"
- nietypowa konfiguracja(?), serwer musi akceptowac zadania od samego siebie slowem sluchac na lokalnym interfejcie

przyklad implementacji to system Pommo Mailing (http://pommo.org/Main_Page) gdzie uzyto respawning czyli wywolanie skryptu przez samego siebie co powoduje ze mozna zainicjowac skrypt i kontynuowac jego dzialanie bez koniecznosci crona czy interakcji uzytkownika
skrypt "mnozy" sie sam wywolujac sam siebie lokalnie tuz przed Runtime

do analizy polecam:

plik: /inc/classes/mailctl.php
linijka: 62
funkcja spawn() ktora wykorzystuje do tego fsockopen()
Go to the top of the page
+Quote Post
hevellius
post
Post #9





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 19.06.2006

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


ja też długo szukałem, aż w końcu poradziłem sobie w ten sposób:

jakis_skrypt.php
  1. <?php
  2. sleep(20);
  3. //cos dla testu z wyczekaniem i wyrzucajace jako wynik czas wykonania
  4. mkdir("/path/to/my/dir", 0700);
  5. echo date("H:i:s");
  6. ?>


i teraz mamy w tym samym folderze

wykonaj.php

  1. <?php
  2. exec('php jakis_skrypt.php >/dev/null &');
  3. echo "plik zostal utworzony";
  4. ?>


exec wiadomo wykonuje skrypt php za poleceniem "php", >/dev/null powoduje, że wynik nie idzie nigdzie(idzie do nikąd?) i to o co się rozchodzi - encja na końcu powoduje, że skrypt wywołuje się w tle i nie zajmuje czasu wykonywania skryptowi wykonaj.php
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: 24.12.2025 - 05:29