2014-02-28 27 views
0

在我继承的代码库中,有一行代码在显示错误页面之前对错误消息进行编码。MCRYPT_RIJNDAEL_256 PHP内存大小错误

 $sErrorMessageCrypted = wordwrap(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($sKey), $sMessage, MCRYPT_MODE_CBC, md5(md5($sKey)))), 60, PHP_EOL, true); 

该错误是PHP致命错误:用尽134217728个字节允许存储器大小(试图分配81个字节)。

它作为输入接收到的错误消息长度为1674个字符,带有23个字符的盐。

所以,我想知道这里的过程以及为什么会使用这么多的内存。我认为这是如此的错误可以显示,没有人能够读取它。 (尽管我没有看到前面的开发人员有解密功能的地方)。

有关更改此建议的任何建议吗?

感谢

+1

你的脚本运行时接近RAM的限制,然后需要额外的RAM来保存新的字符串跳过了线。这段代码现在没有什么“错误”,你只是在为你正在做的事情做一个太小的内存限制。如果不了解脚本其余部分的其他内容,除了“不要使用太多内存”或“提高限制”之外,我们几乎无法提供帮助。 –

回答

0

我的猜测是,在OpenSSL加密库拉推你在128MB的限制。增加内存限制是最简单的修复方法。如果你不能这样做,你可以重建库并消除不必要的密码来减小尺寸。

+0

我可以从128MB的限制增加服务器,但是如果这种情况发生在每个异常情况下,那么如果很多人一次遇到类似的问题,就会给服务器带来压力。我可能不得不看看每个步骤的内存使用情况..也许使用memory_get_usage()。我不想隐瞒一个问题,而宁愿修复它,或者至少理解它。这绝对只是这条线使用了太多的内存。我认为这是使用所有内存的mcrypt_encrypt,但我应该测试它,而不是猜测。我只是想知道是否有这么多内存被使用的明显原因。 – elyob

+0

请注意,这是一个虚拟内存限制,因此映射大量永不运行的代码不会给服务器带来任何负担。您需要查看其他统计信息以查看实际使用的物理内存量。 – stark