Question

Je travaille sur un script PHP qui fait un appel API vers un site externe. Cependant, si ce site ne sont pas disponibles ou les temps de demande, je voudrais que ma fonction return false.

Je l'ai trouvé suivante, mais je ne suis pas sûr sur la façon de le mettre en œuvre sur mon script, depuis que je l'utilise « file_get_contents » pour récupérer le contenu de l'appel de fichier externe.

temps d'exécution Limite d'une fonction ou commande PHP

   $fp = fsockopen("www.example.com", 80);
if (!$fp) {
    echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info['timed_out']) {
        echo 'Connection timed out!';
    } else {
        echo $res;
    }

}

(De: http://php.net/manual/ fr / function.stream-set-timeout.php )

Comment vous adresse cette question? Merci!

Était-ce utile?

La solution

<?php
$fp = fsockopen("www.example.com", 80);

if (!$fp) {
    echo "Unable to open\n";
} else {
    stream_set_timeout($fp, 2); // STREAM RESOURCE, NUMBER OF SECONDS TILL TIMEOUT
    // GET YOUR FILE CONTENTS
}
?>

Autres conseils

Je vous recommande d'utiliser le cURL famille de fonctions PHP. Vous pouvez ensuite définir le délai d'attente en utilisant curl_setopt() :

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2); // two second timeout

Cela entraînera la fonction curl_exec() pour revenir FALSE après le délai d'attente.

En général, en utilisant cURL est mieux que l'une des fonctions de lecture de fichiers; il est plus fiable, a plus d'options et ne sont pas considérés comme une menace pour la sécurité. Beaucoup de désactiver la lecture sysadmins de fichiers à distance, donc l'utilisation cURL rendra votre code plus portable et sécurisé.

A partir du manuel PHP pour file_get_contents (commentaires):

<?php 
$ctx = stream_context_create(array( 
    'http' => array( 
        'timeout' => 1 
        ) 
    ) 
); 
file_get_contents("http://example.com/", 0, $ctx); 
?>
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 4);
if ($fp) {
    stream_set_timeout($fp, 2);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top