【问题标题】:PHP - File Upload spitting out errorPHP - 文件上传吐出错误
【发布时间】:2012-05-01 05:04:41
【问题描述】:

我正在做一个简单的文件上传练习,我从我的 WebDev 课程中得到 - 实际上我们只需要复制代码并集成它来满足我们的需求。 我试图为我的项目这样做,遗憾的是它会不断重复同样的错误。

<?php

$allowed_filetypes = array('.jpg','.gif','.bmp','.png', '.jpeg'); 
$max_filesize = 524288; 
$upload_path = 'uploads/'; 

$filename = $_FILES['userfile']['name']; 
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); 
var_export($_FILES, $ext);

 if(!in_array($ext,$allowed_filetypes))
  die('The file you attempted to upload is not allowed.');


 if(filesize($_FILES['usrfile']['tmp_name']) > $max_filesize)
  die('The file you attempted to upload is too large.');


 if(!is_writable($upload_path))
  die('You cannot upload to the specified directory, please CHMOD it to 777.');


 if(move_uploaded_file($_FILES['usrfile']['tmp_name'],$upload_path . $filename))
     echo 'Your file upload was successful, view the file <a href="' . $upload_path .  $filename . '" title="Your File">here</a>';
  else
     echo 'There was an error during the file upload.  Please try again.';

?>

它不断给我“错误的文件类型”错误,所有定义的类型都在数组中。

<form id='upload' action="uploadfile.php" method="POST" enctype="multipart/form-data">
    <table>
        <tr>
            <td >Choose a File to Upload</td> 
        </tr>
        <tr>
            <td >Select File</td>
            <td  ><input type="file"  name="userfile"></td>
        </tr>
        <tr>
            <td colspan=2 id="sub"><input type="submit" name="submit" value="submit" ></td>
        </tr>
    </Table>
</form>

【问题讨论】:

  • 首先回显文件类型。

标签: php file file-upload upload


【解决方案1】:

$filename = $_FILES['usrfile']['name'];

【讨论】:

    【解决方案2】:

    'tmp_name' 索引包含一个临时 文件名,而不是文件真正拥有的文件名。这存储在'name' 中。有关信息,请参阅this page

    此外,您应该:

    1. 检查'error' 索引中的错误。
    2. 使用pathinfo获取扩展,
    3. 在搜索数组之前将其小写,
    4. 为上传的文件名添加一些随机性以避免覆盖现有文件。

    【讨论】:

    • 可悲的是,将其更改为“名称”并没有帮助,仍然给我提示该文件不被允许的错误 ==> 请先查看 echo in if
    • 那么您应该在第一个 if 之前var_export($_FILES, $ext); 并将其发布在您的问题中(以及您现在使用的更新代码)。
    • @Quantaqa:var_export 是一个调试工具,而不是一个神奇的修复——我的想法是看看它为你打印了什么值。你能把它输出到页面上吗?
    • 对不起,我不熟悉 var_export() ==> 输出:array ( )您尝试上传的文件不被允许。
    • 如果它产生一个空数组,这意味着你的$_FILES 是空的。您提交的 HTML 表单是什么样的 - 它有 enctype="multipart/form-data" 属性吗?
    【解决方案3】:

    您可以使用它,因为首先您必须始终回显 $_FILES 数组,然后开始调试。 从

    更改此行
    $allowed_filetypes = array('.jpg','.gif','.bmp','.png', '.jpeg'); 
    

    $allowed_filetypes = array('jpg','gif','bmp','png', 'jpeg'); 
    

    改变下一行

    if(filesize($_FILES['usrfile']['tmp_name']) > $max_filesize)  
    

    if(filesize($_FILES['usrfile']['size']) > $max_filesize)
    

    并删除该行

    $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); 
    

    并改变这一行

    if(!in_array($ext,$allowed_filetypes))  
    

    if(!in_array($_FILES['usrfile']['type'],$allowed_filetypes))
    

    【讨论】:

      猜你喜欢
      • 2012-06-18
      • 2010-09-05
      • 2012-05-04
      • 2015-05-19
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多