Es muy extraño, ¿alguien ha resuelto alguna vez una conclusión?¿Qué directorios verifica PHP cuando incluyen una ruta relativa con include()?
A veces también comprueba el directorio del archivo incluido.
Pero a veces no.
D: \ test \ 1.php
<?php
include('sub\2.php');
D: \ test \ 2.PHP
<?php
include('3.php');
Dónde 3.php
se encuentra en el mismo directorio que 2.php
.
Los trabajos anteriores, pero ¿por qué? El directorio actual debe ser D:\test
, pero aún se pueden encontrar 3.php, que está en D:\test\sub
Más historia (última)
Sobre una hace años me encontré con este problema, y luego terminé arreglado con el hardcoding, como a continuación:
Common.php:
if (file_exists("../../../Common/PHP/Config.inc"))
include('../../../Common/PHP/Config.inc');
if (file_exists("../../Common/PHP/Config.inc"))
include('../../Common/PHP/Config.inc');
if (file_exists("../Common/PHP/Config.inc"))
include('../Common/PHP/Config.inc');
if (file_exists("Common/PHP/Config.inc"))
include('Common/PHP/Config.inc');
Dónde Config.inc
está en el mismo directorio que Common.php
¡Buena pregunta! Puedo confirmar esto en Windows y Linux. No tengo idea de por qué es esto. –
Con respecto a su último ejemplo, si "Config.inc" está en el mismo directorio que "Common.php", esto podría simplificarse para 'include (dirname (__ FILE __). '/ Config.inc');' - esto siempre trabajo, independientemente de 'include_path' y del archivo" Common.php "incluido en. Si no existe la posibilidad de que se encuentre "Config.inc" en el 'include_path' (en el que a menudo se incluye el directorio actual), entonces simplemente podría llamar' include 'Config.inc'; ', aunque esto posiblemente sea menos eficiente ya que el 'include_path' se busca primero (que falla). – MrWhite
En su primer ejemplo, supongo que "D: \ test \ 2.php" debería ser "D: \ test \ sub \ 2.php"? (De lo contrario, 'include ('sub \ 2.php');' nunca funcionaría.) – MrWhite