项目中导出功能 超时的问题解决方案

任务计划超时的问题:

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;

文章来源:刘俊涛的博客
欢迎关注公众号、留言、评论,一起学习。

__________________________________________________________________________________

若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(_)

posted @ 2021-12-23 11:51  刘俊涛的博客  阅读(512)  评论(0编辑  收藏  举报