【发布时间】:2010-09-23 15:58:39
【问题描述】:
我创建了一个脚本,该脚本从一些 Web 服务和我们的数据库中获取数据,格式化报告,然后将其压缩并可供下载。当我第一次开始时,我将它作为一个命令行脚本来查看输出,并绕过在浏览器中查看时遇到的脚本超时限制。但是因为我不希望我的用户必须从命令行使用它或必须在他们的计算机上运行 php,所以我想从我们的网络服务器运行它。
因为这个脚本可能需要几分钟才能运行,所以我需要一种方法让它在后台处理,然后在文件创建成功后开始下载。让这个脚本运行而不触发超时的最佳方法是什么?我之前尝试过这个(使用反引号单独运行脚本等)但放弃了,所以我在这里问。理想情况下,用户会单击表单上的提交按钮来启动请求,然后返回到页面,而不是让他们盯着空白的浏览器窗口。当它们存在 zip 文件时(意味着该过程已完成),它应该通知它们(通过 AJAX?重新加载页面?我还不知道)。
这是在 Windows Server 2007 上。
【问题讨论】:
-
set_time_limit(0);忽略用户中止(真); header('位置:'.$_SERVER['SCRIPT_NAME']); ——这在理论上不应该有效吗?它似乎仍在等待页面。这里的想法是让脚本运行,但当文件存在时将用户返回到上一页以通过 ajax 通知。
-
克里斯我认为这会起作用,但它也会在高负载时杀死你的服务器!
-
好的,我现在已经把它变成了一个工作表单。使用 set_time_limit(0) 和 ajax 请求,它将在后台运行。
标签: php background