【发布时间】:2015-01-30 07:07:19
【问题描述】:
我正在尝试使用类似于this one 的 PHP 脚本加密上传的文件。它适用于较小的文件,但是当我尝试上传大小为 49.2 MB 的测试文件(按照今天的标准并没有那么大)时,以下会导致我的 php 页面通过终止脚本显示一个空白页面:
$binaryFileData = file_get_contents($serverFilePath);
$binaryEncFile = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $binaryKey, $binaryFileData, MCRYPT_MODE_CBC, $binaryIV);
我在error_log 文件中得到一行:
PHP 致命错误:允许的内存大小为 134217728 字节已用尽 (试图分配 51694736 字节)在 /home2/myaccount/public_html/myfldr/myfile.inc 在第 620 行
在我上面的示例中,第 620 行指向 mcrypt_encrypt。
所以我做了一些研究,人们建议将以下内容添加到 php.ini 文件中:
memory_limit = -1
我做了,但结果还是一样。
所以我有一个两部分的问题:
显然,如何防止该异常终止我的脚本?
-
有什么方法可以让该函数返回错误,或者抛出我可以捕获的异常,而不是仅仅终止(并导致向用户显示白色/空白页面?)
如果加密失败,我还需要解决上面的第 2 项,以便能够从服务器上删除未加密的文件(如果 mcrypt_encrypt 只是终止我的脚本,我显然不能这样做。
PS。我需要说我在 BlueHost 托管的共享帐户上运行此脚本。
【问题讨论】:
-
您的 ISP 可能已禁用更改内存限制以在多个客户端之间共享资源。也许您需要支付更多费用。
-
@HoboSapiens:嗯。或许。但如果是这种情况,
mcrypt_encrypt函数就有点没用了,不是吗?另外,我很好奇,因为将整个文件加载到 RAM 中并像这样加密它实际上可能是一个坏主意,有没有办法逐块进行?或者换句话说,通过读取、加密和写入文件的小块,一次一个。
标签: php encryption error-log php-ini