如何解决可以在运行它之前检查imagecreatefromjpeg是否会导致内存耗尽致命错误吗?
| 我已经对此进行了一些搜索,并且我知道不可能从耗尽的内存致命错误中恢复。我有一个运行imagecreatefromjpeg的脚本。我尝试捕获异常,尝试使用@运行函数,然后检查返回值是否为null或false,尝试使用\'die()\'运行它。没用。因此,我无法从中“恢复”。 那么在我开始之前有可能预料到它吗?是否可以检查jpeg的未压缩大小然后优雅地死掉?我想通过以下方式向用户发送消息:“图像$ image太大,无法处理。您将需要手动创建缩略图\”。 我的共享主机不允许我将内存大小增加到64mb以上,因此这不是一个选择。我的代码如下...function createthumb($section,$filename,$constrain=100)
{
$dir = \"$section/thumbs_$constrain\";
if(file_exists($workingdir.\"$section/thumbs_$constrain/$filename\")) return 1;
if(!file_exists($dir)) mkdir($dir);
$src = imagecreatefromjpeg($workingdir.\"$section/$filename\");
...
解决方法
根据经验,您可以使用getimagesize()返回的像素大小:
list ($width,$height) = getimagesize($file);
$memory = $width * $height * 4; // 4 bytes per pixel
如果此数字大于预定义的限制(要根据经验确定,则以32 * 1024 * 1024之类的数字开头),则不要用imagecreatefromjpeg()
加载它。
,您是否考虑过使用ImageMagic代替GD? ImageMagic能够在加载期间调整jpeg的大小,因此它不会消耗大量的PHP内存。有关详细信息,请参见此StackOverflow答案。
,我认为只有错误处理程序才能为您提供帮助,因为异常处理可能无法在内存耗尽时起作用
http://php.net/manual/zh/function.set-error-handler.php
,您可以在imagegreatefromjpeg之前验证字符串源的大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。