【发布时间】:2011-07-27 18:47:28
【问题描述】:
我有一个错误导致我的网站在 PHP 中冻结。它发生在输入页面上,用户填写一些表格,然后在数据库中更新数据,然后用户将header 重定向到另一个页面。
会发生什么情况是整个网站“分支”(子文件夹,例如www.example.com/my_site,但不是www.example.com/another_site)冻结,但没有其他 Chrome 访问网络位置。过了一会儿,我可以再次在那个网站上导航,我想是在 Chrome 操作超时之后。
但是,这似乎只发生在 Chrome 和我的 Mac 上。我在那台 Mac 上测试了另一个 Safari,在 Windows 上测试了 Chrome,两者都运行良好。我必须承认这个测试并不广泛,但我只有 1 台 Mac 可以测试。这种类似文恩的小测试跨越了浏览器和机器,我认为这是关键因素。
这是错误页面的代码。如果我注释掉标头重定向,我不会感到毛骨悚然。如果我注释掉页面更新代码,我不会冻结。我看不出是什么导致了这里的冻结,真的。机器?操作系统?标头重定向? $_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);
}
?>
【问题讨论】:
-
对我来说,似乎有些东西仍在运行,保持会话锁定。
session_write_close()(或exitwpearse 建议)应该能够使会话再次可用。但是,您应该检查一下为什么您的脚本需要这么长时间,例如xdebug的 cachegrind。
标签: php macos google-chrome freeze