不带标头()或元数据的PHP重定向
我正在尝试设计一个页面,它执行一些数据库操作,然后将用户重定向回他们来自的页面。问题是,我使用了不带标头()或元数据的PHP重定向,php,redirect,header,require,Php,Redirect,Header,Require,我正在尝试设计一个页面,它执行一些数据库操作,然后将用户重定向回他们来自的页面。问题是,我使用了require()函数来获取到数据库的连接,因此已经发送了头。元标记是不可能的,因为我希望它看起来像所有的进程都是从它们来自的页面完成的。有什么建议吗?我有没有办法使用require()和标题()或者我必须删除一个?是否有header()的替代方法?在某些内容已发送后,您无法发送任何标题。将header()调用移动到require()调用之前。如果在发送某些内容之前无法发送header(),请通过放置
require()
函数来获取到数据库的连接,因此已经发送了头。元标记是不可能的,因为我希望它看起来像所有的进程都是从它们来自的页面完成的。有什么建议吗?我有没有办法使用require()
和标题()
或者我必须删除一个?是否有header()
的替代方法?在某些内容已发送后,您无法发送任何标题。将header()
调用移动到require()
调用之前。如果在发送某些内容之前无法发送header()
,请通过放置ob_start()使用在发送任何内容之前,在脚本开始处执行代码>。这样,任何内容都将存储在缓冲区中,直到脚本结束或手动发送缓冲区内容时才会发送
另一方面,简单地require
ing另一个文件不会生成任何标题/内容,除非包含的脚本发送它们。最常见的“隐藏”原因是
标记之前或之后未被注意到的空白。在将任何数据发送到客户端后,您无法发送标题
但是,使用require
并不要求您输出某些内容。如果我理解你的权利,你可以包括你的数据库文件,运行你的查询,然后重定向用户。这是完全正确的
如果需要发送一些输出(如果需要重定向,为什么要这样做?),另一个选项是使用输出缓冲。通过使用输出缓冲,在回显数据时不会将数据发送到浏览器,而是将其存储在缓冲区中。数据将在您调用或到达脚本末尾时发送。之后,您将无法发送任何新标题。开始输出缓冲时使用。如Artefactor所述,连接到数据库不需要任何输出。修复您包含的任何内容(例如database_connect.php),使其不输出。请参阅“已发送邮件头”问题,这可能有助于您查找“隐藏”输出。ob_start();//启动输出缓冲
echo“当我使用输出缓冲时,可以将header()
与require()
一起使用。这意味着整个脚本将被缓冲,并在脚本结束时首先发送
我就是这样做的
ob_start("ob_gzhandler"); //begin buffering the output
require_once('/classes/mysql.php');
// Some code where I access the database.
header('/somepage.php');
exit;
ob_flush(); //output the data in the buffer
与数据库的连接如何发送头?我不发送输出。require()
似乎会自动发送标题。我没有输出文本。这不可能,因为脚本必须执行一些数据库操作,然后重定向。你完全正确。我在所需文件中的结束php标记后发现了一个额外的空间。哦,缓冲区就是这样做的。我永远也不知道。
ob_start("ob_gzhandler"); //begin buffering the output
require_once('/classes/mysql.php');
// Some code where I access the database.
header('/somepage.php');
exit;
ob_flush(); //output the data in the buffer