0

我编写了这段代码来存储图像并避免有人存储恶意软件或与图像不同的其他文件:

$content = file_get_contents($image);
file_put_contents($path, $content);

// Check imagesize to know if it is an image or not:
$sizeimage = getimagesize(dirname(__FILE__)."/".$path);
if($sizeimage[0]<10000){ echo "ok"; }else{ unlink(dirname(__FILE__)."/".$path); }

我尝试插入另一个文件,如 CSS 文件,并将 CSS 存储在数据库中。

为什么 ?我的代码有什么问题?

4

5 回答 5

2
if($sizeimage[0]<10000){ echo "ok"; }else{ unlink(dirname(__FILE__)."/".$path); }

当文件不是图像时,getimagesize 返回 false,但您不检查它。您使用 [0],但如果它不存在,它将变为“null”,小于 10000。所以:

<?php
if($sizeimage !== false && isset($sizeimage[0]) && $sizeimage[0] < 10000 && $imagesize[0] > 0) {
    echo "Okay.";
}
else {
    unlink(dirname(__FILE__)."/".$path);
}
于 2012-06-18T07:40:10.610 回答
2

如果图像文件无效,则$sizeimage[0]返回0(检查PHP 文档)。因此,如果文件不是有效图像
,以下语句也会验证:true

if($sizeimage[0]<10000)

考虑使用以下语句:

if($sizeimage[0]>0 && $sizeimage[0]<10000)

这仅truegetimagesize()找到小于 1000 像素的图像时验证。

于 2012-06-18T07:39:31.770 回答
1

请检查文件扩展名。如果它的扩展名无效,则不允许。

在此处查看 PHP 示例

if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg"))) { echo 'valid file'; }else { echo 'invalid file type';} 

要删除文件,请使用 PHP unlink()

于 2012-06-18T07:55:47.267 回答
1

getimagesize 将返回false错误。这意味着:

  • $sizeimage = false
  • $sizeimage[0] = null
  • null转换为00 < 10000
于 2012-06-18T07:40:03.187 回答
0

我将您的代码修改如下:

$content = file_get_contents($image);
file_put_contents($path,$content);

// Check imagesize to know if it is an image or not:

$sizeimage = getimagesize(dirname(__FILE__)."/".$path);
if($sizeimage){ echo "ok"; } else { unlink(dirname(__FILE__)."/".$path); }

这应该有效。当 $sizeimage 为 null 或 false 时,将执行取消链接。

有一种更好的方法可以通过检查文件的 mime 类型来真正判断文件是否为图像。请参阅finfo_file (PHP 4) 或finfo (PHP 5)。

于 2012-06-18T08:19:51.033 回答