Luego de consultar expertos en esta materia, programadores de diversas áreas y profesores hemos dado con la solución a la pregunta y la compartimos en esta publicación.
Solución:
los $_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
arrayigual que c.
Contiene un array de todos los argumentos pasados al script cuando se ejecuta desde la línea de comandos.
Su comando sería:
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
Luego usaría parse_str() para configurar y acceder a los parámetros:
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
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 secuencia de comandos de acceso público sería algo como:
session_start();
if (isset($_SESSION['user']))
include '/path/to/script/outside/of/web-root';
else
die('No access.');
* 3 * * * /path_to_script/cronjob.php?username=test&password=test&code=1234
Esto no funcionará
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
Esto funciona
Además, debe usar la función parse_str () y obtener valor
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
Sección de Reseñas y Valoraciones
Nos encantaría que puedieras dar difusión a este artículo si lograste el éxito.