我有一个"困境",并想知道什么是商业最佳做法。

我使用的Uploadify上传的图像。现在我需要验证文件之前节省的文件。

我已经看了不同的解决方案,但不能得到下一个很好的解决方案。

这里是我的标准:

  • 文件必须以所有在小写的
  • 文件可以只包含字数[a-z0-9_-]
  • 我必须能够重新命名的文件

你会如何去关于如果一文件是 my.file(name).jpeg ?

我可能爆炸的filename on'.'和节省的扩展,那么破灭,获得的文件。但不知道如果这是最好的soltion.

我有以下的功能,帮助有点:

function getExts($filename) 
{ 
    $exts = explode("[/\\.]", $filename) ; 
    $n = count($exts)-1; 
    $exts = $exts[$n]; 
    return $exts; 
}

function validFilename($filename)
{
    $filename = str_replace(" ", "_", $filename);
    $pattern = "/[^[a-z0-9_-]/";
    return preg_replace($pattern, "", strtolower($filename));
} 

1更新
我接收的文件通过$_FILES.这给我下列数据:

  • $_FILES["文件"]["name"]-这个名字的上传文件
  • $_FILES["文件"]["type"]-这种类型的文件上传
  • $_FILES["文件"]["大小"]-the size in bytes上传文件
  • $_FILES["文件"]["tmp_name"]-这个名字的临时文件的副本保存在服务器上
  • $_FILES["文件"]["错误"]-错误代码产生的文件上传

更新2
我刚刚发现的东西。我可以用 getimagesize 这将返回一系列的7个元素。这些元素之一[2]IMAGETYPE_XXX.

所以,我尝试使用这个代码:

function getExts2($filename)
{
    list(,,$type) = getimagesize($filename);
    return $type;
}

但它只返回的号码2...

(我还试图使用exif_imagetype,但它只能得到 PHP Error:呼吁不确定的功能.)

有帮助吗?

解决方案

检查的文件与regexp.使用信息mimetype.文件保存在服务器与md5名称。储存的现实的文件在数据库。

其他提示

pathinfo() 可以把你的文件和扩展。我警告你,你可以不依赖于测试文件的扩展,通过检查其文件,但是。你将要使用的一个函数,实际检查的二进制文件的内容这一点。 finfo_file() 可以完成这一任务。哦,它从来没有伤害到使用 basename() 在一个用户提供的文件路径,以防止一路穿越的攻击。

我假设你是验证的文件名为后用作下载文件的名称。

同时它将是巨大的,以保留文件的名称,因为他们是为了用户,从技术的观点来看,你的办法的声音的声音。

如果你关心什么的网址看起来像,并可能目标的一个国际观众在未来,一定要么把元音变音,他们的基本人物或转换他们。德国的用户(元音变音Ä的...U ss)所期望的转换:

Ä = ae
Ö = oe
Ü = ue

虽然斯堪的纳维亚人似乎是在轻松

Ä => a
Ö => o
Ø => o

等等。

然后有各种点缀符é á ó...

滴下的那些完全导致的网址看起来 真的 bd和lok型方向盘在bwsr地址br。

这应该做一切你想要的:

$filename = preg_replace('/[^[a-z0-9_-]/', '', str_replace(' ', '_', strtolower(pathinfo($filename, PATHINFO_FILENAME)))) . pathinfo($filename, PATHINFO_EXTENSION);

并作为Pekka解释说,如果你想要代替所有加重,在该文件的名字,你可以使用的下列功能:

function Unaccent($string)
{
    return preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}

我不认为你应该"验证"的文件,应该仅仅是"修复",如果它是不是在格式。为什么拒绝一个文件只是因为有人很烂在命名它们的文件,或者有一些不寻常的人物在那里?还有,如果你的工作的图像,可以使用 getimagesize 正如你所提到的,以确保它实际上是一个图像上传(应该失败,如果它不是一个图像)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top