Ingresé a mi servidor de desarrollo hoy para encontrar que PHP no pudo incluir algunos archivos con este mensaje E_WARNING:
Advertencia: include_once (../ file2.php) [function.include-once]: no se pudo abrir la secuencia: No existe dicho archivo o directorio en /var/www/web/some_directory_1/file1.php en línea lo que sea
Investigué un poco con nuestro administrador de sistemas y descubrimos que PHP solo falla cuando intenta incluir rutas de archivo con un '../' o './' en la ruta.
Supongamos que nuestra estructura de archivos se ve así:
/ var / www / web /
- index.php
- file2.php
- some_directory_1 /
---- file1.php
---- file3.php
Si file1.php quiere incluir file2.php, esto funcionará:
include_once('/var/www/web/file2.php');
Pero esto no lo hará:
include_once('../file2.php');
Ahora, espera un segundo ... ¡Sé lo que estás pensando! "Oh, su include_path es solo FUBAR". Bueno no exactamente.
Si haces esto en index.php, funciona:
include_once('some_directory_1/file1.php');
Y si haces esto en file1.php, también funciona:
include_once('file3.php');
Nuestro include_path está establecido en .:/usr/lib/php. Nada en el entorno del servidor ha cambiado en las últimas 24 horas (sin actualizaciones, sin software nuevo, sin cambios en las inclusiones, sin cambios en las configuraciones de Apache o PHP), yo y el administrador del sistema fueron las únicas personas que accedieron al servidor en el Las últimas 24 horas, y las inclusiones estaban funcionando bien ayer. Hemos agotado nuestra lista de posibles causas. ¿Alguna pista de lo que podría hacer que esto suceda?
Editar: Olvidé el mensaje de advertencia de PHP.
getcwd(), ¿tal vez algo está cambiando su directorio de trabajo? ¿Estás usando enlaces simbólicos? Los he visto confundir PHP.
include_once(realpath(dirname(__FILE__)."/../file2.php"));
/var/www/web?