Pas une réponse directe à votre question mais une meilleure solution je pense :
Si vous voulez que personne d'autre que cron n'exécute le script, placez-le simplement en dehors de la racine Web. De cette façon, il n'y a aucun accès via le serveur Web.
Si vous devez également exécuter la commande en tant qu'utilisateur spécial, n'utilisez pas GET
mais ayez une connexion utilisateur et recherchez une session connectée (une certaine variable de session définie...) et incluez le script dans cette page uniquement.
Votre script accessible au public ressemblerait à :
session_start();
if (isset($_SESSION['user']))
{
include '/path/to/script/outside/of/web-root';
}
else
{
die('No access.');
}
Le $_GET[]
&$_POST[]
les tableaux associatifs ne sont initialisés que lorsque votre script est appelé via un serveur Web. Lorsqu'il est invoqué via la ligne de commande, les paramètres sont passés dans le $argv
tableau, tout comme C.
Contient un tableau de tous les arguments passés au script lors de l'exécution à partir de la ligne de commande.
Votre commande serait :
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
Vous utiliserez alors parse_str() pour définir et accéder aux paramètres :
<?php
var_dump($argv);
/*
array(4) {
[0]=>
string(27) "/path_to_script/cronjob.php"
[1]=>
string(13) "username=test"
[2]=>
string(13) "password=test"
[3]=>
string(9) "code=1234"
}
*/
parse_str($argv[3], $params);
echo $params['code']; // 1234