No es una respuesta directa a su pregunta, pero creo que es una mejor solución:
Si desea que nadie, excepto cron, ejecute el script, simplemente colóquelo fuera de la raíz web. De esa manera no hay acceso a través del servidor web en absoluto.
Si también necesita ejecutar el comando como un usuario especial, no use GET
pero tenga un inicio de sesión de usuario y verifique una sesión iniciada (una determinada variable de sesión establecida...) e incluya el script solo en esa página.
Su script de acceso público se vería así:
session_start();
if (isset($_SESSION['user']))
{
include '/path/to/script/outside/of/web-root';
}
else
{
die('No access.');
}
El $_GET[]
&$_POST[]
las matrices asociativas solo se inicializan cuando su secuencia de comandos se invoca a través de un servidor web. Cuando se invoca a través de la línea de comando, los parámetros se pasan en el $argv
matriz, al igual que C.
Contiene una matriz de todos los argumentos pasados al script cuando se ejecuta desde la línea de comando.
Tu comando sería:
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
Luego usaría parse_str() para establecer y acceder a los parámetros:
<?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