1

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

<?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"; 
}

?>
4

3 回答 3

3

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

将初始条件更改为简单:

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

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

于 2013-05-30T17:17:05.830 回答
2

而不是检查.[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

于 2013-05-30T17:19:19.337 回答
1

在我看来,更改 php.ini 文件,例如 'upload_max_filesize=500M'、'post_max_size=500M'、'memory_limit=250M'、'max_input_time=45000' 和 'max_execution_time=30000'。

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

于 2013-08-28T07:40:05.897 回答