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
.
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()?
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