PHP不同页面出现全局Header/Footer提示对象丢失问题如何解决
解决方案
1. 统一文件包含路径(解决include引入报错问题)
- 首先定义项目根目录常量,所有文件包含都基于该常量使用绝对路径,避免相对路径受当前文件所在目录层级影响。
示例:如果你的includes、templates目录都在项目根目录下,可以先抽离公共初始化文件/includes/common.php,内容如下:<?php // 自动定位项目根目录(common.php存放在includes目录下,因此取上级目录为根目录) define('ROOT_PATH', dirname(__DIR__) . '/'); // 统一预加载header、footer变量,所有页面复用 ob_start(); include ROOT_PATH . 'includes/header.html.php'; $header = ob_get_clean(); ob_start(); include ROOT_PATH . 'includes/footer.html.php'; $footer = ob_get_clean(); - 所有业务页面开头先引入该公共文件:
根目录index.php:<?php include 'includes/common.php'; ob_start(); include ROOT_PATH . 'templates/main.html.php'; $output = ob_get_clean(); include ROOT_PATH . 'templates/layout.html.php';/Pages/about.php:
这样layout模板不需要任何修改即可全局复用,不会出现header、footer变量未定义的问题。<?php include dirname(__DIR__) . '/includes/common.php'; ob_start(); include ROOT_PATH . 'templates/about.html.php'; $output = ob_get_clean(); include ROOT_PATH . 'templates/layout.html.php';
2. 统一前端资源/链接路径(解决页面跳转、资源加载404问题)
header.html.php里所有的跳转链接、静态资源(css/js/图片)都使用站点根绝对路径,路径开头加/即可,不要用相对路径。
示例:
错误写法:<a href="index.php">首页</a>、<script src="js/common.js"></script>
正确写法:<a href="/index.php">首页</a>、<script src="/static/js/common.js"></script>
该写法会自动从域名根目录查找资源,不管当前页面在几级子目录下,路径都不会出错。
3. 关于目录结构的疑问
不需要把所有页面都移动到根目录,按照上述方案调整后,保留Pages目录存储二级页面完全可以正常运行。
内容的提问来源于stack exchange,提问作者plsfix
相关产品推荐
相关产品推荐

