php中include与require的核心区别是错误处理方式:include出错发警告并继续执行,require出错抛致命错误并中止脚本;两者均运行时加载、共享当前作用域、支持多种路径形式,且return可中断包含流程并返回值;_once版本防重复加载,推荐用__dir__拼接绝对路径以避免路径归一化问题;开发时需开启错误显示,注意权限与open_basedir限制,__dir__与require_once组合是安全最佳实践。

PHP 中 include 和 require 的核心区别在于错误处理方式:出错时 include 发出警告(E_WARNING)并继续执行,require 抛出致命错误(E_COMPILE_ERROR)并中止脚本。
include 和 require 的加载时机与作用域
两者都在运行时动态加载文件,不是编译时解析;加载的代码直接在当前作用域中执行,意味着被包含文件里的变量、函数、类会“注入”到当前上下文中。
-
include和require都支持相对路径、绝对路径和 URL(需开启allow_url_include,不推荐) - 被包含文件中定义的函数,可以在包含后立即调用;但若该文件被多次
include,函数重复定义会报Fatal error: Cannot redeclare - 如果被包含文件中有
return语句,它会中断包含流程,并把返回值作为include/require表达式的返回值(例如:$val = include 'config.php';)
include_once 和 require_once 防重复加载
当多个文件都可能包含同一个库(比如 database.php),直接用 include 容易触发“函数已声明”或“类已存在”错误;这时必须用 _once 版本。
-
include_once和require_once会记录已加载的文件路径(基于真实路径,不是字符串字面量),后续相同路径的调用会被跳过 - 注意:软链接、
./和../等写法可能导致路径归一化失败,建议统一用__DIR__ . '/lib/helper.php'这类绝对路径写法 - 性能上,
_once有轻微开销(需查哈希表),但远小于重复解析和执行带来的风险,生产环境应无条件使用
常见错误现象与排查要点
很多“找不到文件”或“白屏”问题,其实不是语法错误,而是路径或权限导致的静默失败。
立即学习“PHP免费学习笔记(深入)”;
-
Warning: include(file.php): failed to open stream: No such file or directory:检查getcwd()当前工作目录,它不一定是当前文件所在目录;优先用__DIR__拼接路径 - 使用
require加载失败后整个页面空白:因为致命错误导致后续输出(包括错误提示)被阻断;开发时务必开启display_errors = On和error_reporting = E_ALL -
include返回false但没报错:说明文件存在但读取失败(如权限不足、SELinux 限制、open_basedir 被限制),可用is_readable()提前判断 - 包含文件里用了
exit或die:会导致主脚本意外终止,这种控制流应尽量避免,改用异常或返回状态码
路径处理和错误级别控制是实际项目中最容易被忽略的两个点,尤其在部署到不同环境时,__DIR__ 和 require_once 组合几乎成了 PHP 文件包含的最小安全单元。










