Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Ograniczenie czasu wykonywania funkcji
Forum PHP.pl > Forum > Przedszkole
Trojan
dajmy na to mam taki skrypt php:

  1. <?php
  2. ....
  3. $zmienna=funkcja();
  4. ....
  5. ?>


Zdarza się czasem że moja funkcja wykonuje się ponad 30s i pojawia się błąd "upłyną limit czasu połączenia" (czy jakoś tak)
Tu pojawia się moje pytanie - czy da się ograniczyć czas wykonywania tej jednej funkcji do powiedzmy 5s questionmark.gif Tak aby po 5sekundach wykonywanie funkcji zostało przerwane, zmienna została ustawiona na "error" a następnie skrypt wykonał się dalej.

Szukałem na forum, googlowałem niestety, nic nie znalazłem. Jeżeli był juz kiedyś taki temat to proszę o linka. Dziękuje i pozdrawiam.
phpion
Możesz bawić się funkcją microtime" title="Zobacz w manualu PHP" target="_manual lub po prostu time" title="Zobacz w manualu PHP" target="_manual mierząc czas trwania pętli i jeśli czas ten przekroczy 5s zastosować instrukcję break, która przerwie działanie pętli. Może jednak lepiej wydłużyć maksymalny czas wykonywania skrypt za pomocą funkcji set_time_limit" title="Zobacz w manualu PHP" target="_manual?
Trojan
break" title="Zobacz w manualu PHP" target="_manual chyba nie jest w stanie przerwać wykonywania funkcji...
Wydłużenie maksymalnego czasu wykonywania skryptu też mi nie pomoże. Jeżeli funkcja nie wykona się w 5s to jestem pewny w 100% że nie wykona się wcale ;]
cornholio666
Może lepiej pokaż kod funkcji. Musi być jakis powod, że się wykonuje tak długo
Trojan
Jest to funkcja do pobierania opisu z GG
http://forum.php.pl/index.php?s=&showt...st&p=129162

Problem pojawia się gdy pobieram opis osoby która go nie ustawiła. Na stronie pojawi się wtedy błąd:

1) Warning: fsockopen() [function.fsockopen]: unable to connect to 217.17.45.153:8074 (Próba połšczenia nie powiodła się, ponieważ połšczona strona nie odpowiedziała poprawnie po ustalonym okresie czasu lub utworzone połšczenie nie powiodło się, ponieważ połšczony host nie odpowiedział. ) in ****\opisgg\opisgg.php on line 87

albo

2) Warning: unpack() [function.unpack]: Type C: not enough input, need 1, have 0 in ****\opisgg\opisgg.php on line 133

albo

3) upłyną limit czasu połączenia (30s) <-- pojawia się czasami nawet gdy opis jest ustawiony.

aby nie wywalało tych błędów dałem @ przed wywołaniem funkcji
@$opiss=get_gg_status("$XXXXX", "XXXXXX", "XXXXXX", $error);

niestety błąd "upłyną limit czasu połączenia (30s)" pojawia się bez względu na to.
Kicok
Ustaw timeout połączenia w funkcji fsockopen" title="Zobacz w manualu PHP" target="_manual a następnie jeszcze timeout odbierania danych (stream_set_timeout" title="Zobacz w manualu PHP" target="_manual):

  1. <?php
  2.  
  3.  
  4.  
  5. $timeout = 5; // 5s
  6.  
  7.  
  8. $fp = fsockopen( $host, $port, $errno, $error, $timeout );
  9. if( !is_resource( $fp ) ) {
  10. // Nie udało się połączyć...
  11. }
  12.  
  13. stream_set_timeout( $fp, $timeout );
  14.  
  15.  
  16. // (...)
  17.  
  18. fclose( $fp );
  19.  
  20. ?>
Trojan
Ok - stream_set_timeout" title="Zobacz w manualu PHP" target="_manual działa ;] Dzięki wielkie.

Teraz pozostaje tylko problem pobrania opisu od 2 osób jednocześnie.
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.