如何使用php上传mp3,mp4,3gp文件?

时间:2013-05-30 17:10:46

标签: php file-upload

我正在制作在线存储,并希望用户上传带有类别的文件,我已经成功完成了图片,但我无法使用音频&视频格式,有什么帮助吗?

<?php 

$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$extension = end(explode(".", $_FILES["file"]["name"]));
if((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/  jpg") || 
    ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) 
{ 
    if ($_FILES["file"]["error"] > 0) 
        { 
            echo  "Return Code: " . $_FILES["file"]["error"] . "<br>";
        } else {
            echo "Upload: " . $_FILES["file"]["name"] . "<br>"; echo "Type: " .  $_FILES["file"]["type"] . "<br>";
            echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 
            if (file_exists("upload/" . $_FILES["file"]["name"])) 
                { 
                    echo $_FILES["file"]["name"] . " already exists. "; 
                } else {  
                        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
                        echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
                        } 
                }
} else { 
    echo "Invalid file"; 
}

?>

3 个答案:

答案 0 :(得分:3)

您的代码已经损坏。 $_FILES[$file]["type"]毫无意义。它由浏览器上传文件提供,而不是由服务器提供,因此经常丢失或错误。应该忽略它。

将初始条件更改为:

if (($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) {

将解决这个问题。但是,您需要增加大小限制(当前为20000 = 20 KB),因为对于视频文件来说,这显然会太小。 :)

答案 1 :(得分:1)

不是检查文件的扩展名.[a-z](可以更改) - 为什么不检查文件本身? (即使$_FILES["file"]["type"]可以说谎)

function get_mime($file) {
  if (function_exists("finfo_file")) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    $mime = finfo_file($finfo, $file);
    finfo_close($finfo);
    return $mime;
  } else if (function_exists("mime_content_type")) {
    return mime_content_type($file);
  } else if (!stristr(ini_get("disable_functions"), "shell_exec")) {
    // https://stackoverflow.com/a/134930/1593459
    $file = escapeshellarg($file);
    $mime = shell_exec("file -bi " . $file);
    return $mime;
  } else {
    return false;
  }
}

https://stackoverflow.com/a/12191939/99923

答案 2 :(得分:1)

对于我的意见,更改php.ini文件,如''upload_max_filesize = 500M','post_max_size = 500M','memory_limit = 250M','max_input_time = 45000'和'max_execution_time = 30000'。

我编辑了这个php.ini文件,我可以上传音频和视频文件。