为什么该场景下使用PHP __DIR__拼接路径时需要写双层../?
问题原因
__DIR__返回的目录路径末尾不会自带目录分隔符,你打印得到的结果是C:\xampp\htdocs\zcron,而非带末尾斜杠的C:\xampp\htdocs\zcron\。直接拼接../zzz/db/config.php后得到的完整路径为C:\xampp\htdocs\zcron../zzz/db/config.php,系统无法识别zcron../这部分的层级跳转逻辑,因此报文件不存在错误。
你写两层../能正常运行属于路径解析的容错结果,并非正确写法,一旦目录结构变化就会再次出错。
正确解决方案
拼接路径时在__DIR__后补充目录分隔符即可,仅需一层../就能正常跳转:
<?php // 通用写法,Windows和Linux系统都兼容 require __DIR__ . '/../zzz/db/config.php'; // 也可以用PHP内置常量保证跨平台分隔符完全一致 require __DIR__ . DIRECTORY_SEPARATOR . '../zzz/db/config.php'; ?>
补充斜杠后拼接出的路径为C:\xampp\htdocs\zcron/../zzz/db/config.php,系统会正常解析为回退到zcron的上一级目录htdocs,再进入zzz/db目录读取配置文件,和你直接写相对路径require '../zzz/db/config.php'的逻辑完全一致。
内容的提问来源于stack exchange,提问作者user16357892
相关产品推荐
相关产品推荐

