2017-05-22 4 views
0

J'ai un fichier situé sur mon dossier racine web /lang.php, ce fichier a une classe appelée lang, cette classe comprend un fichier situé dans un dossier appelé inc: /inc/con.php.Comment puis-je vérifier si le fichier existe la même manière que require() fonctionne de la fonction?

Je peux inclure ce fichier à partir d'un autre fichier dans root, mais j'ai un autre fichier situé dans un sous-dossier appelé rep: rep/rep/rep.php, ce fichier contient le fichier lang.php, puis ouvre sa classe lang, cela échoue lorsque essayer d'inclure /inc/con.php.

enter image description here

J'ai essayé plusieurs façons de le faire, il semble que rep/rep/rep.php utilise son emplacement actuel lorsque inclut la classe sur /lang.php, donc, quand lang.php comprend /inc/con.php il ne peut pas trouver le dossier.

J'ai fait ces include/require tentatives à l'intérieur de la classe lang dans lang.php inclus de rep/rep/rep.php:

include(__DIR__."inc/con.php"); // fails 
include(__DIR__."../inc/con.php"); // works 
require(__DIR__."../inc/con.php"); // fails 
require(__DIR__."../../inc/con.php"); // works 
require("../inc/con.php"); // fails 
require("../../inc/con.php"); // works 

le second travaille, je ne sais pas pourquoi, mais si je change "include" à " exiger "il échoue!

J'ai fait quelques echos à l'intérieur de la classe lang (située dans /lang.php (toujours en cours inclus de rep/rep/rep.php)), l'obtention de ces résultats:

echo \__DIR__; 
// returns "/var/www/html/" 

donc, qui est l'emplacement actuel, cela est correct

echo require(__DIR__."../../inc/con.php"); 
echo implode(',<br>',get_included_files()); 
// returns "/var/www/html/inc/con.php" 

donc, ce fichier est le lieu absolu

if(file_exists(__DIR__."../../inc/con.php")) echo "exists"; 
else echo "not exists"; 
// returns "not exists" 

ce fichier n'existe pas, mais je peux l'inclure!

if(file_exists("../inc/con.php")) echo "exists"; 
else echo "not exists"; 
// returns "exists" 

Je ne peux pas l'inclure, mais il existe!

On dirait que la fonction file_exists() indique que le fichier se trouve dans "../inc/con.php", mais pour l'inclure, j'ai besoin d'utiliser "../../inc/con.php".

La prochaine échoue:

if(file_exists("../inc/cnxf.php")) require("../inc/cnxf.php"); 

Comment puis-je vérifier si le fichier existe la même façon que fonctionne la fonction require()?

+0

Ce qui se passe parce que vous n'utilisez pas '' namespaces' avec autoloading'. Rechercher dans la documentation de StackOverflow PHP et là vous avez beaucoup d'exemples à ce sujet. – matiaslauriti

Répondre