【问题标题】:Error with imagefilter() from GD (no file?)来自 GD 的 imagefilter() 出错(没有文件?)
【发布时间】:2011-08-04 16:26:15
【问题描述】:

我不断收到以下错误:

/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。我是新手,所以可能是我的语法之类的。

【问题讨论】:

  • 对于菜鸟格式感到抱歉。还在习惯这个网站。

标签: php gd syntax-error gdlib imagefilter


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    $img = imagecreatefromjpeg("/sites/".$_FILES['Image']['name']);
    

    【讨论】:

    • 我将其更改为:pastebin.com/1Z4VMUCz 仍然给我:/sites//private/var/tmp/phppKh29h 警告:imagecreatefromjpeg(/sites//private/var/tmp/phppKh29h) [function. imagecreatefromjpeg]:无法打开流:第 16 行的 /sites/uploadresults.php 中没有这样的文件或目录转换失败警告:imagedestroy() 期望参数 1 是资源,布尔值在第 28 行的 /sites/uploadresults.php 中给出谢谢寻求帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多