2010-05-30 62 views
7

我有一个网站,其中有2页,(home_page.php和action_page.php)操作页面需要aprx。 2分钟完全加载(服务器端需要2分钟)。但是,如果用户在加载操作页面时单击主页链接,则浏览器不会进入主页,直到操作页面被完全加载。如果主页在新选项卡中打开,则也是如此。每个用户在同一时间2个不同的PHP请求

首先这是什么原因? (bowser?php?apache?),我该如何避免这种情况?

谢谢

回答

10

更可能是因为会话被锁定。 PHP将只允许每个会话一次请求以防止出现问题(覆盖数据等)。请参阅:session_write_close() ...

+0

好吧,我只是将这个函数添加到动作页面的顶部,现在看起来很完美。 – 2010-05-30 13:46:59

+0

它是否也可以解决ajax调用的问题?如果我让2个Ajax调用到相同的页面,然后第二个Ajax调用只会在第一个完成处理后回答。只有启用会话时才会发生这种情况。当我从php页面中删除会话时,任何一个呼叫都可能首先响应。这是同样奇特的PHP会话行为? – 2010-05-30 14:03:39

+0

嗯,这不是一个“奇怪”的行为,它是非常想要的。有两种方法可以避免该问题。要么尽快关闭会话,要么尽快关闭会话,或者加快页面的速度,即使有锁定,也只能持续很短的时间(因此不会被注意到)。 – ircmaxell 2010-05-30 14:11:11

1

如果该页面需要2分钟才能加载,那么您将达到典型浏览器的网络超时限制。加载页面的时间非常长。您可能想考虑产生一个单独的进程来处理长时间处理。您可以将结果放入数据库,文件等中,并使用轮询来检查是否完成。

当产生一个进程(exec())时,确保你使用nohup,背景它(&)并将错误输出直接指向/ dev/null,否则它不会断开与web进程的连接,并且web进程将等待它完成。

0

另外,看看你的调试设置,如果你正在开发。我有这个在我的.htaccess中:

php_flag xdebug.remote_enable on 
php_flag xdebug.remote_connect_back on 
php_flag xdebug.remote_autostart on 

而且创建相同的行为。

相关问题