PHP挂起多个请求

时间:2010-10-02 22:21:48

标签: php

大家好我有问题。

我制作了一个用户提交详细信息的脚本。详细信息保存到数据库 并且在保存后调用exec。调用的后台scipt是​​一个php 我通过exec用wget:

调用它的脚本
session_write_close();
@exec('wget -q  -o /dev/null -a /dev/null -O /home/linux/test.txt http://127.0.0.1/admin/install.php?s=' . session_id() . '  > /dev/null 2>&1 &');

脚本查询数据库并使用curl将一些参数发布到外部URL并等待响应。

我无法在网络服务器上打开任何其他php页面(状态栏显示:等待127.0.0.1),直到上述脚本的脚本执行结束。我想要的是在我的网站上做其他事情时在后台运行。

Apache / 2.2.9(Debian)mod_fastcgi / 2.4.6 PHP / 5.2.6-1 + lenny9与Suhosin-Patch Server在127.0.0.1 Debian Linux发行版。 服务器API CGI / FastCGI

3 个答案:

答案 0 :(得分:1)

http://pl2.php.net/manual/en/function.session-write-close.php

我假设你希望服务器脚本等待睡眠()定时间隔,以便AJAX事件触发服务器响应/轮询。在每次sleep()迭代之前使用session_write_close()使其工作。我使用这种模式进行了简单的在线聊天,它起到了魅力作用。

关键是要防止接收器AJAX脚本不断轮询服务器以获取更新以获得快速响应。相反,它会请求睡眠的脚本,并且不会发送任何响应,直到合理的超时或服务器端发生事件。

答案 1 :(得分:0)

如果您使用的是基于文件的会话,他们会锁定页面,直到它们在脚本结束时关闭或明确地通过session_write_close()

如果没有,请查找锁定资源的其他内容。

答案 2 :(得分:0)

嗨,谢谢你的链接。阅读后我意识到我需要在使用数据后调用session_write_close(),因为所有页面都是会话处理的(因为我无法打开任何因为php等待会话在后台执行脚本后关闭。< / p>