web-dev-qa-db-fra.com

appeler exec sur un fichier php et passer des paramètres?

Je veux appeler un fichier php en utilisant exec .

Lorsque je l'appelle, je veux pouvoir passer une variable (un identifiant).

Je peux appeler echo exec("php /var/www/unity/src/emailer.php"); fin, mais dès que j'ajoute quelque chose comme echo exec("php /var/www/unity/src/emailer.php?id=123");, l'appel exec échoue.

Comment puis-je faire ceci?

14
Hailwood

Votre appel échoue car vous utilisez une syntaxe de style Web (?parameter=value) avec un appel de ligne de commande. Je comprends ce que vous pensez, mais cela ne fonctionne tout simplement pas.

Vous voudrez utiliser $argv à la place. Voir le manuel PHP .

Pour voir cela en action, écrivez cette ligne dans un fichier:

<?php print_r($argv); ?>

Puis appelez-le à partir de la ligne de commande avec des arguments:

php -f /path/to/the/file.php firstparam secondparam

Vous verrez que $argv contient le nom du script lui-même en tant qu'élément zéro, suivi de tous les autres paramètres que vous avez passés.

26
Chris Allen Lane

essayez echo exec("php /var/www/unity/src/emailer.php 123"); dans votre script, puis lisez le paramètres de ligne de commande

2
hakre

ce script adapté montre 2 façons de passer des paramètres à un script php à partir d'une commande php exec: CALLING SCRIPT

<?php 
$fileName = '/var/www/ztest/helloworld.php 12';
$options = 'target=13';
exec ("/usr/bin/php -f {$fileName} {$options} > /var/www/ztest/log01.txt 2>&1 &");

echo "ended the calling script"; 
?>

SCRIPT APPELÉ

<?php
echo "argv params: ";
print_r($argv); 
if ($argv[1]) {echo "got the size right, wilbur!  argv element 1: ".$argv[1];}
?> 

n'oubliez pas de vérifier les autorisations d'exécution et de créer un fichier log01.txt avec des autorisations d'écriture (votre utilisateur Apache sera généralement www-data).

RÉSULTAT

paramètres argv: Array

(

[0] => /var/www/ztest/helloworld.php

[1] => 12

[2] => target=13

)

a la bonne taille, élément Wilburargv 1: 12

choisissez la solution que vous préférez pour passer vos paramètres. Tout ce que vous avez à faire est d’accéder au tableau argv et de les récupérer dans l’ordre dans lequel ils ont été passés (le nom de fichier est l’élément 0).

tks @hakre

2
tony gil

Si vous voulez lui passer un paramètre GET, il est obligatoire de fournir un php-cgi binary pour l'invocation:

exec("QUERY_STRING=id=123 php-cgi /var/www/emailer.php");

Mais cela pourrait nécessiter davantage de fausses variables d'environnement CGI. C'est pourquoi il est souvent conseillé de réécrire le script appelé et de le laisser prendre les arguments de ligne de commande habituels et de les lire via $_SERVER["argv"].

(Vous pouvez également simuler le comportement php-cgi avec un interpréteur php normal et l'exemple ci-dessus en ajoutant parse_str($_SERVER["QUERY_STRING"], $_GET); au-dessus de votre script.)

1
mario