1

我不断收到以下错误:

/private/var/tmp/phpl3E3lq 警告:imagecreatefromjpeg(/private/var/tmp/phpl3E3lq)[function.imagecreatefromjpeg]:无法打开流:第 10 行的 /sites/uploadresults.php 中没有此类文件或目录转换失败警告: imagedestroy() 期望参数 1 是资源,布尔值在第 22 行的 /sites/uploadresults.php 中给出

<?php
move_uploaded_file ($_FILES['Image']['tmp_name'], "/sites/".$_FILES['Image']['name']) or die ('Could not upload');

echo $_FILES['Image']['tmp_name']

 ?>


<?php
$img = imagecreatefromjpeg($_FILES['Image']['tmp_name'])
?>

<?php
if($img && imagefilter($img, IMG_FILTER_PIXELATE, 3))
{
echo $img;
}
else
{

echo 'Conversion failed';
imagedestroy($img);

}

?>

<img src="http://localhost/<?php echo $_FILES['Image']['name'] ?>" />

我不确定发生了什么。似乎 $img 没有拾取我试图转换为像素化形式的 jpeg。我是新手,所以可能是我的语法或其他东西。

4

2 回答 2

1

['tmp_name']在执行图像创建调用之前,您已将文件从该位置移开。因此,当您再次使用该 tmp 名称调用 imagecreate() 时,该文件不再存在。

在移动文件之前进行图像处理,或者使用文件的“最终目标”名称作为 imagecreate 参数。

另外:注意['name']文件上传的参数是用户提供的数据,可以包含路径信息。您盲目地将其用作移动调用中的目标文件名,这意味着用户可以将他们的文件转储到您的服务器上网络服务器具有写入权限的任何位置。考虑他们恶意命名文件的情况../../../../../etc/passwd

于 2011-08-04T16:29:15.550 回答
0

您需要使用新文件名,而不是移动之前的原始文件名:

$img = imagecreatefromjpeg("/sites/".$_FILES['Image']['name']);
于 2011-08-04T16:30:19.707 回答