PHP视频上传和检查视频类型

PHP视频上传和检查视频类型,php,html,Php,Html,我创建了带有视频大小和类型验证的上传文件。只允许使用webm、mp4和ogv文件类型,最大文件大小为2gb。我的php代码: if (isset($_POST['submit'])) { $file_name = $_FILES['file']['name']; $file_type = $_FILES['file']['type']; $file_size = $_FILES['file']['size']; $allowed_extensions = arr

我创建了带有视频大小和类型验证的上传文件。只允许使用webm、mp4和ogv文件类型,最大文件大小为2gb。我的php代码:

if (isset($_POST['submit']))
{
    $file_name = $_FILES['file']['name'];
    $file_type = $_FILES['file']['type'];
    $file_size = $_FILES['file']['size'];

    $allowed_extensions = array("webm", "mp4", "ogv");
    $file_name_temp = explode(".", $file_name);
    $extension = end($file_name_temp);
    
    $file_size_max = 2147483648;
    if (!empty($file_name))
    {
        if (($file_type == "video/webm") || ($file_type == "video/mp4") || ($file_type == "video/ogv") &&
            ($file_size < $file_size_max) && in_array($extension, $allowed_extensions))
        {
            if ($_FILES['file']['error'] > 0)
            {
                echo "Unexpected error occured, please try again later.";
            } else {
                if (file_exists("secure/".$file_name))
                {
                    echo $file_name." already exists.";
                } else {
                    move_uploaded_file($_FILES["file"]["tmp_name"], "secure/".$file_name);
                    echo "Stored in: " . "secure/".$file_name;
                }
            }
        } else {
            echo "Invalid video format.";
        }
    } else {
        echo "Please select a video to upload.";
    }
}

未正确验证您的扩展。。试试这个

if (isset($_POST['submit']))
{
    $file_name = $_FILES['file']['name'];
    $file_type = $_FILES['file']['type'];
    $file_size = $_FILES['file']['size'];

    $allowed_extensions = array("webm", "mp4", "ogv");
    $file_size_max = 2147483648;
    $pattern = implode ($allowed_extensions, "|");

    if (!empty($file_name))
    {    //here is what I changed - as you can see above, I used implode for the array
        // and I am using it in the preg_match. You pro can do the same with file_type,
        // but I will leave that up to you
        if (preg_match("/({$pattern})$/i", $file_name) && $file_size < $file_size_max)
        {
            if (($file_type == "video/webm") || ($file_type == "video/mp4") || ($file_type == "video/ogv"))
            {
                if ($_FILES['file']['error'] > 0)
                {
                    echo "Unexpected error occured, please try again later.";
                } else {
                    if (file_exists("secure/".$file_name))
                    {
                        echo $file_name." already exists.";
                    } else {
                        move_uploaded_file($_FILES["file"]["tmp_name"], "secure/".$file_name);
                        echo "Stored in: " . "secure/".$file_name;
                    }
                }
            } else {
                echo "Invalid video format.";
            }
        }else{
            echo "where is my mojo?? grrr";
        }
    } else {
        echo "Please select a video to upload.";
    }
}
if(isset($\u POST['submit']))
{
$file\u name=$\u FILES['file']['name'];
$file\u type=$\u FILES['file']['type'];
$file\u size=$\u FILES['file']['size'];
$allowed_extensions=数组(“webm”、“mp4”、“ogv”);
$file_size_max=2147483648;
$pattern=内爆($allowed_extensions,“|”);
如果(!空($file_name))
{//这里是我所更改的-正如您在上面看到的,我对数组使用了内爆
//我在preg_比赛中使用了它。你可以用file_类型做同样的事情,
//但我会让你决定
if(preg_match(“/({$pattern})$/i”,$file_name)&&$file_size<$file_size_max)
{
如果($file_type==“video/webm”)| |($file_type==“video/mp4”)| |($file_type==“video/ogv”))
{
如果($_FILES['file']['error']>0)
{
echo“出现意外错误,请稍后再试。”;
}否则{
如果(文件_存在(“安全/”$file_名称))
{
echo$file\u name。“已存在。”;
}否则{
移动上传的文件($文件[“文件”][“tmp文件名”],“安全/”$文件名);
echo“存储在:“.secure/”$文件名;
}
}
}否则{
echo“无效的视频格式。”;
}
}否则{
回声“我的魔力在哪里?”;
}
}否则{
echo“请选择要上载的视频。”;
}
}
函数fileSelected(){
var inputs=document.getElementsByClassName('myclass');
var输入=输入[0];
var file=input.files[0];
var name=file.name;
var size=file.size;
var type=file.type;
//警报(“类型:”+类型);
如果(类型!=“视频/mp4”)
{
警报(“选择了不合适的扩展”);
}
push({name:name,size:size});

}
您一定是出了什么问题。。复制并粘贴上面的代码。我对此进行了4次测试,效果良好,同时确保扩展正确。。请务必用小写字母写,以防万一。。虽然这不重要。我复制了你的代码并测试了很多次,仍然得到了“无效视频格式”的人。你可以在这里测试。。如果不起作用,请尝试另一个文件。。可能文件已损坏或某个文件已成功上载。顺便说一句,我在本地(wamp服务器)工作。我也在本地(linux)进行了测试。。尝试打印($\文件)以查看您要获取的类型。
http://stream.flowplayer.org/bauhaus/624x260.webm
http://stream.flowplayer.org/bauhaus/624x260.mp4
http://stream.flowplayer.org/bauhaus/624x260.ogv
if (isset($_POST['submit']))
{
    $file_name = $_FILES['file']['name'];
    $file_type = $_FILES['file']['type'];
    $file_size = $_FILES['file']['size'];

    $allowed_extensions = array("webm", "mp4", "ogv");
    $file_size_max = 2147483648;
    $pattern = implode ($allowed_extensions, "|");

    if (!empty($file_name))
    {    //here is what I changed - as you can see above, I used implode for the array
        // and I am using it in the preg_match. You pro can do the same with file_type,
        // but I will leave that up to you
        if (preg_match("/({$pattern})$/i", $file_name) && $file_size < $file_size_max)
        {
            if (($file_type == "video/webm") || ($file_type == "video/mp4") || ($file_type == "video/ogv"))
            {
                if ($_FILES['file']['error'] > 0)
                {
                    echo "Unexpected error occured, please try again later.";
                } else {
                    if (file_exists("secure/".$file_name))
                    {
                        echo $file_name." already exists.";
                    } else {
                        move_uploaded_file($_FILES["file"]["tmp_name"], "secure/".$file_name);
                        echo "Stored in: " . "secure/".$file_name;
                    }
                }
            } else {
                echo "Invalid video format.";
            }
        }else{
            echo "where is my mojo?? grrr";
        }
    } else {
        echo "Please select a video to upload.";
    }
}