我有一个调整图像大小的功能,虽然它在我的测试服务器上运行良好,但它在新的实时服务器上不起作用。我得到的错误信息是
警告:imagejpeg():无法打开“/home/sites/public_html/images/2013-24-1-240x300.jpg”进行写入:/home/sites/public_html/includes/functions/html_output 中没有此类文件或目录.php 在第 352 行
下面代码中的第 352 行是靠近底部的 imagejpeg 行。如果它即时创建图像,我不明白它为什么要打开文件。
图像文件夹是可写的(更改为 777 以检查),因为原始图像显示良好。在捆绑的实时服务器上启用了 GD(兼容 2.0.34)
现在两台服务器上的 PHP 和 GD 版本都相同。唯一的区别是测试服务器正在运行 WAMP,而 live 是 linux。
function image_resample($src,$width,$height) {
define(JPEGQUALITY, 75);
define(ALLOWSQUASH,0.10);
if ($src=='') {
return $src;
}
$i = @getimagesize( $src ); // 1-gif (ignore), 2-jpeg, 3-png
if (!(($width == SMALL_IMAGE_WIDTH) && ($height == SMALL_IMAGE_HEIGHT)) &&
!(($width == MEDIUM_IMAGE_WIDTH) && ($height == MEDIUM_IMAGE_HEIGHT))&&
!(($width == LARGE_IMAGE_WIDTH) && ($height == LARGE_IMAGE_HEIGHT))) {
return $src; // can amend to work with other images
}
if (!( ($i[2] == 3) || ($i[2] ==2))) {
return $src;
}
$file = preg_replace( '/\.([a-z]{3,4})$/i', "-{$width}x{$height}.\\1", $src ); // name of resampled image
if (is_file( $file ) ) {
return $file;
}
$scr_w = $i[0];
$scr_h = $i[1];
if (($scr_w * $scr_h * $width * $height) == 0) {
return $src;
}
$howsquashed = ($width / $height * $scr_h / $scr_w);
if (((1 / (1 + ALLOWSQUASH)) < $howsquashed) && ($howsquashed < (1 + ALLOWSQUASH))) $simpleway='true';
$scalefactor = min($width/$scr_w, $height/$scr_h);
$scaled_w = (int)($scr_w * $scalefactor);
$scaled_h = (int)($scr_h * $scalefactor);
$offset_w = max(0,round(($width - $scaled_w) / 2,0));
$offset_h = max(0,round(($height - $scaled_h) / 2));
$dst = DIR_FS_CATALOG . '/' . $file;
$dstim = @imagecreatetruecolor ($width, $height);
$background_color = imagecolorallocate ($dstim, 255, 255, 255);
imagefilledrectangle($dstim, 0, 0, $width, $height, $background_color);
if ( $i[2] == 2) {
$srcim = @ImageCreateFromJPEG ($src); // open
}
elseif ( $i[2] == 3) {
$srcim = @ImageCreateFromPNG ($src);
}
if ($simpleway == 'true') {
imagecopyresampled ($dstim, $srcim, 0, 0, 0, 0, $width, $height, $scr_w, $scr_h);
}
else {
$intim = @imagecreatetruecolor ($width, $height);
imagecopyresampled ($intim, $srcim, $offset_w, $offset_h, 0, 0, $scaled_w, $scaled_h, $scr_w, $scr_h);
imagecopy ( $dstim, $intim, $offset_w, $offset_h, $offset_w, $offset_h, $scaled_w, $scaled_h);
imagedestroy ($intim);
}
if ( $i[2] == 2) {
imagejpeg ($dstim , $dst , JPEGQUALITY);
}
elseif ( $i[2] == 3) {
imagepng ($dstim , $dst);
}
imagedestroy ($srcim);
imagedestroy ($dstim);
return $file; // Use the newly resampled image
}