diferencia entre $_SERVER en un terminal y navegador.

Buenas, estoy teniendo un problema al ejecutar un script php. Tengo esta línea de código en el script

require_once($_SERVER["DOCUMENT_ROOT"].'/informes/class/querys.php');


Cuando ejecuto el script por medio de un navegador no tengo problema alguno, y coge perfectamente el $_SERVER, pero si lo ejecuto por medio de la terminal, por medio del comando php, el require_once da fallo porque no coge el $_SERVER y la ruta para el require_once solo es
/informes/class/querys.php


¿Por qué ocurre esto?
La variable $_SERVER la rellena el servidor web (apache, nginx o el que tengas instalado) cuando llama al intérprete de PHP. Al ejecutarlo desde terminal te saltas el intermediario y por tanto está vacía.
Es tal y como comenta John_Wheel.

Hay varias opciones para lo que quieres hacer: lo más sencillo sería o bien utilizar directorios relativos, o bien definir una ruta base en un archivo config que se importe allá donde se necesite. Para cosas pequeñas dicho archivo de configuración es suficiente, y es algo que utilizo normalmente, siempre tengo una estructura mínima porque los scripts pueden crecer; pero si uno quiere hacer algo grande, lo mejor es siempre utilizar un framework.

Un saludo.
2 respuestas