Diferencia entre include() y require() y como solventar el problema de las rutas
En PHP existen dos métodos para importar ficheros en otros ficheros, estas funciones se irá haciendo comunes a medida que un proyecto crece y se requiere trocear el código en diferentes archivos o librerías. Estas funciones son include() y require().
La diferencia entre ellas es mínima, solo que include() lanzará un warning cuando no encuentre el fichero a importar, mientras que require() lanzará un error y cortará la ejecución del script. Por ello se recomienda utilizar include() para ficheros que no sean críticos a diferencia de utilizar require() para ficheros que sean indispensables para el funcionamiento de la aplicación.
Otro problema que se puede llegar a encontrar cuando haces inclusiones de ficheros es que insertes varias veces el mismo. Para ello PHP lo soluciona ampliando las funciones explicadas con include_once() y require_once().
Solucionar problemas derivados de las rutas
Otro problema que empieza a surgir cuando se hacen inclusiones de archivos con require() e include() es que cuando disponemos de un proyectos con diferentes niveles, es decir, con una distribución en carpetas, podemos caer en fallo de incluir las rutas de forma relativa por lo que si llamas a un fichero con estas funciones de forma relativa («../ruta/mifichero.php») puedes llevarte un error al estar en diferente nivel.
Para ello te recomiendo que cuando hagas las inserciones de ficheros utilices la variable $_SERVER[‘DOCUMENT_ROOT’] que te devuelve la ruta absoluta del directorio raíz.
Te dejo además un script muy útil para que lo pongas en un fichero prueba.php y lo dejes caer en tus diferentes directorios y pruebes si estas haciendo bien los requiere/include:
<? $ruta = $_SERVER['DOCUMENT_ROOT'] . '/tu-fichero-que-quieres-insertar.php'; echo $ruta; echo "<br>"; //require($ruta); try { if (! @include_once( $ruta )) // @ - to suppress warnings, throw new Exception ($ruta.' include fail'); // o tambien puedes: if (!file_exists($ruta )) throw new Exception ($ruta.' file not exist'); else require_once($ruta ); } catch(Exception $e) { echo "Message : " . $e->getMessage(); echo "Code : " . $e->getCode(); } ?> |