J'utilise url pour demander des URL distantes qui peuvent parfois être très lentes ou juste en baisse. Dans ce cas, mes scripts php attendent toujours la réponse, cela fait que apache a de nombreuses requêtes restent en mémoire puis surchargent. J'ai besoin d'un moyen d'arrêter curl demandant ou arrêter l'exécution de script PHP lorsque le temps spécifié passé. J'avais essayé declare(), cela n'a aucun sens pour curl. Quelqu'un peut-il savoir comment le résoudre?Comment arrêter une boucle tout en demandant ou arrêter le script PHP en cours d'exécution?
BTW: quel est l'effet de CURLOPT_CONNECTTIMEOUT et CURLOPT_TIMEOUT?
exemple de code est ici:
function http($url, $method, $postfields = NULL) {
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ci, CURLOPT_TIMEOUT, 5);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, 0);
switch ($method) {
case 'POST':
curl_setopt($ci, CURLOPT_POST, TRUE);
if (!empty($postfields)) {
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
}
break;
case 'DELETE':
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
if (!empty($postfields)) {
$url = "{$url}?{$postfields}";
}
}
curl_setopt($ci, CURLOPT_URL, $url);
$response = curl_exec($ci);
$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
$this->last_api_call = $url;
curl_close ($ci);
return $response;
}
Je mis le connecttimeout et le délai de 5 secondes, mais il ne marche pas workd. Curl passent encore beaucoup de temps pour terminer la requête, mais l'url sinon la réponse en 5s, ce qui signifie qu'il est en panne ou que la condition réseau est mauvaise, devrait l'arrêter.
La définition d'un délai est la solution courante. Quel est le problème avec 'CURLOPT_TIMEOUT'? Vous voudrez peut-être ajouter du code et une description de ce qui ne fonctionne pas si vous voulez de l'aide pour cela. –