用 include 更合适,因模板是可选视图片段,缺失不应导致整页崩溃;require 会触发 E_COMPILE_ERROR 致白屏,include 仅报 Warning 且后续代码继续执行。

模板文件用 include 更合适
模板本质上是可选的视图层片段,缺失不该导致整个请求崩溃。比如页脚、侧边栏、广告位这些模块,即使 footer.php 临时被删或路径写错,主逻辑(如数据库查询、用户登录校验)仍应继续执行,只让对应区域空白或显示默认占位内容即可。
用 require 加载模板,一旦出错就是 E_COMPILE_ERROR,整页白屏,连错误提示都看不到——你根本收不到“页脚没加载成功”的信号,只能靠日志排查,开发调试成本陡增。
常见错误现象:
-
include 'header.php';报Warning: include(header.php): failed to open stream,但后续echo "欢迎回来";仍能输出 -
require 'header.php';同样报错,但后面所有 HTML 和 PHP 代码全被跳过,浏览器一片空白
include_once 不适合动态模板,别滥用
模板通常不定义函数或类,只是输出 HTML 片段,重复包含不会触发 Cannot redeclare 错误。强行加 _once 反而会埋坑:比如你在循环中渲染多个商品卡片,每个都 include_once 'card.tpl.php',结果只有第一个生效,后面全是空——因为 PHP 按文件路径字符串去重,第二次起直接跳过。
立即学习“PHP免费学习笔记(深入)”;
实操建议:
访问全球海洋潮汐模型。功能包括查询指定日期、时间和地点的潮高、潮汐极值及格点天气数据。
- 纯展示型模板(
header.php、sidebar.php)直接用include - 如果模板里混写了函数定义(极不推荐),才考虑
include_once,但更该做的是把逻辑抽离到独立lib/目录下,用require_once加载 - 避免在模板内做条件判断后多次
include同一文件,路径字符串稍有差异(如./footer.phpvsfooter.php)就会被当成两个文件重复加载
路径必须用 __DIR__ 构造绝对路径
相对路径在模板嵌套时极易漂移。比如 index.php 包含 views/list.php,而 list.php 又想 include 'header.php',这时它找的是 views/header.php,不是项目根目录下的 header.php。
正确写法统一用:
include __DIR__ . '/header.php'; include __DIR__ . '/partials/footer.php';
这样无论从哪一层调用,路径都稳定指向当前文件所在目录的同级位置。别信 include_path,它受 php.ini 约束,上线环境常被禁用,且优先级规则复杂,容易踩空。
PHP 8+ 默认不显示警告,include 失败可能静默发生
PHP 8 开始默认关闭 display_errors,include 找不到文件只会记日志,浏览器完全无感知。你看到页面“少了一块”,却找不到原因。
开发阶段务必确认:
- 在入口文件顶部加
error_reporting(E_ALL); ini_set('display_errors', '1'); - 检查 Web 服务器错误日志(如 Apache 的
error_log或 Nginx 的error.log) - 上线前把
include改成include file_exists($path) ? $path : die("Template missing: $path");做兜底(仅限关键模板)
最易被忽略的一点:模板路径拼接时漏了斜杠,__DIR__ . 'header.php' 会变成类似 /var/wwwhtml.php 这种非法路径,file_exists 都救不了——必须写成 __DIR__ . '/header.php'。


















