首页 > 解决方案 > 生成大文件时如何解决 PHP 中的“分段失败”?

问题描述

我在不同的论坛中阅读了很多关于此错误的信息,但仍然找不到解决方案

我的生产服务器目前有:

阿帕奇:2.4.25 PHP:5.6.40

使用1.8.2版本的PHPSpreadsheet库,生成不同的Excel文件;由于不同的原因(大量信息和样式应用于单元格表),在相当长的执行时间(可以达到 30/40 分钟)中导出最大 3MB 的 xlsx 文件。

所有这一切都奏效了,直到我们移动并 dockerized 到我们的新服务器,它的操作系统是 CentOS7,并且有一个用于 apache、php 和另一个用于 mysql 的 docker。

现在,当生成这些“大”文件时,error.log 跟踪显示以下错误:[core: notice][pid 8] AH00052: child pid 15829 exit signal Segmentation fault (11)

我试图在我的本地机器上使用虚拟机复制错误,在另一台机器上,我将 OS centos7 和 dockerized 放在它们上,我什至从生产服务器复制了相同的配置文件,但是,在这些机器上,错误没有出现并且允许我正确下载。

目前我很绝望,在生产线上尝试任何解决方案之前,我已经反向尝试了每个互联网解决方案来复制错误,但这个错误绝不会被复制。

我感谢任何信息和正义事业的帮助......我知道此时 php 5.6 已被发送到收集,但如果最终它无法解决此事件,我无法将工作时间提交给更新。

标签: phplinuxapachedocker

解决方案


似乎是一个可能的解决方案,并且绝对是一个优化,将摆脱让httpd孩子被绑在任何运行那么长时间的东西上。我希望这样的事情会失败。想要使这个请求超时的事情的数量很长。我的意思是用户在那里坐了 40 分钟?

让您的 Web 界面触发 PHP 脚本 (CLI) 怎么样?

exec('php slowasf.php arg1 arg2 >/dev/null 2>/dev/null &');

可以查看消息队列以跟踪进度。更多的长评论可能比答案。但是你的问题缺少代码!

最后,您是否尝试过给它更多的内存?


推荐阅读