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?
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'];
}
?>
$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