我有一个“困境”,想知道什么是商业最佳实践。
我正在使用 Uploadify 上传图片。现在我需要在保存文件之前验证文件名。
我查看了不同的解决方案,但无法找到一种好的解决方案。
这是我的标准:
- 文件名必须全部小写
- 文件名只能包含字符 [a-z0-9_-]
- 我必须能够重命名文件
如果文件名是 ,你会怎么做my.file(name).jpeg
?
我可以在 '.' 上分解文件名。并保存扩展名,然后再次内爆以获取文件名。但不确定这是否是最好的解决方案。
我有以下功能有点帮助:
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["file"]["name"] - 上传文件的名称
- $_FILES["file"]["type"] - 上传文件的类型
- $_FILES["file"]["size"] - 上传文件的字节大小
- $_FILES["file"]["tmp_name"] - 存储在服务器上的文件的临时副本的名称
- $_FILES["file"]["error"] - 文件上传产生的错误代码
更新 2
我刚刚发现了一些东西。我可以使用getimagesize它将返回一个包含 7 个元素的数组。这些元素之一 [2] 是 IMAGETYPE_XXX。
所以我尝试使用这段代码:
function getExts2($filename)
{
list(,,$type) = getimagesize($filename);
return $type;
}
但它只返回数字 2...
(我也尝试使用 exif_imagetype,但它只得到PHP Error: Call to undefined function。)