Non è una risposta diretta alla tua domanda, ma penso che sia una soluzione migliore:
Se vuoi che nessuno tranne cron esegua lo script, posizionalo fuori dalla web-root. In questo modo non c'è alcun accesso tramite il server web.
Se devi eseguire il comando anche come utente speciale, non utilizzare GET
ma avere un login utente e verificare la presenza di una sessione di accesso (una certa variabile di sessione impostata...) e includere lo script solo in quella pagina.
Il tuo script pubblicamente accessibile sarebbe simile a:
session_start();
if (isset($_SESSION['user']))
{
include '/path/to/script/outside/of/web-root';
}
else
{
die('No access.');
}
L'$_GET[]
&$_POST[]
gli array associativi vengono inizializzati solo quando lo script viene richiamato tramite un server web. Quando vengono richiamati tramite la riga di comando, i parametri vengono passati nel $argv
array, proprio come C.
Contiene un array di tutti gli argomenti passati allo script durante l'esecuzione dalla riga di comando.
Il tuo comando sarebbe:
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
Dovresti quindi utilizzare parse_str() per impostare e accedere ai parametri:
<?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