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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; [...] }
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?
Partager