我正在尝试编写用于文件大小调整的脚本。在脚本中,我使用getimagesize()从图像中获取mime信息,然后使用switch语句测试它的值,在不同情况下为变量分配不同的值。
然而,在运行脚本后,我收到了错误
PHP Warning: imagecopyresampled() expects parameter 2 to be resource, string given in ..........
为什么我正在做的是从createimagefromjpeg传递变量时我是否收到此错误?
我的代码摘录:
list($width,$height,$type)=getimagesize($_FILES["BusinessCreateFileUpload"]["tmp_name"]);
//checks the mime type and gets the extension
//Declares the $uploadedfile,$src and $ext variables.
$uploadedfile='';
$src='';
$ext='';
switch($type)
{
case"image/jpeg":
$uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
$src=imagecreatefromjpeg($uploadedfile);
$ext=".jpg";
break;
case"image/png":
$uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
$src=imagecreatefrompng($uploadedfile);
$ext=".png";
break;
default:
echo"An error has occurred.Please follow the <a href='http://localhost/Kenced/Business/edititem.php'>link to try again</a>";
}
//Creates thumbnail
$newwidth=100;
$newheight=100;
$thumbimg=imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($thumbimg,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
//Creates displayimage
$newwidth1=250;
$newheight1=250;
$displayimg=imagecreatetruecolor($newwidth1, $newheight1);
imagecopyresampled($displayimg,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);
我正在编辑我在互联网上找到的脚本的一些部分,因为我仍然是编程的新手,所以我可能无意中搞砸了一些东西,虽然我似乎无法弄清楚我到底去了哪里错。
答案 0 :(得分:2)
您的代码将默认值$src
设置为空字符串。然后,以下行访问此$src
的空字符串,这就是它给出错误的原因:
imagecopyresampled($thumbimg,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
imagecopyresampled($displayimg,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);
根据您的代码,当switch
$type
的情况假定为默认值时会发生这种情况,因此您的代码也必须输出以下行:
发生错误。请按照link to try again
进行操作
关于OP的评论(答案似乎很长,所以包括在这里):
首先,让您的脚本在switch语句的die
中使用echo
而不是default case
。因此,如果$type
的值不符合要求,那么脚本将发出错误并停止。
其次,函数getimagesize
将mimetype作为INT值返回,这是您的变量$type
将被设置为的值。相反,您将$type
变量与错误的字符串进行比较,并始终使用default
案例。因此,请更改switch
语句并将值与INT值进行比较。
此外,请确保您的case
语句和echo
语句在关键字后面有空格,即在case
和echo
考虑到上述情况,您可以使用以下命令替换switch语句:
$src = 0;
switch($type)
{
case 2:
$uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
$src=imagecreatefromjpeg($uploadedfile);
$ext=".jpg";
break;
case 3:
$uploadedfile=$_FILES["BusinessCreateFileUpload"]["tmp_name"];
$src=imagecreatefrompng($uploadedfile);
$ext=".png";
break;
default:
die "An error has occurred.Please follow the <a href='http://localhost/Kenced/Business/edititem.php'>link to try again</a>";
}
答案 1 :(得分:0)
getimagesize
函数在第3个参数中使用int值返回类型,而不是字符串mimetype。
检查php.net中的文档。
1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(英特尔) 字节顺序),8 = TIFF(motorola字节顺序),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
var_dump
$type
变量。