[PHP] file() mit timeout?!

unregiert

abgemeldet
22 April 2006
451
26
Salve

Ich habe da einige RSS Feeds, die ich mit einem Script auslese. Üblicherweise mache ich das mit file() - Nachteil: Es existiert "kein timeout". Das Problem: Das Script lädt und lädt, wenn der Server nichts gibt...

Gibt es da irgend eine Alternative? Wenn ja, kann mir jemand evtl. den Link zu den php.net Artikeln geben?
 
mit default_socket_timeout in der php.ini kannste da was machen... kannste glaub ich auch zurlaufzeit setzen.
 
Nehm fsockopen() - da kannst du einen Timeout als 5. Paramenter festlegen.

Du connectest einfach den Host auf Port 80 (oder bei SSL 443), und sendest
Code:
GET /index.php?myname=chester HTTP/1.0\r\n\r\n
Dann erhälst du einen Result vom Server ... den Header musst du manuell filtern, aber das solltest du ja hinkriegen ;) Ein Beispiel gibts auch in der Manual.
 
Hatte ich noch rumliegen:

PHP:
function fetchUrlWithoutHanging($url)
{
	$numberOfSeconds=4;	 
	error_reporting(0);
	$url = str_replace("https://","",$url);
	$urlComponents = explode("/",$url);
	$domain = $urlComponents[0];
	$resourcePath = str_replace($domain,"",$url);
	$socketConnection = @fsockopen($domain, 80, $errno, $errstr, $numberOfSeconds);
	#echo ' >'.$domain;
	if (!$socketConnection)
	{
		return 0;
	}
	else
	{
		$xml = '';
		@fputs($socketConnection, "GET $resourcePath HTTP/1.0\r\nHost: $domain\r\n\r\n");
		while (!feof($socketConnection))
		{
			$xml .= @fgets($socketConnection, 128);
		}
		fclose ($socketConnection);
		return($xml);
	}
}