PHP中使用include获取变量时,如何避免执行目标文件的跳转代码?
解决header.php跳转代码仅在首次访问时执行的问题
问题说明
需要从header.php获取变量到game.php,但使用include 'header.php'时,game.php会执行header.php中的header("refresh")跳转代码,希望仅在直接访问header.php页面时执行该跳转。
解决方案
方法1:判断当前执行的脚本文件名
通过$_SERVER['SCRIPT_NAME']判断当前是否是直接访问header.php,只有当脚本本身是header.php时才执行跳转:
修改后的header.php代码:
<?php $memory = "ahmed"; echo "Remember This Word : " . $memory; // 仅当直接访问header.php时触发跳转 if (basename($_SERVER['SCRIPT_NAME']) === 'header.php') { header("Refresh: 5; url= game.php"); } ?>
方法2:使用GET参数标记跳转状态
在header.php中检查是否携带特定GET参数,未携带时执行跳转并附加参数,避免include时重复跳转:
修改后的header.php代码:
<?php $memory = "ahmed"; echo "Remember This Word : " . $memory; // 未携带from_header参数时执行跳转 if (!isset($_GET['from_header'])) { header("Refresh: 5; url= game.php?from_header=1"); } ?>
game.php无需额外修改,include时会自动忽略该参数判断。
方法3:使用Session记录访问状态
通过Session标记是否已完成首次跳转,需要确保所有页面在使用Session前调用session_start():
修改后的header.php代码:
<?php session_start(); $memory = "ahmed"; echo "Remember This Word : " . $memory; // 未标记过访问状态时执行跳转 if (!isset($_SESSION['has_visited_header'])) { $_SESSION['has_visited_header'] = true; header("Refresh: 5; url= game.php"); } ?>
同时game.php需要在最顶部添加session_start()(原代码中使用了$_SESSION但未初始化):
<?php session_start(); // 添加这行初始化Session include "header.php"; if ($_SERVER["REQUEST_METHOD"] == "POST") { if($_POST['solution'] == "ahmed") { $_SESSION['username'] = $_POST['solution']; } else { echo "Try again"; } } if(isset($_SESSION['username'])) { echo "Well Done <br>"; echo '<a href="game.php"> Play again</a>'; } else { ?> <form action="" method="POST"> <input type="text" name="solution" id=""> <input type="submit" value="check"> </form> <?php } ?>
注意事项
- 使用
header()函数前确保没有任何输出(包括空格、HTML标签),否则会报错,若有必要可使用ob_start()和ob_end_clean()控制输出缓冲。 - Session方法需要确保所有涉及Session的页面都调用
session_start(),且放在脚本最顶部。
内容的提问来源于stack exchange,提问作者A-Saleh-86
相关产品推荐
相关产品推荐

