Pb sur plusieurs arguments

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 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

script bh

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

merci de votre aide

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 ?

Avec ça c’est pas mieux ?

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

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

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

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

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

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

Essaye [mono]$res=exec(‘sh test.sh “{$arg1}” “{$arg2}”’);[/mono]
Si le safe mode est on, je crois que tu peux uniquement utiliser le 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.

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

ca ne marche pas je suis desespere

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

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

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

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.

j’ai trouvé en faisant ca

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

$output = exec(‘sh 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 ?

Si tu veux un retour complet du exec, 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 :

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

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

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 ?

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

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

$output = exec('sh test.sh', $resultat);
var_dump($resultat);
$oko = "merci";

$oki = "azert";

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

resultats :

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

j’ai enfin trouvé

l’erreur vient de la

qu’il faut ecrire comme ca