就像我之前的那么多,我正在编写一个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...
}
Run Code Online (Sandbox Code Playgroud)
使用我神秘的println调试功能,我已经能够确定它imagecreatefromjpeg没有返回; 实际上,脚本在到达时会完全停止.一些事实:
wget在3MB图像上返回<1s,在"适当小"图像上显着更长(表示没有处理大图像).@来抑制错误无效.这与脚本没有抛出错误的事实非常匹配,它只是默默地终止于此函数调用.如果我不得不猜测,可能有一些GD参数我不知道(或有权访问)限制1&1服务器上的输入文件大小 - 配置变量猜测是因为它立即barfs,并且没有(启发式地)出现在图像上进行任何实际加载或计算.
有什么建议?谢谢您的帮助.
更新(礼貌@Darryl的评论):调用phpinfo表明PHP正在更新max_execution_time和memory_limit变量.这并不一定意味着正在分配这些资源,只是它们似乎按预期运行.
更新2:在谷歌的一些参考资料之后,我尝试优化JPEG(质量从3MB降低到200KB)没有运气,因此它不是图像文件大小的问题.然后我尝试减少原始3888x2592图像的像素数,第一个成功的尺寸是1400x2592(1401x和1402x都导致半分析和错误表示"格式错误的JPEG",除非整个图像没有多大意义没有加载).通过进一步减少到1300x2592,我可以实例化我正在寻找的400x300缩略图; 在1400x2592,imagecreatetruecolor我用来处理该任务的调用以与以下相同的方式无声地失败imagecreatefromjpeg.
至于为什么这样,我有点不确定.1400*2592 == 3.5MB没有什么特别有意义,但我必须想象这是GD + PHP将处理的像素数量的限制.