IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] proc_close en php4


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut [Tableaux] proc_close en php4
    Bonjour,

    Je fonctionne avec php 4.3

    Je lance un processus avec proc_open :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    $descriptorspec = array(
    			   0 => array("pipe", "r"),  // // stdin est un pipe où le processus va lire
       			1 => array("pipe", "w"),  // stdout est un pipe où le processus va écrire
       			2 => array("pipe", "w") 
    			);
     
    			$cwd = '/tmp';
    			echo "\non lance commande : $cmd \n";
    			$process1 = proc_open($cmd.' &', $descriptorspec, $pipes);
    			if (is_resource($process1)) {
    				$stdin = $pipes[0];
               	$stdout = $pipes[1];
               	$stderr = $pipes[2];
               	$outw=false;
     
               while (! feof($stderr) || ! feof($stdout))
               {
               	if(! feof($stderr)){
     
               		echo "Erreur :".fgets($stderr);
               		echo "\n";
               		echo "On sort\n";
               		$outw=true;
               	}
               	if(! feof($stdout)){           		
               		/*echo "sortie :".fgets($stdout);
               		echo "\n";*/
               		;
               	}
               	if($outw)
               		break;           		
               }/**/
    				echo "Fermeture de stdin...";
               fclose($pipes[0]);
               echo "OK\nFermeture de stdout...";
               fclose($pipes[1]);
               echo "OK\nFermeture de stderr...";
               fclose($pipes[2]);
               echo "OK\n";           
     
    				echo "Fermeture du processus $status...";				
               $exit_code = proc_close($process1);
               echo "OK\ncode de sortie : ".$exit_code."\n";

    Ce code est censé stoper l'execution d'un processus dès qu'on lit quelque chose sur la sortie des erreurs.

    Mon problème c'est que si je lance

    proc_open($cmd,..;

    Sans le '&'

    Les fclose fonctionne mais le proc_close reste bloquée jusqu'a ce que l'application finissent.

    Avec le '&'

    Les fclose sont ok, on passe dans le pclose le script php fini , mais problème je fais un ps et je vois toujours la commande tourner en arrière plan!

    Pour m'en sortir je vais faire un trux salle en lancant un
    ps -aux | grep $cmd
    puis parser le résultat pour récupérer le pid puis le killer avant de finir le script mais je préfèrerai une solution plus propre.

  2. #2
    Membre éprouvé Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut
    En efft, la fonction proc_close libère le script et laisse tourné en arrière plan le processus.

    Je vous propose le script suivant tiré de : http://ch2.php.net/manual/en/function.proc-close.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function proc_close_nobug($proc)
    {
        $status = proc_get_status($proc);
        exec('kill '.$status['pid'].' 2>/dev/null >&- >/dev/null');
        proc_close($proc);
    }
    ?>

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/05/2007, 17h23
  2. [Tableaux] Foreach renvoie des valeurs double en php4
    Par Dantahoua dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2007, 17h49
  3. [Tableaux] erreur suite passage php4 à php5
    Par taka10 dans le forum Langage
    Réponses: 1
    Dernier message: 22/02/2007, 16h43
  4. [Tableaux] Équivalent de scandir pour php4 ?
    Par ozzmax dans le forum Langage
    Réponses: 8
    Dernier message: 24/01/2007, 15h11
  5. [Tableaux] php4 tableau asso de class
    Par XtofRoland dans le forum Langage
    Réponses: 6
    Dernier message: 10/02/2006, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo