PHP MVC项目LibraryController引入User.php提示无此文件或目录错误如何解决
问题根因
- PHP解析
../这类相对路径时,基准是PHP进程的当前工作目录,而非编写引入代码的文件本身所在位置。常规MVC项目多为单入口设计,工作目录默认是入口文件(如public/index.php)所在目录,你新创建的LibraryController存放的目录层级,和其他可以正常引入User类的控制器层级不一致,导致同一个相对路径../model/User.php解析出来的实际地址不同,找不到对应文件。 - 常见场景参考:其他控制器均存放在
项目根目录/controller/下,你将新控制器放在了项目根目录/controller/[子目录]/下,此时../回退一级后到达的是controller目录而非项目根目录,自然找不到同级的model目录,触发你收到的文件不存在报错。
修复方案
- 最稳妥的方案是使用绝对路径引入:在项目入口文件中定义根目录常量,例如在入口文件中添加代码
define('APP_ROOT', dirname(__DIR__));,后续所有文件引入统一写为include APP_ROOT . '/model/User.php';,完全规避相对路径的层级差异问题。 - 临时修复可以先确认控制器存放层级:如果新控制器比其他正常控制器多了一级子目录,将引入代码改成
include('../../model/User.php');即可。 - 推荐使用框架自带的类自动加载机制加载
User类,无需手动编写引入语句,从根源避免路径错误。
内容的提问来源于stack exchange,提问作者Dipo Deen
相关产品推荐
相关产品推荐

