¿Cuál es una forma elegante de incluir archivos raíz en PHP?

Echemos un vistazo a algunos de los líderes de la industria para ver cómo hacen las cosas y ver si podemos identificar una tendencia.

WordPress

Comencemos con WordPress. Este es el CMS más popular en la web, según las estadísticas de uso web de las tecnologías CMS, por lo que al menos le dará una respuesta común.

WordPress / WordPress en GitHub:

  / ** Carga el entorno y la plantilla de WordPress * /
 require (dirname (__FILE__). '/wp-blog-header.php');

Laravel

Laravel es uno de los framework PHP de propósito general más populares (si no el más popular) en la web, de acuerdo con ¿Por qué es tan popular Laravel? Laravel debe gran parte de su éxito a su facilidad de uso, baja curva de aprendizaje y estilo elegante. Entonces, veamos cómo manejan este problema.

laravel / laravel en GitHub:

  $ app = require_once __DIR __. '/ .. / bootstrap / app.php';

Magento 2

Magento 2 es una de las plataformas de comercio electrónico basadas en PHP más populares disponibles en la web, de acuerdo con Ocho razones detrás de la popularidad del desarrollo de Magento 2.

magento / magento2 en GitHub:

  requiere __DIR__.  '/../app/bootstrap.php';

Para llevar

Si configurara alguno de estos sistemas, vería que por defecto usan un archivo PHP en la raíz del sistema con rutas identificadas a través de una consulta de URL. Cuando se usa junto con la configuración del servidor (Apache, Nginx, etc.), puede ocultar la parte “/index.php?” De la URL. El resultado es que puede proporcionar la impresión de una ruta URL sin tener un archivo en esa ubicación.

Entonces, para responder a sus preguntas de seguimiento:

  1. “¿Cómo funcionan __DIR__ y dirname(__FILE__) ?” Como su nombre indica, esto toma el nombre del directorio del archivo actual y lo devuelve como una cadena. Si escribe esta línea en ./index.php en la raíz de la ruta de su servidor web, siempre le dará la ruta absoluta a la raíz de su servidor web. Si accede a los archivos a través de ./index.php , en lugar de al revés, puede evitar este problema por completo.
  2. “¿Dónde escribo __DIR__ o dirname(__FILE__) en el código?” Lo escribe en el archivo ./index.php y luego ./index.php archivos en función de la URL. Parece que está tratando de hacer esto al revés, y esto está haciendo que su código sea más complicado de lo que debe ser.

TL; DR: Siga los consejos de los gigantes de la industria y ./index.php todo su tráfico a través de ./index.php . Sí, tiene que saber dónde vive ese archivo (en relación con todos los demás archivos en su sitio), pero la alternativa es perseguir su cola durante días para que pueda implementar un sistema objetivamente inferior o recurrir a este intento técnica verdadera de todos modos. Siempre puede embellecer sus URL a través de los archivos de configuración de su servidor más adelante.

Cuando hago referencia a imágenes, casi siempre hago algo como esto:

logo

Esa es una ruta de archivo relativa, pero comienza en el directorio público raíz del sitio. De esa manera, siempre hace referencia a la misma ubicación, sin importar en qué directorio termine ese fragmento de código. Si no comenzara con ese “/”, sería una ruta de archivo relativa pero la ubicación dependería de qué directorio estabas en el momento. Podría funcionar bien cuando esté en /index.php, pero si eso se mueve a / contact /, la ruta del archivo se rompe porque la carpeta de imágenes está en la raíz, no en / contact /.

Cosas de sentido común.

Pero esto se vuelve un poco más complicado cuando se trata de un lenguaje del lado del servidor como PHP. También puede hacer incluye con PHP como este:

Debido a que no comienza con un “/”, sufre el mismo problema que sufrió nuestro ejemplo de imágenes. Si ese código de inclusión se mueve a un directorio diferente, la referencia puede romperse. Pero con PHP, simplemente usar ese principio “/” no funcionará , lo que puede ser muy confuso.

El problema es que PHP puede ver un poco “más profundo” en el sistema de archivos de su servidor que HTML.

Para recuperar esta funcionalidad y tener rutas de archivos relativas que no cambien, use este bit de inteligencia de PHP:

$ ruta = $ _SERVER [‘DOCUMENT_ROOT’];
$ path. = “/common/header.php”;
include_once ($ ruta);
?>

He pasado días investigando en Internet y no puedo encontrar la respuesta que pueda entender y que pueda implementar.

Tengo el sitio web en el que quiero usar los archivos include_once y poder ver el sitio web correctamente tanto en localhost como en el servidor real.

He usado $_SERVER['DOCUMENT_ROOT'] antes, pero no funciona en el host local, por lo que me resulta difícil actualizar y hacer los cambios en el sitio web.

Lo que quiero hacer es crear algún tipo de archivo config.php en el que pueda decirle que la carpeta raíz se llama htdocs o public_html y “comenzar” a buscar archivos desde allí.

¿O hay alguna otra forma de incluir rutas de trabajo?

He visto respuestas con, por ejemplo, dirname(__FILE__) , __DIR__ , etc., pero nunca explicaron cómo funcionaría, dónde escribirlo en el código, etc. Estoy un poco enfermo y cansado de encontrar parte de la respuesta y luego correteando en círculos, solo intenta “rellenar” los huecos. No soy un experto en PHP, solo trato de hacerme la vida un poco más fácil al usarlo.