Passer plusieurs variables PHP shell_exec()?
Je suis d'appel test.sh à partir de PHP shell_exec méthode.
$my_url="http://www.somesite.com/";
$my_refer="http://www.somesite.com/";
$page = shell_exec('/tmp/my_script.php $my_url $my_refer');
Cependant, le script de ligne de commande dit qu'il n'a reçu 1 argument: l' /tmp/my_script.php
Quand je change l'appel à:
Code:
$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}');
Il affirme qu'il a reçu 3 arguments, mais l'argument argv[1] et argv[2] sont vides.
Quand je change l'appel à:
Code:
$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"');
Le script reçoit enfin tous les 3 arguments comme prévu.
Avez-vous toujours simplement d'envoyer le texte cité avec le script et ne sont pas autorisés à envoyer une variable comme $var? Ou est-il une manière particulière, vous devez envoyer un $var?
Vous devez vous connecter pour publier un commentaire.
Il est nécessaire d'envoyer les arguments avec le quota de sorte que vous devriez l'utiliser comme:
print_r($_POST);
pour obtenir les paramètres.Changement
$page = shell_exec('/tmp/my_script.php $my_url $my_refer');
à
$page = shell_exec("/tmp/my_script.php $my_url $my_refer");
OU
$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"');
Assurez-vous également d'utiliser
escapeshellarg
sur vos valeurs.Exemple:
$
variables enroulé autour de guillemets doubles ("
).Variables de ne pas interpoler à l'intérieur d'une seule chaîne de caractères entre guillemets. En outre, vous devriez assurez-vous que vos arguments sont échappées.
Changement
à
Alors vous code tolère les espaces dans le nom de fichier.
$my_url
et$my_refer
de chaîne.Vous pourriez trouver
sprintf
utile ici:Vous devriez certainement utiliser
escapeshellarg
comme il est recommandé dans les autres réponses, si vous n'êtes pas de la fourniture de l'entrée.J'ai eu de la difficulté avec ça, donc j'ai pensé partager mon extrait de code.
Avant
Après
L'ajout de la
{}
supports, c'est ce qu'il fixe pour moi.Aussi, pour confirmer
escapeshellarg
est également nécessaire.Sauf script nécessaires: