# Pb sur plusieurs arguments

**URL:** <https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714 "2016-02-21T22:09:20Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/1 "2016-02-21T22:09:20Z")

</div>

bonjour

j’ai realise un script sh qui doit creer une table puis créer un fichier  
le script doit recevoir 2 arguments. sur un terminal en faisant sh [script.sh](http://script.sh) arg1 arg2 cela marche parfaitement

par contre si je passe par une page php cela ne fonctionne pas une seule variable passe  
je suis connecté en root  
je ne comprends pas

script php

```auto

```

script bh

`#!/bin/bash
base=$1
basi=$2
appel des variables : ${basi}.txt
`

merci de votre aide

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/2 "2016-02-21T22:09:20Z")

</div>

C’est un peu court comme description du problème… Tes variables $arg1 et $arg2 existent-elles et sont-elles correctement remplies du côté de PHP ?  
Peux-tu nous fournir un exemple complet minimal ?

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/3 "2016-02-21T22:09:21Z")

</div>

Avec ça c’est pas mieux ?

```auto
$res=exec('sh test.sh '.$arg1.' '.$arg2');
```

J’ai fait très peut de PHP il y a longtemps …

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/4 "2016-02-21T22:09:23Z")

</div>

J ai déjà testé les deux réponses et ça ne prend pas  
Pour la première j ai fait un echo après mon exec. Les variables st bien présentes  
Pour la deuxième j ai testé aussi avec “’.$arg1.’” Et ça ne prend pas

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/5 "2016-02-21T22:09:23Z")

</div>

Essaye [mono]$res=exec(“sh [test.sh](http://test.sh) $arg1 $arg2”);[/mono]

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/6 "2016-02-21T22:09:23Z")

</div>

Déjà essayé  
Faut il enregistre le script php dans un type de fichier particulier (ansi, …)

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/7 "2016-02-21T22:09:23Z")

</div>

Normalement non.  
Si je comprend bien avec un ça marche mais pas deux variable ?

Essaye [mono]$res=exec(‘sh [test.sh](http://test.sh) “{$arg1}” “{$arg2}”’);[/mono]  
Si le safe mode est on, je crois que tu peux uniquement utiliser le [test.sh](http://test.sh) qui est dans le même répertoire que ton php qui execute ce exec, s’il est ailleurs il risque de pas fonctionner.

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/8 "2016-02-21T22:09:23Z")

</div>

Je dis ça des que je rentre. Ils st dans le même répertoire

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/9 "2016-02-21T22:09:24Z")

</div>

ca ne marche pas je suis desespere

avec vous des scripts qui marche avec plusieurs variables que j’essaie de mon coté ?

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/10 "2016-02-21T22:09:25Z")

</div>

Essaye d’utiliser un array, qui contiendrait plusieurs argument.

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/11 "2016-02-21T22:09:25Z")

</div>

Comment ferais tu stp  
J avoue pour ça je gere pas très bien

---

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/12 "2016-02-21T22:09:26Z")

</div>

Au lieu des variables normale (arguments) tu met la variable array.

`$arguments = array('argument un ', 'argument deux ', 'argument trois');
$res=exec("sh test.sh $arguments");`(ou il faut utiliser simple quote au lieu double, j’ai pas fait du php depuis longtemps)  
Il te faudra mettre un espace à la fin d’argument, pour que les arguments ne collent pas.

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/13 "2016-02-21T22:09:26Z")

</div>

j’ai trouvé en faisant ca

[code]putenv(“FILENAME=$arg1”);  
putenv(“FILE=$arg2”);

$output = exec(‘sh [test.sh](http://test.sh)’);[/code]

[code]#!/bin/bash  
base=$FILENAME  
basi=$FILE

echo “CREATE DATABASE ${base}” | mysql -uroot -ppass;  
echo “CREATE DATABASE ${basi}” | mysql -uroot -ppass;

sudo echo -e"texte a mettre" \>\> $FILE.conf[/code]

les deux tables sont bien créés et pas le fichier conf

une idée ?

---

<div class="post-metadata">

**Author:** ![flavien](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/f475e1/32.png) [@flavien](https://www.debian-fr.org/u/flavien)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/14 "2016-02-21T22:09:28Z")

</div>

Si tu veux un retour complet du [exec](http://php.net/manual/fr/function.exec.php), ajoute un deuxième argument qui contiendra toute la sortie de ton script bash. Il sera sous forme d’un tableau.  
Pour la création des bases, essaye comme ceci :

```auto
mysql -uroot -ppass -e "CREATE DATABASE ${base}"
```

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/15 "2016-02-21T22:09:28Z")

</div>

Merci  
Et pour la création de fichier avec écriture que conseille tu ?

---

<div class="post-metadata">

**Author:** ![flavien](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/f475e1/32.png) [@flavien](https://www.debian-fr.org/u/flavien)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/16 "2016-02-21T22:09:31Z")

</div>

Rien je t’avoue, car ta ligne est correcte.  
Je l’ai testé en local et le fichier est bien créé.  
Est-ce que le user qui exécute le script à le droit d’écriture dans le dossier ?

EDIT : Ah, j’avais pas vu le sudo =\> tu ne peux pas l’utiliser si le script php n’est pas utilisé en cli. Est-ce le cas ?

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/17 "2016-02-21T22:09:31Z")

</div>

J ai testé avec ça marche  
Le script marché avec putty pas depuis le script php

---

<div class="post-metadata">

**Author:** ![flavien](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/f475e1/32.png) [@flavien](https://www.debian-fr.org/u/flavien)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/18 "2016-02-21T22:09:39Z")

</div>

Alors ajoute le deuxième argument à exec et affiche le résultat ici.  
Ajoute ceci dans ton php pour cela :

```auto
$output = exec('sh test.sh', $resultat);
var_dump($resultat);
```

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/19 "2016-02-21T22:09:40Z")

</div>

```auto
$oko = "merci";

$oki = "azert";

$arguments = array(''.$oko.'', ''.$oki.'');
$res=exec("sh test.sh $arguments");
var_dump($arguments);
```

resultats :

```auto
array(2) { [0]=> string(6) "merci " [1]=> string(8) "azert" } 
```

---

<div class="post-metadata">

**Author:** ![Derfurs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/48db29/32.png) [@Derfurs](https://www.debian-fr.org/u/Derfurs)\
**Post date:** [Février 21, 2016, 10:09 UTC](https://www.debian-fr.org/t/pb-sur-plusieurs-arguments/67714/20 "2016-02-21T22:09:40Z")

</div>

j’ai enfin trouvé

l’erreur vient de la

```auto

```

qu’il faut ecrire comme ca

```auto

```
