【问题标题】:PHP/Website freeze on Chrome on Mac?PHP/网站在 Mac 上的 Chrome 上冻结?
【发布时间】: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()(或exit wpearse 建议)应该能够使会话再次可用。但是,您应该检查一下为什么您的脚本需要这么长时间,例如 xdebug 的 cachegrind。

标签: php macos google-chrome freeze


【解决方案1】:

我在 Firefox 的 Mac 上遇到了完全相同的问题。当上传小于 100kB 的小文件时,它 90% 的时间都可以正常工作,但对于较大的文件(例如数码相机的照片),Firefox 似乎正在等待服务器的响应。发生这种情况时,我无法从另一个 Firefox 窗口连接到同一个域,但打开任何其他页面都可以正常工作。 服务器工作正常 - 我在另一台计算机上检查了它,而 Mac 没有连接。 3-5 分钟后,它“醒来”并且工作正常。

然后我发现上传脚本的redirect header后面没有exit();。我插入了它,现在我还没有看到任何这些问题。

只是想确认header("location: [URL]"); 之后缺少的exit(); 会导致 Mac 上的浏览​​器挂起。

【讨论】:

    【解决方案2】:

    尝试在您的header('Location: page_view.php?id='.$page-&gt;id); 后面紧跟一个exit();

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      相关资源
      最近更新 更多