PHP引入include.php报不存在警告但代码运行正常如何解决
问题原因
你遇到的警告是因为base_html.php文件第2行引入include.php时使用了相对路径,PHP的相对路径解析规则是以当前执行的入口文件(也就是projects.php)的工作目录为基准,不是以被引入的base_html.php自身所在目录为基准,因此路径解析错误触发警告。
功能能正常运行的原因是你已经在projects.php的第一行成功引入过一次../include.php,数据库连接$conn已经被全局定义,后续就算base_html.php引入失败也不会影响已存在的连接变量,所以功能不受影响。
解决方法
你可以任选以下任意一种方案处理:
方案1:删除base_html.php里重复的include语句
既然已经在入口文件projects.php里成功引入了数据库连接文件,不需要再在base_html.php里重复引入,直接删掉base_html.php第2行的include('include.php')语句即可,这是最推荐的方案,避免重复加载。
方案2:修改base_html.php里的include路径为绝对路径
如果你确实需要在base_html.php里保留引入语句,把路径修改为基于文件自身位置的绝对路径即可,示例代码:
include __DIR__ . '/../include.php';
__DIR__常量会返回当前base_html.php文件所在的templates目录,拼接/../就可以定位到上一级的portfolio根目录,精准找到include.php文件。
方案3:临时屏蔽警告(不推荐)
如果不想修改现有代码逻辑,也可以在include语句前加错误控制符@临时屏蔽警告,不过不建议长期这么做,会隐藏真实的路径错误:
@include('include.php');
额外优化建议
Windows系统下的路径分隔符建议统一用斜杠/,不要用反斜杠\,避免后续跨平台部署出现兼容性问题,你现有的代码里include __DIR__ . "\display_html.php"可以改成include __DIR__ . "/display_html.php"。
内容的提问来源于stack exchange,提问作者Martin

