2009-06-04 12 views
0

Ich schließe eine lokale Klasse ein, die eine Datei von einem Remote-Server anfordert. Dieser Prozess ist ziemlich unzuverlässig —, weil der Remote-Server oft — überlastet ist und ich manchmal 20 oder so Sekunden warten muss, bevor der Include aufgibt und fortfährt.Wie kann ich die Zeit beschränken, die ein PHP-Include auf ein Ergebnis wartet?

Ich möchte die Ausführungszeit des enthaltenen Skripts begrenzen; sagen wir, fünf Sekunden.

Aktuelle Code:

include('siteclass.class.php'); 

Update:

Mein Code innerhalb der Klasse:

$movie = str_replace(" ","+",$movie); 
$string = join('',file($siteurl.$l.'/moviename-'.$movie)); 

if(!$i) { static $i = 1;} 
if($file_array = $string) 
{ 
    $result = Return_Substrings($file_array, '<item>', '</item>'); 

    foreach($result as $res) { 

Das ist im Grunde ist es, so weit das Laden geht. Die interne Verarbeitung dauert etwa 0,1 s. Ich denke, das ist ziemlich machbar.

+3

Es ist seltsam, wenn Sie ein Skript haben, das manchmal ohne eine externe Klasse auskommen kann. Ich meine, entweder benutze es immer oder nie. 20 Sekunden sind viel zu langsam. Ich denke, du solltest deine Software überdenken. –

+0

Welcher Code führt die Anfrage tatsächlich aus? Wenn Sie beispielsweise cURL verwenden, können Sie ein Zeitlimit festlegen und den Fehler behandeln. – Kekoa

Antwort

1

Bitte beachte, dass ich diesen Code nicht testen, nehmen Sie dies wie ein Satz:

 
$fp = fopen('siteclass.class.php', 'r'); 

stream_set_timeout($fp, 2); 
stream_set_timeout($fp,$timeout); 
$info = stream_get_meta_data($fp); 

if ($info['timed_out']) { 
    echo "Connection Timed Out!"; 
} else { 
    $file = ''; 
    while (!feof($fp)) { 
    $file .= fgets($fp); 
    } 
    eval($file); 
} 

Der Timeout in Sekunden eingestellt, so das Beispiel es auf zwei Sekunden eingestellt.

+0

thx für die Hilfe. Es stellt sich heraus, dass meine PHP-Datei leer ist. Keine Fehler, nichts, nur leer. Ich denke, es hat etwas zu tun, dass ich die Klasse nicht in die Seite einbeziehe. (nicht sicher, obwohl> kein Experte), aber ich vermisse einige Variablen in der Klasse angefordert. (Einige globale Variablen gesetzt, wie '$ Film'. Was denkst du? Thx sowieso! –

+0

ok, ich entschuldige mich für meine Inkompetenz .. Aber es stellte sich heraus, ich habe vergessen, die '

0

Dies passt nicht genau zu dem, was Sie suchen, aber dies wird das Zeitlimit für das Einschließen und Ausführen auf insgesamt 25 Sekunden setzen. Wenn das Zeitlimit erreicht ist, wird ein schwerwiegender Fehler ausgegeben.

set_time_limit(25); 
0

den mitgelieferten Code Fix ein Timeout auf dem HTTP-Request zu haben und dann schön erholen, anstatt nur Abbruch durch eine Einstellung Zeitlimit für das Skript selbst.

Mein Rat wäre, an die Wurzel des Problems zu gelangen, anstatt nach einer Problemumgehung zu suchen.

+0

Was empfehlen Sie mit meinem (neu aktualisierten) Code? Ich stimme deiner Vision zu> repariere sie an der Wurzel. thx –

Verwandte Themen