我有一個「困境」,不知道什麼是商業最佳實踐。什麼是驗證文件名的業務最佳實踐?
我正在使用Uploadify上傳圖片。現在我需要在保存文件之前驗證文件名。
我已經看過不同的解決方案,但不能找到一個好的解決方案。
這裏是我的標準:
- 文件名必須全部使用小寫
- 文件名只能包含charaters [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
我recieving通過$ _FILES文件。這給了我下面的數據:
- $ _FILES [ 「文件」] [ 「名稱」] - 被上傳文件
- $ _FILES名[ 「文件」] [ 「型」] - 類型上傳文件的大小
- $ _FILES [「file」] [「size」] - 上傳文件的大小(以字節爲單位)
- $ _FILES [「file」] [「tmp_name」] - 臨時副本的名稱存儲在服務器上的文件
- $ _FILES [「file」] [「error」] - 文件上傳產生的錯誤代碼
UPDATE 2
我剛剛發現了一些東西。我可以使用getimagesize這將返回一個由7個元素組成的數組。其中一個元素[2]是IMAGETYPE_XXX。
所以我嘗試使用此代碼:
function getExts2($filename)
{
list(,,$type) = getimagesize($filename);
return $type;
}
但它只返回2號...
(我也嘗試使用exif_imagetype,但只得到PHP錯誤:調用未定義功能。)
'getimagesize'返回的類型可以通過'image_type_to_extension'函數轉換爲文件擴展名:http://us2.php.net/function.image_type_to_extension – 2009-12-08 23:51:58
@Ben:請參閱我對使用getimagesize的評論。 – Steven 2009-12-09 09:51:44