【问题标题】:Video File Is Not Uploading视频文件未上传
【发布时间】:2012-07-13 16:46:40
【问题描述】:

我有此代码,但此代码不允许我上传任何类型的视频文件。 这总是显示“请选择要上传的文件”。

上传文件代码如下:

$fileElementName = 'ufile';
if (!empty($_FILES[$fileElementName]['error'])) {
    switch ($_FILES[$fileElementName]['error']) {
            case '1':
                $error = 'You Are Not Allowed To Upload File Of This Size';
                break;
            case '2':
                $error = 'You Can Not Not Upload File Of This Size';
                break;
            case '3':
                $error = 'The uploaded file was only partially uploaded';
                break;
            case '4':
                $error = 'Not Able To Upload';
                break;

            case '6':
                $error = 'Server Error Please Try Again Later';
                break;
            case '7':
                $error = 'Failed to write file to disk';
                break;
            case '8':
                $error = 'File upload stopped by extension';
                break;
            case '999':
            default:
                $error = 'Error Found But Did Not Found What Was Problem';
        }
} elseif (empty($_FILES['ufile']['tmp_name']) || $_FILES['ufile']['tmp_name'] == 'none') {
    $error = 'Please Select File To Upload';
    $success = FALSE;
} else {
    $file = $_FILES['ufile']['name'];
    move_uploaded_file($_FILES["ufile"]["tmp_name"], $path);
}

echo json_encode($arr);

在上面的代码中,$path 是 upload/ 是正确的——它适用于除视频之外的所有文件。

此代码始终显示“请选择要上传的文件”

【问题讨论】:

    标签: php file-upload


    【解决方案1】:

    您的错误处理已损坏。在上传时,成功上传的错误代码为 0(UPLOAD_ERR_OK 常量)。你在做

    if (!empty(...))
    

    empty() 对于零值的计算结果为布尔值 TRUE,因此您基本上是在说“如果没有错误,就表现得像有错误一样”。

    您的代码确实应该是:

    if ($_FILES['ufile']['error'] !== UPLOAD_ERR_OK) {
        ... error handling switch() here ...
        die();
    }
    

    您随后对 tmp_name 的 empty() 检查也毫无意义。如果没有上传文件,那么无论如何您都会收到错误代码 4 (UPLOAD_ERR_NO_FILE)。

    然后对于 move_uploaded_file() 内容,您将上传的文件名提取到$file,然后将文件移动到$path,这在您的代码中的任何位置都没有设置。作为警告,永远不要在文件系统操作中直接使用用户提供的文件名。在该字段中嵌入路径信息是微不足道的,如果您不采取适当的清理/安全预防措施,您将允许恶意用户在您服务器上的任何文件上乱涂乱画。

    【讨论】:

      【解决方案2】:

      您是否定义了表单的编码类型?

      在form标签中插入enctype如下:enctype="multipart/form-data"

      【讨论】:

      • 此错误仅针对视频文件显示?我知道这听起来很傻,但是您检查过输入文件的名称吗?
      【解决方案3】:

      检查权限,如果 $path 存在等,将 move_uploaded_file 更改为复制,某些服务器对文件夹有限制权限

      编辑:也许同样的问题https://stackoverflow.com/a/3587158/1519436

      【讨论】:

      • @user1511547 检查服务器 MAX_FILE_UPLOAD
      • @user1511547 再次检查我的答案
      • 我不明白为什么 $_FILES['ufile']['tmp_name'] 为视频文件返回空
      • @user1511547 试试 var_dump($_FILE);和 var_dump($_FILES);
      • @user1511547 您尝试上传哪种文件(.mp4 等)?
      猜你喜欢
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2019-03-25
      • 2014-02-18
      • 1970-01-01
      • 2018-05-12
      • 2018-07-07
      • 2019-04-28
      相关资源
      最近更新 更多