2010-03-13 18 views
11

Czasami get_file_contents trwa zbyt długo i zawiesza cały skrypt. Czy istnieje sposób na ustawienie limitu czasu na get_file_contents, bez modyfikowania maksymalnego czasu wykonania skryptu?Jak ustawić limit czasu dla get_file_contents w PHP?

Edytuj:

Trwa to długo, ponieważ plik nie istnieje. Otrzymuję komunikat "nie udało się otworzyć strumienia: żądanie HTTP nie powiodło się!" błąd. Ale to trwa wieczność.

Odpowiedz

35

Wydaje się być możliwe w PHP> 5.2.1 poprzez utworzenie kontekstu z timeout option.

Lekko zmieniony przykład ze strony ręcznej:

<?php 

$opts = array('http' => 
    array(
     'method' => 'GET', 
     'timeout' => 120 
    ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents('http://example.com/get.php', false, $context); 

?> 
+1

+1: Uwielbiam, gdy ludzie sugerują używanie strumieni * (które są jedną z najlepszych rzeczy w PHP, o których prawie nikt nie wie ;-() * –

+0

dzięki ... działają jak czar :-) – Jagira

+0

Jeśli określony limit czasu zostanie osiągnięty funkcja zwróci "FALSE"? Więc nie będę w stanie odróżnić błędu przekroczenia czasu od wszystkich innych? –

1

liczyć wykorzystanie ini_set i ustawić "default_socket_timeout" przed użyciem file_get_contents a następnie przywrócić starą wartość po nim - jeśli będzie mieć wpływ na niektóre inne części kodu ...

Powiązane problemy