我创建了一个脚本,它从一些Web服务和我们的数据库获取数据,格式化报告,然后将其压缩并使其可供下载。当我第一次开始时,我使用命令行脚本来查看输出,并避开在浏览器中查看时的脚本超时限制。但是因为我不希望我的用户必须从命令行使用它,或者必须在他们的计算机上运行php,所以我想从我们的web服务器运行该代码。需要从浏览器运行一个长的PHP脚本
因为这个脚本可能需要几分钟才能运行,所以我需要一种方法让它在后台处理,然后在文件成功创建后开始下载。在不触发超时的情况下让脚本运行的最佳方式是什么?我曾尝试过(使用反引号单独运行脚本等),但放弃了,所以我在这里问。理想情况下,用户可以单击表单上的提交按钮来启动请求,然后返回到页面而不是让他们盯着空白的浏览器窗口。当它们存在的zip文件(意味着进程已经完成)时,它应该通知它们(通过AJAX?重新加载的页面?我还不知道)。
这是在Windows Server 2007上。
set_time_limit(0); ignore_user_abort(真); header('Location:'。$ _ SERVER ['SCRIPT_NAME']); - 这不应该在理论上起作用吗?它似乎仍然在等待页面。这里的想法是让脚本运行,但发送用户回到上一页,以便在文件存在时由ajax通知。 – Chris 2010-09-23 17:11:41
克里斯我假设可以工作,但它也会在高负载下杀死你的服务器! – Alfred 2010-09-23 18:34:26
好的,我现在已经把它变成了一个工作表。使用set_time_limit(0)和ajax请求,它会在后台运行。 – Chris 2010-09-23 19:22:03