2009-06-04 5 views
0

J'inclus une classe locale qui demande un fichier à partir d'un serveur distant. Ce processus est plutôt peu fiable car le serveur distant est souvent surchargé — et il m'arrive parfois d'attendre 20 secondes avant que l'inclusion n'abandonne et continue.Comment puis-je limiter la durée d'attente d'un résultat par PHP?

Je voudrais avoir une limite sur le temps d'exécution du script inclus; dis, cinq secondes.

Code actuel:

include('siteclass.class.php'); 

Mise à jour:

Mon code dans la classe:

$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) { 

C'est essentiellement cela, pour autant que le chargement va. Le traitement interne prend environ 0,1 s. Je suppose que c'est assez faisable.

+3

C'est étrange si vous avez un script qui peut parfois se passer d'une classe externe. Je veux dire soit l'utiliser toujours ou jamais. 20 secondes est beaucoup trop lent. Je pense que vous devriez repenser votre logiciel. –

+0

Quel code exécute réellement la requête? Si vous utilisez cURL par exemple, vous pouvez définir un délai d'attente et gérer l'erreur. – Kekoa

Répondre

1

Notez que je n'ai pas testé ce code, prenez cela comme une proposition:

 
$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); 
} 

Le délai d'attente est réglé en quelques secondes, de sorte que l'exemple à deux secondes.

+0

thx pour l'aide. il s'avère que mon fichier php retourne vide. Pas d'erreurs rien, juste vide. Je suppose que cela a quelque chose à faire que je n'inclus pas la classe dans la page. (Je ne sais pas si> pas un expert), mais il me manque certaines variables demandées dans la classe. (quelques variables globales, par exemple '$ movie') Qu'est-ce que tu penses? Thx de toute façon! –

+0

ok, je m'excuse pour mon incompétence .. Mais, il s'est avéré que j'avais oublié de retirer le '

0

Cela ne correspond pas exactement à ce que vous cherchez, mais cela vous permettra de limiter la durée de l'inclusion et de l'exécution à un total de 25 secondes. Si la limite de temps est atteinte, il génère une erreur fatale.

set_time_limit(25); 
0

Fixer le code inclus pour avoir un délai d'attente sur la requête HTTP puis récupérer bien, au lieu d'avorter en définissant un limite de temps sur le script lui-même.

Mon conseil serait d'aller à la racine du problème au lieu de chercher une solution de contournement.

+0

Que recommandez-vous avec mon code (nouvellement mis à jour)? Je suis d'accord avec ta vision> répare-la à la racine. thx –

Questions connexes