gpt4 book ai didi

php - imagecreatefromjpeg 正在静默终止脚本

转载 作者:可可西里 更新时间:2023-11-01 13:27:18 24 4
gpt4 key购买 nike

和我之前的很多人一样,我正在编写一个 PHP 脚本来制作一些图像缩略图。该脚本已获得 WOMM(可在我的机器上运行)认证,但当我将其移动到我的主机(1&1 Basic)时,出现了一个问题:无法处理超过特定文件大小的图像。我已将所有操作移至文件系统,以确保这不是一些潜在的 POST 问题。这是相关代码:


function cropAndResizeImage( $imageLocation )
{
//
// Just to be certain
//
ini_set('display_errors','on');
error_reporting(E_ALL);
ini_set('memory_limit','128M');
ini_set('max_execution_time','300');

$image_info = getimagesize($imageLocation);
$image_width = $image_info[0];
$image_height = $image_info[1];
$image_type = $image_info[2];

switch ( $image_type )
{
// snip...
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($imageLocation);
break;

default:
break;
}

// snip...
}

利用我神秘的 println 调试能力,我已经能够确定 imagecreatefromjpeg 没有返回;事实上,脚本在到达它时完全停止。一些事实:

  • 这与文件大小相关。 1MB 以下的图像看起来很好(抽查),但 3MB 左右的图像 barf。不过,不知道精确的截止点是多少。
  • 这不是因为服务器超时; wget 在 <1 秒内返回 3MB 图像,在“适当小”的图像上显着更长(表示不处理大图像)。
  • 在函数调用前加上@ 以抑制错误无效。这与脚本没有抛出错误这一事实非常吻合,它只是静静地终止此函数调用。

如果我不得不猜测,可能有一些我不知道(或无法访问)的 GD 参数限制了 1&1 服务器上的输入文件大小——配置变量 guess 是因为它会立即 barfs ,并且不会出现(试探性地)对图像进行任何实际加载或计算。

有什么建议吗?感谢您的帮助。

更新(礼貌 @Darryl's 评论): 调用 phpinfo 表明 PHP 正在更新 max_execution_timememory_limit变量正确。这并不一定意味着正在分配这些资源,只是它们似乎按预期运行。

更新 2:根据 Google 的一些引用资料,我尝试优化 JPEG(质量从 3MB 降低到 200KB)但没有成功,所以这不是图像文件大小的问题。然后我尝试减少原始 3888x2592 图像的像素数,第一个成功的尺寸是 1400x2592(1401x 和 1402x 都导致半解析和错误指示“格式错误的 JPEG”,这没有多大意义,除非整个图像未加载)。通过进一步缩小到 1300x2592,我可以实例化我实际正在寻找的 400x300 缩略图;在 1400x2592 分辨率下,我用来处理该任务的 imagecreatetruecolor 调用以与 imagecreatefromjpeg 相同的方式静默失败。

至于这是为什么,我有点不确定。 1400 * 2592 == 3.5MB 没有什么特别的意义,但我不得不想象这是对 GD + PHP 将处理的像素数的限制。

最佳答案

请参阅this note关于 php 网站上的内存使用情况。

*“使用 imagecreatefromjpeg() 加载图像所需的内存是图像尺寸和图像位深度乘以开销的函数。

可以用这个公式计算:

Num bytes = Width * Height * Bytes per pixel * overhead fudge factor"*

关于php - imagecreatefromjpeg 正在静默终止脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/668770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com