我有一个错误,使我的网站冻结在PHP中。它出现在输入页面上,用户填写某个表单,然后在数据库上更新数据,然后用户将header
重定向到另一个页面。
整个网站“分支”(子文件夹,例如www.example.com/my_site
,但不是www.example.com/another_site
)会冻结,但没有其他Chrome访问过的网址。过了一会儿,我可以再次在该网站上导航,我认为在Chrome操作超时后。
然而,这似乎只发生在Chrome和我的Mac上。我在Mac上测试了另一个Safari,在Windows上测试了Chrome,两者都运行良好。我必须承认这个测试并不广泛,但我只有1台Mac可供测试。这个小小的类似测试跨越了浏览器和机器,我认为这是关键因素。
以下是窃听页面的代码。如果我注释掉标题重定向,我就不会轻松。如果我注释掉页面更新代码,我就不会冻结。我真的没有看到导致冻结的原因。机? OS?标题重定向? $ _POST操作?尝试/捕捉处理?组合?我不知道。
编辑:我现在看到从表单到页面的$ _POST传递的数据量之间存在关联。如果数据相对较小,一切都正常。但是,当我获得更大的数据(即通过WYSIWYG编辑器字段的HTML标记)时,会发生冻结。 Chrome如何受此影响?也许重定向发生在它可以处理之前?即使有大量的数据,它仍然适用于Mac / Safari和Windows / Chrome。
<?php
require_once("script/initialize.php");
try
{
if (isset($_POST["submit"]))
{
$page = page::from_post();
try
{
$page->validate();
$page->require_edit();
$page->update_by_id();
$page->set_tags_from_post();
$page->set_categories_from_post();
$page->set_workgroups_from_post();
//header("Location: page_view.php?id=".$page->id);
}
catch (InputException $inex)
{
$smarty->assign("error", $inex->getMessage());
}
}
else
{
$page = page::from_id(intval($_GET["id"]));
$page->require_edit();
}
$smarty->assign("ressource", $page);
$smarty->display_self();
}
catch (Exception $ex)
{
$smarty->display_exception($ex);
}
?>
答案 0 :(得分:1)
我在Firefox的Mac上遇到了完全相同的问题。当上传小文件&lt; 100kB时,它在90%的时间内工作正常,但是对于较大的文件(例如来自数码相机的照片),Firefox似乎在等待来自服务器的响应。当发生这种情况时,我无法从另一个Firefox窗口连接到同一个域,但打开任何其他页面工作正常。 服务器运行正常 - 我在Mac上没有连接时在另一台计算机上检查过。 3-5分钟后它“醒来”并且工作正常。
然后我发现上传脚本中的重定向标题后面没有exit();
。我插入它,现在我还没有看到任何这些问题。
只是想确认exit();
之后遗失header("location: [URL]");
会导致Mac上的浏览器挂起。
答案 1 :(得分:0)
尝试在exit();
header('Location: page_view.php?id='.$page->id);