基于文件路径用PHP include实现Bootstrap5动态页面头部及修复
故障根源
代码失效和Bootstrap 5没有任何关系,是PHP版本升级带来的语法兼容问题:
- PHP 5.4.0及以上版本默认关闭了
register_globals配置,你旧代码里直接用的$PHP_SELF是早年PHP自动将$_SERVER数组元素注册为全局变量的旧写法,新版本里这个变量根本不存在,所有路径判断逻辑全部失效 - 原逻辑用
strstr做字符串匹配没有做路径边界校验,很容易出现相似路径误匹配的问题 - 原代码输出的HTML标签属性没加引号,不符合现代HTML规范,部分浏览器下会出现渲染异常
修复后可直接使用的代码
直接把你原来pageheader.php里的内容替换成下面的代码即可:
<?php // 基础配置项 可根据实际需求调整 $base_path = "/portfolio"; $img_common_attr = 'width="525" height="41" border="0" alt="页面头部"'; $current_path = $_SERVER['PHP_SELF']; // 按路径匹配对应头部内容 if (str_ends_with($current_path, "{$base_path}/about/index.php")) { echo '<h1>About Page Header HTML/CSS Here!</h1>'; } elseif (str_ends_with($current_path, "{$base_path}/index.php")) { echo 'Home Page Header Text Here'; } elseif (str_ends_with($current_path, "{$base_path}/design/index.php")) { echo "<img src=\"{$base_path}/images/header_design.jpg\" {$img_common_attr}>"; } elseif (str_ends_with($current_path, "{$base_path}/articles/index.php")) { echo "<img src=\"{$base_path}/images/header_articles.jpg\" {$img_common_attr}>"; } else { // 未匹配到规则时显示的默认头部 echo '<h1>Hello World.</h1>'; } ?>
后续维护说明
- 新增页面的专属头部时,只需要参照现有
elseif分支的格式新增匹配规则即可,不需要逐个修改站点内的页面文件,所有头部逻辑都集中在这一个文件里,改完全站生效 - 平时复用统一HTML/CSS结构只替换文字、图片的需求,直接在对应分支修改对应内容即可,写法和普通页面代码没有区别
- 如果你的服务器PHP版本低于8.0,不支持
str_ends_with函数,把代码里所有str_ends_with($current_path, 目标匹配路径)替换成strpos($current_path, 目标匹配路径) !== false就能正常运行
内容的提问来源于stack exchange,提问作者pjeigh
相关产品推荐
相关产品推荐

