strip_tags remove otra incluir include_once ejemplo desde carpeta archivo php apache configuration

otra - remove html tags php



¿Cómo determinar programáticamente la raíz del documento en PHP? (6)

¿Por qué no exigir que su servidor web configure correctamente sus servidores?

este tipo de cosas tienden a permanecer en silencio en su código y nunca se eliminan (pero siguen activas) hasta que alguien finalmente arregle el servidor. Todo se romperá de nuevo.

O mueva sus cosas a un host que funcione. Si esto no funciona, quién sabe qué encontrarás a continuación.

Este es un problema con el que me he encontrado recientemente: un apache mal configurado en un servidor web. Esto significa que todos los scripts que dependen de $_SERVER[''DOCUMENT_ROOT''] rompen. La solución más fácil que he encontrado es simplemente configurar la variable en algunos archivos de inclusión globales que se comparten, pero es un dolor no olvidarlo. Mi pregunta es, ¿cómo determino la raíz correcta del documento programáticamente?

Por ejemplo, en un host, la configuración es la siguiente:

$_SERVER[''DOCUMENT_ROOT''] == ''/htdocs''

Las raíces reales del documento son:

test.example.com -> /data/htdocs/example.com/test www.example.com -> /data/htdocs/example.com/www

Y me gustaría un script que se ejecute desde www.example.com/blog/ (en la ruta /data/htdocs/example.com/www/blog ) para obtener el valor correcto de /data/htdocs/example.com/www .

En otro host, la configuración es un poco diferente:

$_SERVER[''DOCUMENT_ROOT''] == ''/srv'' test.example.com -> /home/virtual_web/example.com/public_html/test www.example.com -> /home/virtual_web/example.com/public_html/www

Hay alguna solución para esto? ¿O es la única forma de no confiar nunca en $_SERVER[''DOCUMENT_ROOT''] y reparar todo el software que estoy ejecutando en mis sitios? Reparar esto en el lado del servidor no parece ser una opción, todavía tengo que encontrar un host donde esto se haya configurado correctamente. Lo mejor que obtuve fue una raíz de documento que apuntaba a www.example.com, que al menos estaba dentro de open_basedir; usaban otro esquema de nombres, www.example.com apuntaría a /u2/www/example_com/data/www/ .


PHP debería establecer el directorio actual en el que está el script, de modo que, siempre que no esté roto, debería poder descifrar el documento raíz usando $_SERVER[''SCRIPT_FILENAME''] y getcwd() . (No puedo recordar todos los $ _SERVER vars de la parte superior de mi cabeza, podría haber algo en phpinfo () que sea más útil).


Esta es una de las razones por las cuales las personas extraen todo a través de bootstrap /index.php usando htaccess y / o cadenas de consulta. Puede usar el truco de nombre de dirname( __FILE__ ) indicado anteriormente y obtener la base pública de su aplicación de esa manera.

Si está demasiado lejos para cambiar a un único punto de entrada, una cosa que he visto hacer es tener un encabezado común en su script que recorre el árbol de directorios para buscar un archivo que sea único para el directorio base:

function findAppBase( $dir ) { if( file_exists( "$dir/unique_file.txt" ) ) { return $dir; return findAppBase( dirname( $dir ) ); } $base = findAppBase( dirname( __FILE__ ) );

Ese código no se ha probado, y podría haber una forma más sencilla de usar los vars en $_ENV o $_SERVER que harán lo que quieras ...


Basado en http://www.helicron.net/php/ :

$localpath=getenv("SCRIPT_NAME"); $absolutepath=getenv("SCRIPT_FILENAME"); $_SERVER[''DOCUMENT_ROOT'']=substr($absolutepath,0,strpos($absolutepath,$localpath));

Tuve que cambiar el truco basename / realpath porque devolvía una cadena vacía en mi host. En cambio, uso SCRIPT_FILENAME . Probablemente esto ya no funcione en IIS (pero los scripts originales que usaron la variable $ _SERVER probablemente tampoco).


En PHP5 existe la constante mágica __FILE__ que contiene la ruta absoluta del archivo en el que aparece. Puede usarlo en combinación con dirname para calcular la raíz del documento.

Puede poner una declaración como la siguiente en un archivo de configuración

define (''DOCUMENT_ROOT'', dirname(__FILE__));

Esto debería funcionar


No es necesario modificar todos los scripts.

Puede ejecutar el archivo PHP antes de ejecutar cualquier script usando auto_prepend_file .

$_SERVER es solo una matriz, puede modificarla y establecer $_SERVER[''DOCUMENT_ROOT''] correcto $_SERVER[''DOCUMENT_ROOT''] .