Est-ce que c'est bon? pour exec

Est-ce que c'est bon? pour exec - PHP - Programmation

Marsh Posté le 11-07-2006 à 23:00:59    

Bonjour je souhaiterais executer un programme a l'aide de cette ligne de commande:
/home/httpd/vhosts/server3.zefox.info/httpdocs/bin/sc_trans_root sc_trans_root.conf
 
Et dans mon script php j'ai:
exec('".$chemin."/bin/sc_trans_".$user." sc_trans_".$user.".conf');
 
chemin = /home/httpd/vhosts/server3.zefox.info/httpdocs
user = root
 
j'ai essayer de remplacer les ' par des " mais rien du tout.. merci de votre aide :]


Message édité par foxyfox le 11-07-2006 à 23:03:30
Reply

Marsh Posté le 11-07-2006 à 23:00:59   

Reply

Marsh Posté le 12-07-2006 à 00:13:42    

Pourquoi tu voulais qu'il se passe quoi?

Reply

Marsh Posté le 12-07-2006 à 11:19:40    

Bah que sa execute, mais il ne se passe rien

Reply

Marsh Posté le 12-07-2006 à 11:28:34    

Si tu t'attendais que ça ouvre un programme à l'ecran je ne pense pas que ça fonctionnera. Il l'affichera à Php mais pas à toi. C'est pas toi qui executer le programme mais php donc le programme répond à php. Si par contre le programme fait une tache interne tu pourras le voir que ça été executé de plus tu peux le vérifier dans la liste des processus s'il est présent.

Reply

Marsh Posté le 12-07-2006 à 11:51:11    

Non je voulais dire que mes " ' étaient bon parce que il ne se passe rien quand je l'execute, il n'y a pas de PID au nom de sc_trans_root quand je fais ps aux sous le ssh.

Reply

Marsh Posté le 12-07-2006 à 12:08:00    

normalement il doit voir quoi linux point de vue syntaxe ?  
Si c'est le guillement qui te gene pour l'implenter utilise la fonction chr(numero du caractère).  

Reply

Marsh Posté le 12-07-2006 à 12:12:18    

Code :
  1. exec('".$chemin."/bin/sc_trans_".$user." sc_trans_".$user.".conf')


s'nawak :D

Code :
  1. exec("$chemin/bin/sc_trans_$user sc_trans_$user.conf" )


zou on en parle plus!


Message édité par anapajari le 12-07-2006 à 12:12:33
Reply

Marsh Posté le 12-07-2006 à 12:21:05    

mmhh mouais c'est pas très pro c'est une technique de vieux renard mais bon ça marchera.

Reply

Marsh Posté le 12-07-2006 à 12:21:34    

C'est bon j'ai trouver la solution miracle ( enfin :p ).
  exec("".$chemin."sc_trans_".$user." ".$chemin."sc_trans_".$user.".conf" );

Reply

Marsh Posté le 12-07-2006 à 12:22:06    

Ah une autre solution :D merci

Reply

Marsh Posté le 12-07-2006 à 12:22:06   

Reply

Marsh Posté le 12-07-2006 à 12:22:58    

Berceker United a écrit :

mmhh mouais c'est pas très pro c'est une technique de vieux renard mais bon ça marchera.


Euh ... pourrais tu developper s'il te plait?
Tu compteras ces " et ' dans la commande qu'il passe a exec et tu te rendras compte que ces concaténations sont à l'ouet.
Maintenant en quoi ma technique est "pas pro" ou "de vieux renard", je suis assez curieux [:mlc][:mlc][:mlc]

Reply

Marsh Posté le 12-07-2006 à 12:33:32    

anapajari a écrit :

Euh ... pourrais tu developper s'il te plait?
Tu compteras ces " et ' dans la commande qu'il passe a exec et tu te rendras compte que ces concaténations sont à l'ouet.
Maintenant en quoi ma technique est "pas pro" ou "de vieux renard", je suis assez curieux [:mlc][:mlc][:mlc]


Juste le $_user qui est present à l'intérieur de la chaine. c'est en ça que je disais que c'était pas pro. Ne le prend pas mal man  [:negueu]

Reply

Marsh Posté le 12-07-2006 à 12:36:12    

Dite moi c'est possible de recuperer le numéro de PID du programme lors de l'execution svp?

Reply

Marsh Posté le 12-07-2006 à 13:21:34    

Berceker United a écrit :

Juste le $_user qui est present à l'intérieur de la chaine.


Et??? En quoi c'est pas pro je m'interroge toujours.
Si tu me sors que la ligne du dessous est plus "pro", je t'avertis d'avance que je vais me marrer...

