//设置客户端断开依然运行 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
应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...
面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...
<?php /** * daemonize让当前脚本为守护进程执行 * @param string $callback 匿名函数 */ function daemonize($callback) {...
断点下载的原理:http请求头添加Range参数告诉文件服务器端需要的字节范围例如1个文本文件的字节为1000,第一次请求Range: bytes=0-500第二次请求Range: bytes=501-1000通过每次的请求将返回的流追加写入到文件。注意的项目:断点下载服务器端的每次只返回字节传输的...
【一】.无锁场景:多个人购买一件商品,库存减少。商品表:主键 商品名 库存数量 id name stock 1&nb...
今天朋友面试遇到的问题:php如何阻止一个类被序列化,首先我想到的是使用serialize函数进行序列化对象首先会检查对象是否存在__sleep方法,如果有的话先调用__sleep方法。(1).普通序列化对象代码:class member {  ...