include报E_WARNING警告并继续执行,require报E_COMPILE_ERROR致命错误并立即终止;开发用include快速验证,上线关键配置必须用require;定义函数类时须用_once防重复;路径务必用__DIR__拼绝对路径。

会报错,但“报错”的性质和后果完全不同——include 报的是 E_WARNING(警告),脚本继续执行;require 报的是 E_COMPILE_ERROR(致命错误),脚本立刻终止。
include 失败时为什么有时“看不见错误”?
PHP 8+ 默认关闭警告显示,include 找不到文件只会触发 E_WARNING,但浏览器不输出、控制台不打印,页面可能静默空白或部分渲染。你得主动检查错误日志,或者临时加这行:
error_reporting(E_ALL);
常见现象:
-
Warning: include(): Failed opening 'config.php' for inclusion—— 文件路径错、权限不足、大小写不符(Linux 下Config.php≠config.php) - 页面有内容但缺模块,比如导航栏消失、数据库连接失败却不报错 —— 很可能某个
include静默失败了 - 用
@include 'file.php';抑制警告后,连日志都不留痕迹,调试更难
require 和 include 的错误行为差异直接影响调试体验
初学者最常卡在“为什么脚本突然不输出了?”——往往就是把 include 写成 require,又恰好引入了一个拼错路径的文件:
立即学习“PHP免费学习笔记(深入)”;
require 'config.php';<br>echo "这行永远不会出现";
而换成 include:
include 'config.php';<br>echo "我还在运行"; // 这行仍会输出,只是日志里多一条警告
所以:
- 开发阶段快速验证逻辑?优先用
include,避免一个模板缺失导致整页挂掉 - 上线前必须确保关键配置加载成功?必须用
require,让问题在启动阶段暴露 - 定义了函数/类/常量?必须用
include_once或require_once,否则重复包含直接报Cannot redeclare my_function()
路径错是 include 失败的头号原因,不是“找不到文件”,而是“找错了地方”
PHP 的 include 默认基于当前执行脚本的目录(即 __DIR__)解析相对路径,不是 Web 根目录,也不是 CLI 当前工作目录。容易踩的坑:
- 写
include 'inc/header.php';,但当前脚本在/admin/index.php,而inc/其实在项目根目录下 → 应该写include __DIR__ . '/../inc/header.php'; - 误用
$_SERVER['DOCUMENT_ROOT']拼路径,却没确认它是否被 Web 服务器正确设置(某些 Nginx + PHP-FPM 组合下为空) - 用
include_once 'helper.php';和include_once './helper.php';—— PHP 视为两个不同路径,仍会重复加载报错 - 路径字符串里混入中文全角符号、多余空格或反斜杠
\(Windows 下也应统一用/)
最稳妥的做法始终是:用 __DIR__ 拼绝对路径,比如 include __DIR__ . '/config/database.php';。路径漂移问题就基本消失了。



















