2011-07-13 61 views
1

我正在使用以下代碼供用戶上傳圖像。限制上傳文件的名稱

if ((($_FILES["companylogofile"]["type"] == "image/jpeg") 
|| ($_FILES["companylogofile"]["type"] == "image/pjpeg")) 
&& ($_FILES["companylogofile"]["size"] < 75000)) 
    { 
    if ($_FILES["companylogofile"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["companylogofile"]["error"] . "<br />"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["companylogofile"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["companylogofile"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["companylogofile"]["size"]/1024) . " Kb<br />"; 
    echo "Temp file: " . $_FILES["companylogofile"]["tmp_name"] . "<br />"; 

    if (file_exists("Template/" . $_FILES["companylogofile"]["name"])) 
     { 
     echo $_FILES["companylogofile"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["companylogofile"]["tmp_name"], 
     "Template/" . $_FILES["companylogofile"]["name"]); 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 

正如您所看到的,我只接受要上傳的.jpeg文件,並對大小進行限制。我還需要做的是爲他們上傳的文件的名稱添加限制。基本上我只想讓文件上傳,如果他們被命名爲:標誌。有沒有辦法限制上傳文件的名稱?

謝謝!

+1

難道你不能只爲$ _FILES [「companylogofile」] [「name」]在頂部添加一個額外的檢查,就像你爲FILE數組的其他部分所做的一樣嗎? – thescientist

+0

比利你可以在上傳的臨時文件移動到目的地的過程中重命名上傳的文件。例如,如果這是唯一有效的文件名,則總是將其重命名爲logo.jpg。 – hakre

+0

「模板/」。 $ _FILES [ 「companylogofile」] [ 「名稱」]);我已將其更改爲:「模板/」。 $ _FILES [ 「companylogofile」] [ 「Logo.jpg」]);那是你在說什麼嗎? – Billy

回答

1
if (!preg_match("/logo/i", $_FILES["companylogofile"]["name"])) die("File have to contain 'logo' in name"); 

如果你正在尋找的正是「Logo.jpg」,它是由

if ("Logo.jpg" != $_FILES["companylogofile"]["name"]) die("File have to contain 'logo' in name"); 
0

達到什麼構成「壞」文件」 Logo3標誌與 - 些 - 長散漫文件名

function isValidFileName($filename) { 
    ... what do you want here? 
} 

if (!isValidFileName($_FILES['companylogoimage']['name'])) { 
    die("Ooops, bad filename"); 
} 

僅供參考:??不要使用$ _FILES數組進行驗證在['type']值這是MIME類型日的。 e文件由用戶提供 - 可以很容易地更改爲騙你。使用類似getimagesize()的東西來使服務器確定圖像的類型。

+0

是的,除了普通的Logo之外的任何東西都是不好的文件名。 – Billy

+0

'if($ _FILES ['companylogoimage'] ['name']!''Logo'){... bad image ...}' –

0

是的,只是測試$_FILES['companylogofile']['name']。例如:

if (false === strpos(strtolower($_FILES['companylogofile']['name']), 'logo')) { 
    echo 'Error!'; 
    unlink($_FILES['companylogofile']['tmp_name']; 
    return; 
} 

但是,您爲什麼要對上傳進行如此煩人的限制?我希望你沒有想到它會使它變得安全或任何東西?

+0

上傳臨時文件會在請求結束時自動刪除。不需要兩次解除鏈接。 – hakre