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 : 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;
 
    [...]  
  }
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?