如何修复PHP中的‘No such file or directory error’错误?附实际场景问题
看起来你遇到的核心问题是单引号导致变量未解析,以及对PHP文件路径和HTML路径的区别理解不清。让我一步步帮你解决:
为什么你的代码会报错?
你写的代码:
include('$_SERVER[DOCUMENT_ROOT]/KungFu/php/hours.php')
在PHP中,单引号包裹的字符串不会解析变量,所以$_SERVER[DOCUMENT_ROOT]并没有被替换成实际的服务器根目录路径,反而被当成了字符串的一部分。更糟的是,PHP会把DOCUMENT_ROOT当成一个未定义的常量,自动转换为字符串'DOCUMENT_ROOT',最终传递给include的是一个无效路径,这就是报错的根源。
正确的解决方案
方案1:使用双引号解析变量(推荐)
把单引号换成双引号,同时注意数组键要用单引号包裹,并用大括号明确变量边界,避免语法歧义:
include("{$_SERVER['DOCUMENT_ROOT']}/KungFu/php/hours.php");
这样PHP会正确解析$_SERVER['DOCUMENT_ROOT']为你的XAMPP根目录(也就是C:\xampp\htdocs),最终路径会变成C:\xampp\htdocs\KungFu\php\hours.php,完全匹配目标文件的位置。
方案2:使用相对路径(更简单)
因为你的index.php在主文件夹KungFu下,而hours.php在同级的php子文件夹里,直接用相对路径更省心,不需要依赖$_SERVER变量:
include('php/hours.php');
这个路径是相对于当前执行的index.php的位置,PHP会自动定位到KungFu/php/hours.php文件。
为什么HTML的标签路径能正常工作?
HTML中的/KungFu/php/hours.php是网站根路径,它对应的就是服务器文件系统中的DOCUMENT_ROOT/KungFu/php/hours.php,和PHP绝对路径的逻辑一致。但要注意:HTML路径是给浏览器使用的,而PHP的include路径是给服务器文件系统使用的,两者上下文不同,但最终指向同一个文件,所以标签能正常访问。
内容的提问来源于stack exchange,提问作者user12625513

