web-dev-qa-db-fra.com

Comment passer des paramètres dans un script PHP via une page Web?

J'appelle un script PHP à chaque chargement d'une page Web. Cependant, il existe un paramètre que le script PHP doit exécuter (que je passe normalement par la ligne de commande lorsque je teste le script).

Comment puis-je passer cet argument chaque fois que le script est exécuté lors du chargement de la page?

137
Nick

Vraisemblablement, vous transmettez les arguments sur la ligne de commande comme suit:

php /path/to/wwwpublic/path/to/script.php arg1 arg2

... puis en y accédant dans le script:

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

Ce que vous devez faire lorsque vous passez des arguments via HTTP (accès au script via le Web), est d'utiliser la chaîne de requête et d'y accéder via le superglobal $ _GET:

Allez à http://votredomaine.com/path/to/script.php?argument1=arg1&argument2=arg2

... et accès:

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

Si vous voulez que le script s'exécute, peu importe d'où vous l'appelez (en ligne de commande ou depuis le navigateur), vous souhaiterez un résultat similaire à celui-ci:

EDIT: Comme l'a souligné Cthulhu dans les commentaires, le moyen le plus direct de tester l'environnement dans lequel vous vous exécutez consiste à utiliser le PHP_SAPI constante. J'ai mis à jour le code en conséquence:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>
227
Jason
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

Si vous souhaitez que tout le script s'exécute, peu importe d'où vous l'appelez (en ligne de commande ou à partir du navigateur), vous souhaiterez obtenir le résultat suivant:

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

Pour appeler depuis la ligne de commande chmod 755 /var/www/webroot/index.php et utiliser

/usr/bin/php /var/www/webroot/index.php arg1 arg2

Pour appeler depuis le navigateur, utilisez

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
16
Ap.Muthu