项目中导出功能 超时的问题解决方案
任务计划超时的问题:
1.http执行超时的问题,不接收通知,或以钉钉消息方式接收结果;
2.通过命令行 执行方式;
3.也可以通过使用ob_start()和ob_end_flush()缓冲PHP输出来避免curl过早返回状态。
页面导出超时的问题
导出功能增加,计算中……提示
计算好后,将计算好的数据存在服务器上;并存入mysql表;后续可发送到邮箱;
当同一个老师进行 同一个业务进行导出时,直接返回excel文件;
注意事项:需要区分 时间(当天有效),区分老师(权限不同);
其他方案
但我还想提及一种替代cron作业方法的方法:
您可以从Web服务器控制下的PHP脚本派生CLI PHP脚本。
如果您的脚本执行时间较长,且必须由某些网站用户操作触发
(例如,构建一个非常大的存档文件,并在文件完成后通过电子邮件发送下载链接),则此功能尤其有用。
我通常使用popen()函数从Web服务器PHP脚本派生CLI脚本。
这样可以很好地将参数传输到新脚本实例,如下所示:
$bgproc = popen('php "/my/path/my-bckgrnd-proc.php"', 'w');
if($bgproc===false){
die('Could not open bgrnd process');
}else{
// send params through stdin pipe to bgrnd process:
$p1 = serialize($param1);
$p2 = serialize($param2);
$p3 = serialize($param3);
fwrite($bgproc, $p1 . "n" . $p2 . "n" . $p3 . "n");
pclose($bgproc);
}
在CLI脚本中,您将收到如下参数。。。
$fp = fopen('php://stdin', 'r');
$param1 = unserialize(fgets($fp));
$param2 = unserialize(fgets($fp));
$param3 = unserialize(fgets($fp));
fclose($fp);
并对它们执行任何需要Web服务器长时间控制的操作。这种技术在Unix和Windows环境中同样适用。
一些其他设置
#php-fpm
request_terminate_timeout 300s
max_children 30
#nginx
send_timeout =300s
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;
文章来源:刘俊涛的博客
欢迎关注公众号、留言、评论,一起学习。
__________________________________________________________________________________
若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(_)
你要保守你心,胜过保守一切。
本文来自博客园,作者:刘俊涛的博客,转载请注明原文链接:https://www.cnblogs.com/lovebing/p/15722822.html