根本原因是PHP运行时工作目录并非编辑器显示的当前目录,而是Web服务器进程启动时设定的路径;应使用__DIR__获取当前文件绝对路径并统一定义ROOT_PATH来避免相对路径错误。

为什么 include 或 require 报 “No such file or directory”
根本原因不是文件不存在,而是 PHP 找路径时用的不是你眼睛看到的当前目录。Dreamweaver(DW)只是编辑器,不参与运行;真正执行的是 Web 服务器(如 Apache/Nginx)+ PHP 解析器,它们的当前工作目录是服务器进程启动时设定的(通常是 /var/www 或 C:\xampp\htdocs),不是你在 DW 里打开的项目根目录。
常见错误现象:require 'config.php'; 在 DW 里双击 HTML 能预览,但浏览器访问却报错;或者本地测试正常,上传到服务器就崩。
- 检查
getcwd()输出:在出问题的 PHP 文件开头加echo getcwd(); die();,看实际工作目录在哪 - 别依赖相对路径写法,比如
../inc/db.php—— 一旦被其他目录下的文件include,层级就全乱 - 用
__DIR__替代.或空字符串:它是当前文件所在目录的绝对路径,稳定可靠
__DIR__ 和 dirname(__FILE__) 有啥区别
没本质区别:__DIR__ 是 PHP 5.3+ 引入的魔术常量,等价于 dirname(__FILE__),但更简洁、性能略好(不用函数调用)。关键是它们都返回「当前 PHP 文件所在的绝对路径」,不受运行入口影响。
使用场景:统一定义项目根目录,避免跨多层目录时路径漂移。
立即学习“PHP免费学习笔记(深入)”;
- 推荐写法:
define('ROOT_PATH', __DIR__ . '/'); // 结尾带 /,方便拼接 - 加载配置:
require ROOT_PATH . 'config/database.php'; - 注意不要写成
__DIR__ . '/../config.php'—— 这种向上跳级依然可能出错,应确保所有路径都从一个稳定锚点出发
DW 里“实时预览”和浏览器访问路径行为不一致怎么办
DW 的“实时预览”默认用内置简易服务器或直接打开 file:// 协议,绕过真实 Web 服务环境,$_SERVER['DOCUMENT_ROOT'] 可能为空,__DIR__ 虽然可用,但 URL 路由、重写规则、session 配置等全失效 —— 它只适合看 HTML/CSS/JS 渲染,不适合调试 PHP 路径逻辑。
- 停用 DW 预览,改用本地环境访问:比如
http://localhost/myproject/index.php - 确认 Apache/Nginx 的
DocumentRoot指向你的项目根,且index.php是入口文件 - 如果必须用 DW 预览 PHP,需启用其“远程服务器”功能,并配置为通过 HTTP 访问(而非 file://),否则路径相关逻辑必然失准
上传到线上后路径突然失效的典型原因
本地开发用 XAMPP/MAMP,线上用 Linux 主机,大小写敏感性、路径分隔符、符号链接处理都不同。最常踩的坑是 Windows 下不区分 Config.php 和 config.php,Linux 上直接报错。
- 统一小写文件名和引用:把
require 'Core/Database.php';改成require CORE_PATH . 'database.php'; - 检查 FTP 上传模式:确保是“二进制”而非“ASCII”,否则某些文件可能损坏(尤其是含路径逻辑的配置文件)
- 线上禁用
display_errors时,错误被吞掉 —— 先在php.ini或入口文件加ini_set('display_errors', 1); error_reporting(E_ALL);看真实报错
路径问题的本质,是混淆了「编辑时的视角」和「运行时的上下文」。DW 不会改 PHP 的运行逻辑,它只负责写代码。真正要盯住的,永远是 __DIR__、getcwd() 和服务器的 DocumentRoot —— 其他都是幻觉。











