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 :

[Système] exec() ne renvoie pas la sortie du programme


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Par défaut [Système] exec() ne renvoie pas la sortie du programme
    Salut,

    Je cherche à récupérer la sortie d'un programme (l'affichage pas la valeur de retour) mais je rencontre quelques difficultés. Certainement un problème d'environnement...

    Je suis sous FreeBSD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [adm@box ~]$ echo $TERM
    xterm-color
    Mes tentatives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    exec('/usr/local/bin/ffmpeg -i '.$video_file, $output);
    print_r($output);
    Renvoie un tableau vide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exec('sh -c /usr/local/bin/ffmpeg -i '.$video_file, $output);
    print_r($output);
    Renvoie la sortie et ne tient pas compte des arguments..

    J'ai essayé avec différentes fonctions natives de PHP: system, shell_exec.. Rien n'apporte sa solution.

    PS: Je ne veux pas utiliser les fonctions popen, proc_open pour des raisons de performances.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Par défaut
    Le problème venait du fait que la sortie était une erreur et donc renvoyée sur le descripteur 2 (STDERR).

    Une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    exec('/bin/cmd 2>&1 >/dev/null', $output);
    return $output;
    Une autre solution avec les fonctions proc (donc compatible PHP >= 5.0.0):

    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
     
    function getStderrOutput($cmd) {
     
    	$output = '';
     
    	$fd = array(2 => array('pipe', 'r'));
     
    	$process = proc_open($cmd, $fd, $pipes, NULL);
     
    	if (is_resource($process)) {
     
    		while(!feof($pipes[2])) {
    			$output .= fgets($pipes[2]);
    		}
     
    		proc_close($process);
    	}
     
    	return $output;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Réponses: 1
    Dernier message: 06/11/2008, 12h27
  3. [Système] exec recuperation de la sortie
    Par xian21 dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2008, 11h30
  4. Réponses: 3
    Dernier message: 05/12/2007, 14h27
  5. [Système] loadLibrary ne marche pas mais Load oui
    Par fredericL dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/05/2004, 15h32

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