Code :
  1. $str = $var1." ".$var2."\n";


 
 

Berceker United a écrit :

c'est en ça que je disais que c'était pas pro. Ne le prend pas mal man  [:negueu]


Je le prends pas mal je suis juste curieux :o
 

foxyfox a écrit :

Dite moi c'est possible de recuperer le numéro de PID du programme lors de l'execution svp?


Lire la doc, c'est marqué dans les commentaires http://fr.php.net/function.exec :

Code :
  1. $pid=exec("tacommande > /dev/null & echo \$!" );


Reply

Marsh Posté le 12-07-2006 à 13:30:55    

anapajari a écrit :

Et??? En quoi c'est pas pro je m'interroge toujours.
Si tu me sors que la ligne du dessous est plus "pro", je t'avertis d'avance que je vais me marrer...

Code :
  1. $str = $var1." ".$var2."\n";




Non mais ça c'est d'la bombe de balle[:negueu].
 

Code :
  1. $str = $var1.chr(32).chr(32).$var2.chr(13);


Reply

Marsh Posté le 12-07-2006 à 13:41:11    

Berceker United a écrit :

Non mais ça c'est d'la bombe de balle[:negueu].

Code :
  1. $str = $var1.chr(32).chr(32).$var2.chr(13);



C'est marrant comme tu réponds toujours pas à ma question  [:roane]  
ça m'interesserait vraiment de savoir pourquoi c'est pas "pro", histoire que je sache pourquoi je ne dois plus faire comme ça
 

Reply

Marsh Posté le 12-07-2006 à 13:59:29    

anapajari a écrit :

C'est marrant comme tu réponds toujours pas à ma question  [:roane]  
ça m'interesserait vraiment de savoir pourquoi c'est pas "pro", histoire que je sache pourquoi je ne dois plus faire comme ça


Plusieurs raison :

  • - C'est une question de lisibilité. Imagine que tu as une grosse chaine de caractère avec des variables à l'intérieurs. Ton éditeur va pas les isoler et pour toi tous un bloque sera concidéré comme étant un chaine non variable se qui est faux.  
  • - En terme performance (tres minim je l'avoue) il est préférable de jouer sur la concaténation car avec les guillemets php s'attend a ce qu'il y ait une variable et que c'est le cas il est obliger d'utiliser une mecanisme différent en gros il est fait l'équivalent d'un eval() dans la chaine.  
  • - C'est pas logique de taper ceci  
Code :
  1. $str = "Toto à une vache qui s'appelle $nom";

 
Une chaine c'est autre chose. Il est préférable de faire ceci :

Code :
  1. $str = 'Toto à une vache qui s'appelle '.$nom;


  • - Je prétend pas connaitre tous les languages mais de ce que je connais seul php accepte de faire ce genre de chose. Si jamais tu passes sur une autre language ça risque de te faire drole et tous naturelement tu vas coder de façon plus générique.


Voila  :D
 
un article sur ce sujet !

Message cité 1 fois
Message édité par Berceker United le 12-07-2006 à 14:02:21
Reply

Marsh Posté le 12-07-2006 à 14:30:12    

Berceker United a écrit :

Plusieurs raison :

  • - C'est une question de lisibilité. Imagine que tu as une grosse chaine de caractère avec des variables à l'intérieurs. Ton éditeur va pas les isoler et pour toi tous un bloque sera concidéré comme étant un chaine non variable se qui est faux.

Après en terme de lisibilité, pour moi c'est fonction de ce que tu as à écrire.
Prenons la phrase l'élélphant $x et l'écureuil $y s'adorent
Avec concaténation:

Code :
  1. $str = 'L\'éléphant'.$x.' et l\'ecureuil '.$y.' s\'adorent'


Avec "parse":

Code :
  1. $str = "L'éléphant $x et l'écureuil $y s'adorent";


Franchement laquelle est plus lisible.
Pour l'éditeur ça dépend lequel tu utilises [:spamafote] Vi vit ça très bien par exemple. Après c'est sur que sous notepad :o

Berceker United a écrit :

  • - En terme performance (tres minim je l'avoue) il est préférable de jouer sur la concaténation car avec les guillemets php s'attend a ce qu'il y ait une variable et que c'est le cas il est obliger d'utiliser une mecanisme différent en gros il est fait l'équivalent d'un eval() dans la chaine.

Ce n'est plus vrai depuis quelques temps déjà, la version php4.2 ayant nivellé la différence.
Tu vas me dire "oui mais regarde l'exemple sur les 3 millions de ligne dans l'article en bas", et je te répondrais "Le jour ou on te demande d'afficher 3 millions de ligne dans une page web, change de métier".
edit: tu trouveras 400 pages web disant un truc et son contraire sur ces benchmarks de toute façon
 

Berceker United a écrit :

  • - C'est pas logique de taper ceci  
Code :
  1. $str = "Toto à une vache qui s'appelle $nom";

 
Une chaine c'est autre chose. Il est préférable de faire ceci :

Code :
  1. $str = 'Toto à une vache qui s'appelle '.$nom;



Je ne vois pas où intervient la logique :)
C'est deux façons différentes d'écrire la même chose, après chacun ces gouts, si ce n'est que tu as oublié de backslasher le guillement de "s'appelle" et que du coup ça plante
 

Berceker United a écrit :

  • - Je prétend pas connaitre tous les languages mais de ce que je connais seul php accepte de faire ce genre de chose. Si jamais tu passes sur une autre language ça risque de te faire drole et tous naturelement tu vas coder de façon plus générique.

PHP étant le fils illégitime de PERL, ce comportement sur les chaines provient surement de la ( j'ai la flemme de vérifier ( afin je sais que c'est pareil en PERL) ). Chaque langage a effectivement ces spécificités.  
L'absence de typage des variables en php t'empêche d'avoir un code "générique", le fait de devoir concatener des chaines de caractères n'arrive que loin loin derrière.
 


