可以在运行它之前检查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之前验证字符串源的大小。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...