« 上一篇下一篇 »

让php在web环境下输出页面后继续运行的方法

起因是处理web服务器输出一些图片,不想让用户下载,

就希望输出图片后3秒再删除该图片在web服务器上的随机文件。

原本在php6中,ob_flush() 运行良好,不影响前端页面的输出,

但是更新到php7.3-fpm之后,发现,

如果php不执行完,即便使用ob_flush()直接输出页面,浏览器也没有相应,

会一直等到php在后台执行完毕才会显示web页面。


后发现如下方法,让php用ob_flush()输出后,关闭对web-server的连接,

接下来继续处理自己的后继工作,而不会影响web服务器的页面输出。

    ob_flush();

    flush();

    if (function_exists("fastcgi_finish_request"))         //前提是用的php-fpm

    { 

    fastcgi_finish_request();     // 上面的php响应完成, 立即返回到前端,关闭到Nginx的连接。

    sleep(3);

    unlink($the_pic_file)  

    ...

    }