2016-12-07 94 views
2

我試圖限制我的上傳,只上傳文件擴展名爲pdf。 我以前有上傳工作,但任何擴展使用;php上傳文件的限制

$form = $_FILES['form']['name']; 
$upload = "forms/$form"; 
move_uploaded_file($_FILES['form']['tmp_name'],$upload); 

我現在試圖調整這隻上傳PDF,使用以下;

if (isset($_FILES['file'])) 
    $exten = explode("." , $_FILES['form']['name']); 
    $exten = $exten[1]; 
    $form = $_FILES['form']['name']; 
    $upload = "forms/$form"; 

    if (
     ($exten == "pdf") 
    || ($exten == "PDF")){ 
    move_uploaded_file($_FILES['form']['tmp_name'] , $upload); 

    } 

但是,文件不再上傳到目錄,而是接受任何擴展名。它在我的數據庫中輸入文件名。 我跟着這個,但不知道一個教程,我已經走了錯

+0

這種方法會給你錯誤的成功感,比如'somefile.pdf.ugly'。 – arkascha

+1

一般來說,這樣的檢查是否有意義是值得懷疑的。 「文件擴展名」是可以任意設置的。這是一個早已離去的地區的剩飯。如果您想限制文件類型,請檢查文件類型,而不是文件擴展名。 – arkascha

+0

爲什麼'isset($ _ FILES ['file'])'? – arkascha

回答

1

以獲得文件擴展名嘗試pathinfo與PATHINFO_EXTENSION參數,它會爲您節省時間

您還應該使用strtolower功能做一個對比,因爲例如.PDF/.PDF擴展會意外地你寫

if (isset($_FILES['file'])) { 
    $exten = pathinfo($_FILES['form']['name'], PATHINFO_EXTENSION); 
    $form = $_FILES['form']['name']; 
    $upload = "forms/$form"; 

    if (strtolower($exten) == 'pdf'){ 
    move_uploaded_file($_FILES['form']['tmp_name'] , $upload); 

    } 
} 

PS條件拒絕:你錯過了括號 isset功能之後或者是隻是一個複製粘貼問題?

+1

謝謝,它不上傳文件到目錄,如果不是PDF,但仍寫入文件名到數據庫。但我在那裏一半,所以謝謝 – Mucca019

+0

嘗試使用靜態路徑,只是爲了檢查你的是否是權限問題或路徑問題 –

+0

我的意思是像.php文件 - 它不會上傳這是正確的,但它仍然在數據庫列中寫入hello.php – Mucca019