PHP /网站冻结在Mac上的Chrome?

时间:2011-07-27 18:47:29

标签: php macos google-chrome freeze

我有一个错误,使我的网站冻结在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);
}

?>

2 个答案:

答案 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);