如果 REQUIRE_ONCE 存在,HEADER 命令不起作用[重复]

Posted

技术标签:

【中文标题】如果 REQUIRE_ONCE 存在,HEADER 命令不起作用[重复]【英文标题】:HEADER command doest work if REQUIRE_ONCE exist [duplicate] 【发布时间】:2021-09-11 15:20:51 【问题描述】:

我正在编写一个代码来连接到 mysql 并检索登录信息。我使用 connect.php 来保存我在 login.php 中使用 require_once 获得的敏感数据:

<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
?> 

<?php
$checkMail= $_POST["email"];
$checkPwd= $_POST["password"];
$registration_status='Active';
require_once ('connect.php'); 
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) 
die("Connection failed, please retry later: " . $conn->connect_error);

$sql = "SELECT email, password, registration_type, registration_status, emailupdate FROM registration where  email='".$checkMail."'";
$result = $conn->query($sql);
if ($result->num_rows == 1) 
while($row = $result->fetch_assoc()) 
if ($row['registration_status'] == "Deactive") 
session_start();    
$_SESSION['error'] = "<b>This user name is deactivated. <br> Please create a new account.</b><span>";
header("Location: http://www.xxxxxxx//registration.php"); /* Redirect browser */ 

elseif (password_verify($checkPwd, $row['password'])) 
?> 

通过上面的方法,db 连接正常,但是没有执行 header 命令。如果我在 login.php 中删除 require_once 并直接添加 connect.php 的内容,那么就有

$checkMail= $_POST["email"];
$checkPwd= $_POST["password"];
$registration_status='Active';
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx"; 
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) 
die("Connection failed, please retry later: " . $conn->connect_error);

$sql = "SELECT email, password, registration_type, registration_status, emailupdate FROM registration where  email='".$checkMail."'";
$result = $conn->query($sql);
if ($result->num_rows == 1) 
while($row = $result->fetch_assoc()) 
if ($row['registration_status'] == "Deactive") 
session_start();    
$_SESSION['error'] = "<b>This user name is deactivated. <br> Please create a new account.</b><span>";
header("Location: http://www.xxxxxxx/registration.php"); /* Redirect browser */ 

header 命令处理正确,重定向成功。

header 和 require_once 不兼容?还是我错过了什么?

感谢您的支持

【问题讨论】:

当然,它们是兼容的。您还尝试过什么来解决问题?此外,请注意您的 SQL 查询对于 SQL 注入是广泛开放的。最好看看准备好的语句 $dbname = "xxx"; ?&gt; &lt;?php $checkMa 为什么要有结束标签和开始标签?如果那里有空格,它就是输出,你就有麻烦了:记住,header() 必须在发送任何实际输出之前调用,无论是通过普通的 html 标记、文件中的空行还是从 PHP。(来自manual) “还是我错过了其他东西?” - 听起来您可能错过了以一种对开发来说合理的方式配置 PHP 错误报告。否则,您会收到一条错误消息,告诉您发生了什么,并明确在哪里创建了第一个输出。 我不会关闭并重新打开标签。这些是 2 个不同的脚本:connect.php 包含第一个脚本,而 login 包含第二个脚本。第一个脚本是通过 require_once 命令调用的。无论如何,我会按照 Nico Haase 在第一个答案中的建议查看代码。 另外,在设置标题后使用exit 会有所帮助,只是为了强制停止脚本在那里 【参考方案1】:

Whitespace

标题不起作用,因为您打印了空格。删除此关闭/打开标签组合,然后重试。

【讨论】:

发布代码图片不好,将代码发布为文本(带有标记)就像制作和发布图片一样容易。 我不会关闭并重新打开标签。这些是 2 个不同的脚本:connect.php 包含第一个脚本,而 login 包含第二个脚本。无论如何,我会按照 Nico Haase 在第一个答案中的建议查看代码。

以上是关于如果 REQUIRE_ONCE 存在,HEADER 命令不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 文件确实存在但不能 require_once()

包括通过 require_once() 找不到的文件

PHP奇怪的洗牌与require_once和字符串数组

避免重定向循环

随机生成红包算法

PHP:require_once 和继承