2016-08-05 155 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.