<?php
echo( "We'll email you as soon as this is done." );header( "Connection: Close" );
// do some stuff that will take a whilemail( 'dude@thatplace.com', "okay I'm done", 'Yup, all done.' );?>
MMTTMM
浏览 626回答 3
3回答
拉莫斯之舞
以下PHP手册页(包括。(用户注释)建议关于如何在不终止PHP脚本的情况下关闭到浏览器的TCP连接的多条指令:连接处理博士据推测,它需要的不仅仅是发送一个封闭的标题。执行部分随后确认:是的,这招成功了: 指向用户注71172(2006年11月)在此复制:关闭用户浏览器连接,同时保持php脚本运行一直是自[PHP]4.1以来的一个问题。register_shutdown_function()被修改,使其不会自动关闭用户连接。STS在邮件中发布了最初的解决方案:<?php
header("Connection: close");ob_start();phpinfo();$size = ob_get_length();header("Content-Length: $size");ob_end_flush();
flush();sleep(13);error_log("do something in the background");?>它可以正常工作直到你替换掉phpinfo()为echo('text I want user to see');在这种情况下,头永远不会被发送!解决方案是在发送头信息之前显式关闭输出缓冲区并清除缓冲区。例子:<?php
ob_end_clean();header("Connection: close");ignore_user_abort(true); // just to be safeob_start();echo('Text the user will see');
$size = ob_get_length();header("Content-Length: $size");ob_end_flush(); // Strange behaviour, will not workflush();
// Unless both are called !// Do processing here sleep(30);echo('Text user will never see');?>我只是花了3个小时试图弄清楚这个问题,希望它能帮到某人:)测试:IE 7.5730.11Mozilla Firefox 1.81