Les exemples sont complètement foireux dans cet article...
Je les reprends "à ma sauce":

Code :
  1. $i='titre du lien';
  2. echo "<p><a href='#' class='test' onclick='rien();'>$i</a></p>";
  3. echo '<p><a href=\'#\' class=\'test\' onclick=\'rien();\'>'.$i.'</a></p>';


Et l'argument sur la "libisibité" est inversé [:spamafote]
 
Ma morale c'est que, les deux solutions sont possibles et sensiblement identiques en terme de performance. Autant choisir celle qui est le plus adaptée au besoin. Mais en aucun cas l'une ou l'autre n'est plus "pro" ou plus "vieux renard".
La vraie problématique c'est d'apprendre aux gens les différences entre ' et " ...


Message édité par anapajari le 12-07-2006 à 14:38:51
Reply

Marsh Posté le 12-07-2006 à 14:40:55    

La derniere solution est totalement réglé a partir du moment ou les parametres sont identifié par des guillements. Personnellement, je n'aime pas travailler avec des variables présent dans une chaine de caractère car il faut rester logique, lisible. Comme je developpe sous plusieurs language je peux pas me permettre de laisser prendre cette voix. Franchement pour bien comprendre la problématique c'est de developper plusieurs language. Là ont abandonne très vite cette manière de faire.
Mais ceci reste que mon avis. Au boulot j'interdis qui que ce soit de faire ce genre de chose  (je contrôle les codes [:nico606])

Reply

Marsh Posté le 12-07-2006 à 16:59:46    

Y'a pas de bonne ou mauvaise solution absolue pour les quotes et simple quotes. PHP autorise les deux, alors utilisez la méthode qui vous plaît, et qui vous convient le mieux, stou! :o

Reply

Marsh Posté le 12-07-2006 à 17:41:48    

anapajari a écrit :

Et??? En quoi c'est pas pro je m'interroge toujours.
Si tu me sors que la ligne du dessous est plus "pro", je t'avertis d'avance que je vais me marrer...

Personellement, j'aurais tendance à dire qu'utiliser une méthode qui plante dés que t'as besoin de coler un caractére alphabétique juste derriére le contenu de ta variable n'est pas une méthode trés pro. En plus de ça, il y a le probléme des variables tableau à plusieurs niveau qui seront mal interprété ainsi que les variables objects qui risquent de ne pas l'être du tout. (c'est vrai que je n'ai jamais poussé le vice jusqu'a faire appel à une propriété d'un objet directement dans une chaine entre " )
 
A noter qu'en général, pour faciliter la relecture du code sur des projets moyen ou gros, on essaye de faire la même chôse de la même maniére partout dans le code et donc on évite les solutions du style "d'habitude, je fais comme ceci, mais là et là et là et ..., je peux pas alors je fais autrement".

Reply

Marsh Posté le 12-07-2006 à 20:05:22    

soulmanto a écrit :

Y'a pas de bonne ou mauvaise solution absolue pour les quotes et simple quotes. PHP autorise les deux, alors utilisez la méthode qui vous plaît, et qui vous convient le mieux, stou! :o


Non, si tu travailles en équipe. Il faut pas pensé pour soi-même, dans ses habitudes mais en terme de groupe même si php autorise. Mais, je n'impose pas mon point de vue je dis pourquoi il est préférable de. Après, chacun lave son linge avec le savon qu'il veut :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed