2016-08-05 65 views
0

我建立在一個簡單的上傳系統,下面我有上傳系統部分的代碼和列表。所以,我列出了上傳所有文件的目錄,但是當用戶單擊下載按鈕時,它不起作用,再加上顯示大小的代碼顯示爲0但該文件上傳的事實。PHP上傳的文件檢索錯誤

我發現如果文件上傳到我的根目錄,它是完全正常工作。當我將目錄切換到根目錄時,文件會顯示出來,並且大小和下載部分都可以正常工作。

上傳系統代碼

if(isset($_FILES['image'])){ 
    $errors= array(); 
    $file_name = $_FILES['image']['name']; 
    $file_size =$_FILES['image']['size']; 
    $file_tmp =$_FILES['image']['tmp_name']; 
    $file_type=$_FILES['image']['type']; 
    $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); 


    $extensions= array("jpeg","jpg","png", "gif"); 

    if(in_array($file_ext,$extensions)=== false){ 
    $errors[]="extension not allowed, please choose a JPEG, PNG, or GIF file."; 
    } 

    if(empty($errors)==true){ 
     move_uploaded_file($file_tmp, "dir/.$file_name"); 
    }else{ 
    print_r($errors); 
    } 

}

檢索上傳文件代碼:

 $resource = opendir("dir/."); 

     while (($entry = readdir($resource)) != false) { 
     $download = '<a href="' . $entry . '"> Download </a> '; 

     if ($entry != '.' && $entry != '..') { 
      echo "<tr> <td>" . $entry . "</td> <td>" . formatSizeUnits(filesize($entry)) . "</td> <td> $download </td></tr>"; 
     } 
    } 
+0

你檢查了權限嗎? – msantos

+0

你也可以從move_uploaded_file($ file_tmp,「dir /.$ file_name」)中刪除點並使用:move_uploaded_file($ file_tmp,「dir/$ file_name」)。檢查它是否有效。 – msantos

回答

0

readdir()不會返回它找到的文件的完整路徑,從字面上只有他們的名字。由於您打開了dir/作爲您的源代碼目錄,因此您將獲得somefile.txt而不是dir/somefile.txt,這意味着您的文件大小失敗,因爲它正在查找錯誤的地方。這不是0 bytes,它是一個布爾值FALSE被轉換爲整數0.