Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2011, 04h17   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 2
Points : 2
Par défaut Executer un script shell

Bonjour,

Je connais la commande pour executer un script shell en PHP:
Code :
exec("ls", $output, $code);

Mon problème est que j'ai un script a exécuter un peu particulier, que voici:



Comme vous pouvez le voir, je tape (/opt/local/bin/gnubg) dans le shell et j'arrive dans une sorte d'interface ou je peux rentrer des commandes en rapport avec mon programme (gnubg ici).

Ce que je veux c'est pouvoir exécuter des commandes dans cette interface via php (par exemple exécuter "ma_commande").

J'ai donc essayé:
Code :
exec("/opt/local/bin/gnubg ma_commande", $output, $code);
mais "ma_commande" n'est pas prise en compte.


J'ai également essayé:
Code :
1
2
exec("/opt/local/bin/gnubg", $output, $code);
exec("ma_commande", $output, $code);
Même problème la première ligne marche, mais pas la seconde.

Est ce que j'ai été assez clair ? Est-ce possible ?
Merci d'avance.
gordonslondon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 11h47   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

J'ai jamais essayé mais fait un PIPE
Ouvre un pipe entre PHP et on programme et pousse les données en entrée dedans: http://php.net/manual/en/function.popen.php

Edit -- Celle là à l'air plus adaptée à tes besoins que popen:

http://www.php.net/manual/en/function.proc-open.php

Code :
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
 
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);
 
$cwd = '/tmp';
$env = array('some_option' => 'aeiou');
 
$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
 
if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt
 
    fwrite($pipes[0], '<?php print_r($_ENV); ?>');
    fclose($pipes[0]);
 
    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);
 
    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);
 
    echo "command returned $return_value\n";
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h46   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 2
Points : 2
Merci pour votre réponse.

J'ai donc mon processus ouvert mais je n'arrive toujours pas à envoyer mes commandes a l'interface.


Comment est ce que j'envoie des commandes à un shell interactif via php ?
gordonslondon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h50   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Avec fwrite, comme dans l'exemple cité plus haut.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h54   #5
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
sinon ya expect.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h40.


 
 
 
 
Partenaires

Hébergement Web