thinkphp8的{include}标签必须用模板目录路径:推荐{include file="/public/header"}从view根目录引入;传参需字符串键值对如title="首页";静态资源须用{__static__}/css/app.css绝对路径。

直接用 include 或 require 最简单、最可控,不依赖框架、不绕路、不踩路径坑。
PHP原生 include/require 怎么写才不报错
这是最底层也最可靠的方式,适用于任何 PHP 项目(非框架或自建轻量结构)。
- 路径必须是服务器文件系统路径,不是 URL 路径;
include 'header.php'默认从当前执行脚本所在目录找,极易出错 - 推荐用
__DIR__拼接:例如include __DIR__ . '/common/header.php';,明确指向项目内固定位置 - 不要写
../common/header.php这类相对路径——一旦入口脚本位置变了(比如从index.php改成admin/index.php),就全挂 -
require比include更稳妥,失败直接中止执行,避免渲染出半截页面
ThinkPHP 的 {include} 标签为什么总找不到文件
ThinkPHP 的 {include} 不是 PHP 的 include(),它只认模板目录下的路径,且规则特殊。
- 错误写法:
{include file="header.php"}或{include file="../common/header"}→ 报 404 或静默失败 - 正确写法只有三种:
{include file="public/header"}(相对当前模板)、{include file="admin@public/header"}(跨模块)、{include file="/public/header"}(绝对路径,从view/根开始) - 传参只能字符串键值对:
{include file="public/header" title="首页" is_login=1},不能传数组字面量或变量表达式 - 被包含的
header.html里写的<link href="css/app.css">会按当前 URL 解析,不是按模板路径——静态资源路径乱,不是{include}的锅,是 HTML 相对路径机制导致的
Phpcms 和其他 CMS 的 template 语法怎么用
Phpcms、Destoon 等老派 CMS 多用 {template '模块名','文件名'},本质是模板编译时替换,不是运行时包含。
- 路径基于模板目录结构:
{template 'content','header'}表示加载/templates/default/content/header.html - 大小写敏感,且模块名必须真实存在;如果写成
{template 'default','header'}但实际没default模块,就会提示is not exists! - 修改后必须清空缓存(后台点“更新缓存”或删
cache/template/下对应文件),否则永远看不到新内容 - 不支持传参,如需动态数据,得在控制器里
$this->assign()后再引入,或改用{php}include...{/php}嵌入原生 PHP
纯 HTML 页面怎么复用 header/footer
没有服务端解析能力时,iframe 和 jQuery.load() 是仅有的可行方案,但各有硬伤。
-
<iframe src="header.html"></iframe>:语义错误、SEO 友好性差、高度自适应难、样式隔离导致调试麻烦 -
$(".header").load("header.html");:依赖 jQuery、首屏空白、CSP 策略可能拦截、header.html 里不能有,只能放片段 - SSI(
<!--#include file="header.shtml"-->):需要服务器开启 SSI、文件扩展名强制为.shtml、Nginx 默认不支持,Apache 需配置Includes模块 - 真正干净的方案是构建时处理(如 Vite + html插件、Webpack html-webpack-plugin),但这就超出“怎么包含”的原始范畴了
最容易被忽略的一点:所有服务端包含方式(include、{include}、{template})都要求被包含文件本身是合法的 PHP/HTML 片段,不能带重复的 或 ——否则浏览器解析会混乱,控制台报 DOM 错误,但你可能根本想不到是头部文件多写了标签。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











