Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Kilka procesów jednocześnie
faran
post 7.02.2011, 12:27:54
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 2
Dołączył: 27.10.2006
Skąd: CyberRZECZYWISTOŚĆ

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


Witam,
Da się jakoś w php uruchomić kilka procesów/funkcji/obiektów jednocześnie ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Noidea
post 7.02.2011, 12:52:37
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


http://php.net/manual/en/book.pcntl.php


Dodatkowo kiedyś spotkałem się z takim dziwnym tworem jak:
pierwszy.php
  1. <?php
  2.  
  3. $curl = curl_init( "http://adres.pl/drugi.php" );
  4. curl_setopt( $curl, CURLOPT_NOBODY, true );
  5. curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
  6. curl_exec( $curl );
  7. curl_close( $curl );
  8.  
  9. // operacje
  10.  
  11. ?>


drugi.php
  1. <?php
  2.  
  3. flush(); // Wysyła nagłówki, żeby pierwszy.php mógł przejść do wykonywania operacji
  4.  
  5. // operacje
  6.  
  7. ?>


Nie pamiętam czy dokładnie tak to wyglądało, ale sposób działania przedstawiłem.
Pokazuje to, że nawet w tak niekorzystnym środowisku jak PHP ludzie sobie radzą wink.gif

Ten post edytował Noidea 7.02.2011, 12:56:09


--------------------
Go to the top of the page
+Quote Post
zegarek84
post 7.02.2011, 14:11:01
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Tak to bywa jeśli ktoś nie opisze za dokładnie problemu... PHP nie wspiera wielo procesowości - fakt, można to delikatnie obejść przy kilku kombinacjach ale podejrzewam, że akurat tutaj Ty szukasz czegoś opisanego na styl blogu gdzie napisano o "wielozadaniowości" i połączeniach asynchronicznych z innymi serwerami:
Guru - Multiplexing
Cytat(Noidea @ 7.02.2011, 12:52:37 ) *
Dodatkowo kiedyś spotkałem się z takim dziwnym tworem jak...

Niestety ale jeśli chodzi o Windowsa to jest to jedno z rozwiązań do wymuszenia nowego procesu - i jedyne jeśli jest zablokowana możliwość wykonywania poleceń konsolowych na serwerze np. ze względów bezpieczeństwa...

dokładniej to potworek którego się uruchamia poprzez bezpośrednie jego wywołanie (curlem, file_get_contents czy czym tam chcecie - lub nawet przeglądarką internetową...) ma strukturę typu:
  1. ini_set('Content-Type','text/html; charset=utf-8');
  2. ignore_user_abort(true); // na wszelki wypadek jeśli połączenie miało by być zamknięte niech wywołany skrypt robi swoje
  3.  
  4. echo 222; // dowolna treść, że skrypt został poprawnie uruchomiony
  5. // nagłówki by nie keszować [by serwery pośredniczące w połączeniu przy kolejnym połączeniu przekazały polecenie dalej a nie zwróciły ostatni bufor] oraz jeśli połączenie otwarte by je zamknąć - czym wcześniej tym lepiej
  6. header('Content-Type: text/html; charset=utf-8');
  7. header('Connection: close');
  8. header('Content-Language: pl');
  9. header('Content-Length: '.ob_get_length());
  10. header('Pragma: public');
  11. header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  12. header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
  13. header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
  14. header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
  15. header ('Pragma: no-cache');
  16. header('Expires: 0');
  17. flush(); // tu już nie pamiętam o co chodziło ale ten flush niestety trzeba wymusić bo nie zawsze działał poprawnie - dlatego powtórzenie podobnych funkcji ;p
  18. // KONIEC POTWORKA
  19.  
  20. /* tutaj chulaj duszo piekła nie ma ;) - róbta co chceta - nawet ignore_user_abort(true); nie jest tu już potrzebny ;p
  21. ale zadbajcie o jakieś komunikaty, kontrolę przez zapisywanie zdarzeń gdzieś - nie wykonało się poprawnie to trzeba powtórzyć ;p
  22.  
  23. WYNIKI GDZIEŚ SOBIE TRZEBA ZAPISAĆ CZY W BAZIE DANYCH CZY W PLIKACH TEKSTOWYCH [W SUMIE TO TEŻ BAZA DANYCH ^^] LUB MOŻE TO JAKIŚ DEMON KTÓRY MA DZIAŁAĆ STALE I NADZOROWAĆ COŚ PUKI NP. NA SERWERZE NIE POJAWI SIĘ JAKIŚ PLIK LUB ZMIENNA W BAZIE DANYCH
  24. */

JAK WIDAĆ SKORO TO MIAŁO DZIAŁAĆ "W TLE" TO NIE MA MOŻLIWOŚCI POZNANIA WYNIKU DZIAŁANIA TAKIEGO SKRYPTU DROGĄ HTTP!!! - będziemy jedynie wiedzieli, że skrypt został poprawnie wykonany - wyniki musimy gdzieś zapisać...

żeby ktoś się słów nie czepiał to w sumie jest możliwość poznania wyników drogą http jeśli potworek jest miniserwerem podpiętym na socketach...

i jeszcze może linki:
[wolontariat]wykonywanie 2 akcji po kliknięciu na button
uruchamianie pliku php co 30s bez właczonego kompa - na serwie - chyba nie będziesz miał cierpliwości przeczytać całego dokładnie ^^
Przekazywanie obiektu COM, Przekazywanie obiektu COM między wywołaniami strony


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

Posty w temacie


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: 21.06.2025 - 09:58