Cómo pasar variables por la línea de comandos en PHP como si fuera $_GET

Se me olvidó algo importante: ¿cómo trato una variable para pasársela a un archivo PHP por la línea de comandos como si fuera un parámetro GET?

Sí, pero hay que entender el truco: por línea de comandos no existe $_GET automáticamente porque no estás haciendo una petición HTTP. Si intentas ejecutar algo como php script.php?var=hola, PHP fallará al intentar abrir un archivo con ese nombre extraño.

El truco principal: parse_str y $_GET

La forma correcta es pasar argumentos a través de la línea de comandos y luego convertirlos. La opción más parecida a un GET es:

php script.php nombre=guillermo edad=54

Dentro del archivo script.php, puedes usar este código para que funcione casi como si viniera desde una URL:

Diagrama explicativo sobre el uso de argumentos en línea de comandos y superglobales en PHP
Visualización del proceso para pasar argumentos por CLI y convertirlos a $_GET usando parse_str.

Eso te deja $_GET funcionando, mostrando 'guillermo' y '54' por pantalla.

Opciones más simples

Si solo quieres pasar una variable, hay algo más directo usando el array nativo de PHP:

Fragmento de código mostrando la función parse_str en un entorno de desarrollo
Código PHP utilizando parse_str para poblar la superglobal $_GET desde $argv.

Aquí usas $argv directamente, que es lo más natural para el CLI.

Un enfoque híbrido inteligente

Mi recomendación sincera: si tu script solo se usa por consola, usa $argv o getopt(). Pero si quieres reutilizar el mismo código para que también funcione en la web, entonces el truco de parse_str es elegante.

Puedes crear un script híbrido:

Salida de terminal con código PHP ejecutándose en diferentes modos
Ejemplo de un script PHP híbrido que cambia su comportamiento según el entorno usando php_sapi_name().

Esto es muy cómodo para cron jobs y scripts de mantenimiento.

Sinopsis visual del código

Terminal mostrando el resultado de pasar una sola variable al script PHP
Método alternativo usando $argv directamente para acceder a argumentos simples.

Puedes ver cómo los argumentos se procesan en la consola y cómo el código adapta su comportamiento según si está corriendo en un entorno web o de línea de comandos.