【发布时间】:2016-09-22 08:45:51
【问题描述】:
找到答案了,看看下面我的答案。
我有两个文件。
1) 1.php
2) 2.php
1.php执行,调用创建用户的函数(sql语句-插入)后,重定向到2.php
这是1.php文件的流程
<?php
ob_start(); // Output buffuring enabled, to be able to output before the call of header()
session_start(); // I store the name of created user in a variable.
create_random_user(); // just inserting a fake user into an sql database
?>
注意 : header() 在 create_random_user() 内部被调用;
函数create_random_user()是:
1) 执行 sql 查询。
2) 查询完成后使用 header() 重定向。
function create_random_user(){
queryToCreateUser() // A mysqli prepare statement, inserting into table. Inside that query when it finishes i store a variable in session.
exit(header("Location: 2.php")); // I tried without the exit, i tried with die(), it is the same
ob_end_flush();
}
我的问题是什么:
如果我不使用 header() 插入用户就可以了。它可以毫无问题地创建一个用户,仅此而已。
如果我使用 header(),我已经通过我的数据库表看到它可能会创建两个用户。并非总是如此,但机会很大。
我发现了什么,但我不知道为什么会这样:
我已经搜索了这个问题,并发现使用错误日志真正发生了什么。
当 1.php 被执行时,它的工作做得很好,查询中没有错误,但是当调用 header() 时,在重定向到 2.php 之前,1.php 会再次执行。所以,这就是为什么创建了 2 个用户而不是只有一个。
这是使用 ob_start() 时出现的问题吗?还是 session_start()?
以前有人遇到过这个问题吗?
其他一些信息:
我使用 ob_start() 是因为在调用 header() 之前我有一些回声;
我正在使用 session_start() 来存储用户的信息并在 2.php 文件中使用它们。
【问题讨论】:
-
2.php中是否包含1.php?