如何删除不是图像的文件?

时间:2012-06-18 07:35:35

标签: php

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

$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存储在数据库中。

为什么?我的代码出了什么问题?

5 个答案:

答案 0 :(得分:2)

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

if($sizeimage[0]<10000)

考虑使用以下语句:

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

这只会在true找到小于1000像素的图片时验证getimagesize()

答案 1 :(得分: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);
}

答案 2 :(得分:1)

getimagesize将在出错时返回false。这意味着:

  • $sizeimage = false
  • $sizeimage[0] = null
  • null转换为00 < 10000

答案 3 :(得分:1)

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

see PHP example here

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()

答案 4 :(得分: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时,将执行unlink。

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