¿Configurar PHP Incluir ruta por sitio?
Pregunta
Puedo configurar la ruta de inclusión de PHP en el php.ini
:
include_path = /path/to/site/includes/
Pero luego otros sitios web se ven afectados y eso no sirve de nada.
Puedo configurar la inclusión de PHP al inicio de cada archivo:
$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
Pero eso parece una mala práctica y desordena las cosas.
Entonces puedo incluir eso y luego incluirlo en cada archivo:
include 'includes/config.php';
o
include '../includes/config.php';
Esto es lo que estoy haciendo ahora, pero la ruta de inclusión de config.php
cambiará dependiendo de lo que lo incluya.
¿Existe una mejor manera?¿Importa?
Solución
Si está utilizando Apache como servidor web, puede anular (si lo permite) la configuración usando .htaccess archivos.Ver el manual de PHP para detalles.
Básicamente pones un archivo llamado .htaccess en la raíz de su sitio web, que contiene algo de PHP ini
valores.Siempre que haya configurado Apache para permitir anulaciones, este sitio utilizará todos los valores en su configuración de PHP, + los valores que especifique en el .htaccess archivo.
Sólo se puede utilizar con
PHP_INI_ALL
yPHP_INI_PERDIR
tipo de directivas
como se indica en la página que vinculé.Si hace clic en la lista completa, verá que la ruta de inclusión es una PHP_INI_ALL
directiva.
Otros consejos
Erik Van Brakel dio, en mi humilde opinión, una de las mejores respuestas.
Además, si utiliza Apache y hosts virtuales, puede configurar inclusiones directamente en ellos.Con este método, no tendrás que acordarte de dejar los comandos php_admin en tu .htaccess.
Usar una php.ini archivo en sitio web raíz, si su configuración utiliza PHP como CGI (el caso más frecuente en hosts compartidos) con la misma sintaxis que en todo el servidor php.ini;ponerlo en .htaccess
si tienes PHP como módulo de Apache (haz un phpinfo()
si no está seguro):
php_value include_path "wherever"
Tenga en cuenta que por carpeta php.ini does
no afecta subcarpetas.
¿Por qué crees que agregar para incluir la ruta es una mala práctica?
Este código cerca de la parte superior del script raíz no debería ser tan malo...
$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());
En mi humilde opinión, la principal ventaja es que es portátil y compatible no sólo con Apache.
EDITAR:Vi un inconveniente de este método:pequeño impacto en el rendimiento.ver http://www.geeksengine.com/article/php-include-path.html
Dependiendo de cómo esté configurado su host, es posible que se le permita colocar un php.ini
archivo en la raíz de su directorio de inicio con directivas de configuración adicionales.
Su aplicación debe tener un archivo de configuración escrito en PHP.Luego inclúyalo con una página relativa en cada página del programa.Ese archivo de configuración tendrá una variable para la ruta al directorio de inclusión, al directorio de plantillas, al directorio de imágenes, etc.
Puedes configurar include_path
en su archivo php.ini también.Soy un experto en Perl, así que espero poder cargar inclusiones y tener include
hacer lo correcto.Tengo todas mis inclusiones en un directorio específico, que se agrega a include_path
.puedo hacer cosas como
require_once "ClassName.php";
No necesito preocuparme por rutas relativas o ubicaciones de archivos.
También he escrito el mío CustomRequire
hacer cosas como
function CustomRequire ($file) {
if(defined('MYINCLUDEPATH')) {
require_once MYINCLUDEPATH . "/$file";
} else {
require_once $file;
}
}
De esa manera puedo cambiar la forma en que hago las inclusiones en una fecha posterior.Por supuesto, aún necesitas encontrar una manera de incluir tu código de inclusión :)