Éviter le max_execution_time avec un timeout?
Bonjour,
J'ai développé une classe qui dialogue via un socket avec un système comptable et il arrive quelquefois que j'atteigne le max_execution_time de PHP qui est par défaut de 30 secondes. Je pourrais bien sûr augmenter cette valeur avec set_time_limit() ce que j'ai fait temporairement mais je cherche à savoir si il est possible de spécifier un limite de temps à l'exécution d'une ligne de code après quoi il serait possible de gérer l'erreur plutôt que de laisser PHP tout arrêter et afficher son message d'erreur. Voici la fonction en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
function lire($keys = "") {
set_time_limit(60);
$info = stream_get_meta_data($this->handle);
$buffer = "";
$output = array();
stream_set_timeout($this->handle, 15);
do {
$lu = fgets($this->handle); //Ligne où le script s'arrête généralement
$verif = explode(",", $lu);
if((isset($verif[2]))&&($verif[2] == "ERR")) $this->error($verif[3]);
$info = stream_get_meta_data($this->handle);
}
while((strpos($lu, "Avantage - ") === false)&&(strpos($lu, "LOGIN,OK,") === false)&&(strpos($lu, "OK,END") === false)&&(strpos($lu, "OK,\"") === false)&&($buffer .= $lu));
$buffer .= $lu;
[...]
} |
Il arrive donc que l'exécution de la commande fgets() semble causer le problème. Comme si elle n'arrivait pas à lire la ressource ou si elle ne recevait pas ce qu'elle recherche. Le problème c'est que, comme je ne peut pas gérer l'erreur afin de permettre à mon script de revenir en arrière sur les actions exécutées avant l'échec de la requête, l'erreur laisse un travail à moitié accompli derrière elle.
Je recherche deux pistes de solution :
1 - Une meilleure façon de lire les plusieurs lignes renvoyées via le socket où je suis connectée.
OU
2 - Une façon de pouvoir gérer le délais d'exécution de fgets()
Quelqu'un peut m'aider?