当前位置:首页 > PHP > 正文内容

php关闭浏览器继续运行

高老师7年前 (2020-03-02)PHP1984
//设置客户端断开依然运行
ignore_user_abort(true);

//设置脚本不超时
set_time_limit(0);

//死循环每隔1秒访问一次网址
while (true)
{
    sleep(1);

    @file_get_contents('http://xingxinghan.cn/?id=5');
}

上面的代码我在windows下的phpenv集成环境测试通过,但是在线上刷数据时出现异常,nginx 502 后php停止运行,一脸懵逼。看了下网上说的可能,逐一排查:

(1).修改php.ini的max_execution_time时间,我一看就知道这个不行,因为set_time_limit已经设置脚本执行不超时,但是还是测试下嘛,将max_execution_time修改为3600秒,1小时,依然不行。

(2).fpm的request_terminate_timeout配置,request_terminate_timeout 适用于当max_execution_time由于某种原因无法终止脚本的时候,会把这个php-fpm请求干掉,改为1小时果真可以了,哈哈

在fpm中request_terminate_timeout才是真正控制进程执行时间的。

提示:通过ignore_user_abort函数设置了当客户端浏览器关闭当前脚本继续运行,但是依然会受到php脚本超时的时间限制,于是再设置下超时时间即可。启动后会占用一个cgi进程,及其不优雅。

看更详细的版本,看我的另外一篇文章https://blog.20230611.cn/?id=572

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/127.html

分享给朋友:

“php关闭浏览器继续运行” 的相关文章

PHP验证码不显示的终极解决方案

PHP验证码不显示的终极解决方案

PHP验证码不显示的问题应该是经常的事情,我在这里把2种解决方案都发出来方便大家后期使用.因为是昨天晚上自己写验证码都没有显示,我就直接把之前和李炎恢老师上课写的验证码拿来还是不显示,醉了。首先是第一种方法:1、打开服务器安装目录下的php.ini文件;2、去掉;extension=php_gd.d...

PHP模拟并发请求

PHP模拟并发请求

原理:使用curl_init()创建多个请求实例,再使用curl_multi_init()批量执行创建的多个请求实例。文件1:curl.php<?php  $threads=500;//并发请求次数 $url='http://blog.cn/index.php?';...

php soap 捕获异常,使用try catch 捕获Soap 异常

php soap 捕获异常,使用try catch 捕获Soap 异常

项目中使用服务来执行webservice,由于对方系统api不稳定,经常导致服务崩溃,只能重启,一个月差不多要重启一次。初期的解决办法是捕获异常,然后continue掉。<?php try {     $url = 'http...

php多进程实现任务管理器,定时执行任务,支持守护

php多进程实现任务管理器,定时执行任务,支持守护

主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /**  * 订单任务  */ class Order {    &n...

php守护进程

php守护进程

<?php /**  * daemonize让当前脚本为守护进程执行  * @param string $callback 匿名函数  */ function daemonize($callback) {...

php生成器yield from详解

php生成器yield from详解

PHP7中,通过生成器委托(yield from),可以将其他生成器、可迭代的对象、数组委托给外层生成器。外层的生成器会先顺序 yield 委托出来的值,然后继续 yield 本身中定义的值。同时yield from也能获取到生成器的返回值...