$url = 'http://a.url/i-know-is-down';
//ini_set('default_socket_timeout', 5);
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 5,
'ignore_errors' => true
)
)
);
$start = microtime(true);
$content = @file_get_contents($url, false, $ctx);
$end = microtime(true);
echo $end - $start, "\n";
die Antwort, die ich bekomme, ist in der Regel 21.232 segs, sollte nicht etwa fünf Sekunden sein ???PHP file_get_contents ignorieren Timeout?
Die uncommentation der ini_set-Zeile hilft überhaupt nicht.
verwenden, könnten Sie versuchen, das Ausschalten sowohl die „IGNORE_ERRORS“ Flagge sowie die stillen @file_get_contents() -Aufruf und sehen wenn irgendwelche offensichtlichen Fehler herauskommen? –
@ Mahdi.M: Ich kann 'ingnore_errors' nicht ausschalten, weil ich zwischen einem 404-Fehler und einem Fehler unterscheiden muss, der durch Verbindungsprobleme erzeugt wird. Lass es mich anders formulieren. Wenn ingnore_errors ausgeschaltet ist und der Server einen 404 $ Inhalt zurückgibt, wäre false und ich muss wissen ob $ content wenn false ist, weil ein 404 Fehler oder ein Verbindungsfehler ist. Der Fehler, der beim Unterdrücken des @ -Operators auftrat, ist ein generischer Fehler wie 'file_get_contents (Dateiname): Fehler beim Öffnen des Streams. ' – Cesar
Als Faustregel sollten Sie niemals @ verwenden. Wenn es für Ihre Anwendung wichtig ist, schreiben Sie es wahrscheinlich falsch. Nicht immer, aber verdammt oft! –