# Transmettre variable de php à bash

**URL:** <https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399 "2016-02-21T19:36:36Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/1 "2016-02-21T19:36:36Z")

</div>

Bonjour, j’essai en vain de trouver pourquoi ma variable ne se transmet pas  
la table en question ne se charge pas si j’enléve .$\_POST[‘table’] a fin du bash, le script fonctionne.

```auto
echo$_POST['table']='agenda';

$output=shell_exec('sudo /home/justclo/public_html/SH/sauvgardesSQL.sh 2>&1' .$_POST['table']);  

echo '<pre><b>'.$output.'</pre>';[/code]

[code]export table=$1
ssh -Co CompressionLevel=9 -p 2223 root@monserveur.fr "mysqldump -uLOGIN -pPASS BASE $table" > /home/justclo/backup041118.sql
```

---

<div class="post-metadata">

**Author:** ![Zbf](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/e68b1a/32.png) [@Zbf](https://www.debian-fr.org/u/Zbf)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/2 "2016-02-21T19:36:37Z")

</div>

Simples remarques sur la forme:

> [@](#):
>
> echo$\_POST[‹&nbsp;table&nbsp;›]=‹&nbsp;agenda&nbsp;›;

> [@](#):
>
> $output=shell\_exec('sudo /home/justclo/public\_html/SH/sauvgardesSQL.sh 2\>&1’ y’a un espace là ou pas ? .$\_POST[‹&nbsp;table&nbsp;›]);

… tu espères que tes codes fonctionneront de cette façon ?

Puis on écrit sauvegarde, pas sauvgarde.

😛

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/3 "2016-02-21T19:36:37Z")

</div>

Bonjour,  
il y a bien un espace. Et oui j’ai espéré que ca fonctionne.  
mais malheureusement j’ai pas trouvé grand chose sur le net pour m’aider. c’est juste un probleme de syntaxe ?

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/4 "2016-02-21T19:36:37Z")

</div>

Ok, c’est trouvé pour une variable, La syntaxe est trés importante ,

```auto

```

Pour plusieurs variables comme ci-dessous en tout cas ca marche pas comme ca.

```auto

```

avec le sh ci dessous

`
base=$1
table=$1
ssh -Co CompressionLevel=9 -p 2223 root@monserveur.fr "mysqldump -uLOGIN -pPASS $base $table" > /home/justclo/backup041118.sql`  
C 'est un casse tete

---

<div class="post-metadata">

**Author:** ![Zbf](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/e68b1a/32.png) [@Zbf](https://www.debian-fr.org/u/Zbf)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/5 "2016-02-21T19:36:38Z")

</div>

Ouais enfin, “juste” un problème de syntaxe…

Ta 1ère ligne, ça fait un “echo” d’une assignation, pour moi ça renvoit «true»: “oui, j’ai bien réussi à faire l’assignation”.  
Donc était-ce vraiment le but de ton [mono]echo[/mono], je suis pas sûr.

Ensuite, tu t’es peut-être un peu perdu en mélangeant les langages, mais l’éxécution de:

```auto

```

… en shell, je crois que ça marchera pas.  
Tu ne peux pas passer tes arguments après avoir fait une redirection de flux.

* * *

Bon tu as posté entre temps…  
Ben là c’est pareil, tu multiplies les [mono]"[/mono] dans une même ligne, et à tous les coups les blocs sont mal découpés.

Ca peut t’aider de découper comme suit:

$commande = “sudo …”;  
$resultat = shell\_exec($commande);

… et d’utiliser un éditeur avec coloration syntaxique.

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/6 "2016-02-21T19:36:38Z")

</div>

J’utilise Jedit, faut que je regarde si y a pas quelques choses pour du bash

Pour une variable ca marche, maintenant.  
c’est pour deux que ca pose probleme. il mefaut juste la syntaxe pour y arriver.

la ligne avec les deux est envoyée vers le script sh, mais mysqldump ne charge que l’entete de la base sans contenu. c’est donc les variable qui ne sont pas bien transmise dans ce cas.

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/7 "2016-02-21T19:36:38Z")

</div>

> [@Zbf](#):
>
> Ta 1ère ligne, ça fait un «&nbsp;echo&nbsp;» d’une assignation, pour moi ça renvoit «true»: «&nbsp;oui, j’ai bien réussi à faire l’assignation&nbsp;».

Dans plein de langages, une assignation renvoie une référence vers la variable qui vient de recevoir la valeur, afin de pouvoir chaîner les assignations : [mono]x = y = z = 3[/mono] équivaut à [mono]z = 3 ; y = z ; x = y[/mono] ou, de manière plus générale : [mono]op(x = 3)[/mono] équivaut à [mono]x = 3 ; op(x)[/mono]  
Le comportement de PHP n’est pas différent, le [mono]echo[/mono] affiche bien [mono]agenda[/mono] après avoir fait l’assignation dans la variable.

> [@Zbf](#):
>
> Tu ne peux pas passer tes arguments après avoir fait une redirection de flux.

Si : [mono]echo \>&2 «&nbsp;sortie d’erreur standard&nbsp;»[/mono] ou même [mono]\>&2 echo «&nbsp;sortie d’erreur standard&nbsp;»[/mono]

[quote=«&nbsp;casimir&nbsp;»]`base=$1
table=$1
ssh -Co CompressionLevel=9 -p 2223 root@monserveur.fr "mysqldump -uLOGIN -pPASS $base $table" > /home/justclo/backup041118.sql`[/quote]  
Ici, [mono]base[/mono] et [mono]table[/mono] prennent toutes les deux la valeur du premier argument passé à ton script. Ce n’est certainement pas ce que tu veux…

`exec("sudo /home/justclo/public_html/facturier2/SH/sauvgardesSQL.sh ".$table." ".$base."" );``#!/bin/sh
table="$1" # premier argument
base="$2" # deuxième argument
...`  
N’oublie pas qu’en shell, les arguments ne sont pas des variables nommées mais des variables correspondant à la position des arguments sur la ligne de commandes.

---

<div class="post-metadata">

**Author:** ![Zbf](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/e68b1a/32.png) [@Zbf](https://www.debian-fr.org/u/Zbf)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/8 "2016-02-21T19:36:39Z")

</div>

Mon beau gourage aura eu le mérite de faire clarifier 😉

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:36 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/9 "2016-02-21T19:36:39Z")

</div>

Ben oui c’est idiot que j’ai ps essayer dans ce sens.

`base="$1"
table="$2"`  
Super éclaircissement !  
Grand MERCI

On peut aussi faire ca sans les quotes ?

`
base=$1
table=$2`  
ou ca , j’ai lu des trucs a droite a gauche, c’est du

`export base="$1"
export table="$2"`  
dans la doc de bash c’est pas trés clair pour moi. mais les 3 solutions fonctionnent.

Vous vous doutez bien que rien qu’avec ca j’ai énormément de travail du coup.

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:37 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/10 "2016-02-21T19:37:03Z")

</div>

On continu, puisque j’aurais pu fermer le sujet, mais voila que je veux transmettre une 4 eme variable ou argument dans la ligne de commande

et la recuperer en dans mon fichier .sh et l’utiliser comme condition

`
$update="1";
exec("sudo /home/justclo/public_html/facturier2/SH/sauvgardesSQL.sh ".$base." ".$table." SQL-".$_POST['nom']."-".$date." ".$update."" );`

```auto
export base="$1"
export table="$2"
export nom="$3"
export update="$4"

if[$update="1"]
then
mysql -hlocalhost -uLOGIN -pPASS $base < /home/justclo/SAUVSQL/$nom.sql
fi
```

Ca aurait du marcher , c’est assez simple en principe.

PS: le script fonctionne si j’enleve la condition !

---

<div class="post-metadata">

**Author:** ![Zbf](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/e68b1a/32.png) [@Zbf](https://www.debian-fr.org/u/Zbf)\
**Post date:** [Février 21, 2016, 7:37 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/11 "2016-02-21T19:37:03Z")

</div>

1. mets “$update” entre guillemets
2. sépare le “=” de ses opérandes par un espace
3. un espace également entre le if et le crochet.

---

<div class="post-metadata">

**Author:** ![casimir](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/f17d59/32.png) [@casimir](https://www.debian-fr.org/u/casimir)\
**Post date:** [Février 21, 2016, 7:37 UTC](https://www.debian-fr.org/t/transmettre-variable-de-php-a-bash/60399/12 "2016-02-21T19:37:04Z")

</div>

C 'est bien ca, faudra donc que je fasse attention a tout ca.

if[

et

if [

ou encore

$update=“1”

et

$update = “1”

c’est effectivement pas pareil (les espaces sont tres important).

Merci
