在我的 PHP 应用程序中,我使用Postmarks 的入站挂钩接收邮件。该服务接收邮件并将其 JSON 编码发送到我服务器上的 URL,这工作正常。
我遇到的问题是,当邮件的附件超过 10MB 时。
这导致
PHP致命错误:允许的内存大小为104857600字节已用尽(试图分配1821693字节)
我在这一行中所做的是:
$in = json_decode(file_get_contents("php://input"));
我有两个问题:
- 有没有办法提高内存效率?
- 为什么 10MB 邮件会失败,而内存限制实际上是 100MB?Base64 + JSON 编码是否会产生比原始大小大 10 倍的开销?
使用 memory_get_usage() 调试后编辑:
Script start
47MB memory usage.
$in = file_get_contents("php://input");
63MB memory usage.
json_decode($in);
PHP terminates, due to memory size exhausted.
有趣的是,脚本已经开始使用 47MB 的内存,而没有发出任何命令。我想这是由于输入数据大吗?也许是因为 PHP 将它存储在 $HTTP_RAW_POST_DATA 中?
我可以使用任何 php.ini 指令来让 PHP 创建更少的变量吗?