2

我有以下脚本:

function listFolderFiles($dir){
    $ffs = scandir($dir);
    echo '<ol>';
    foreach($ffs as $ff){
        if($ff != '.' && $ff != '..'){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</li>';
        }
    }
    echo '</ol>';
}
listFolderFiles('upload');

我的问题是我想检测一个文件是视频(mp4 或 mov)类型,我如何检测 $ff 是否是视频类型?

4

10 回答 10

10
    // Type contains video/mp4,video/avi,video/mpeg,video/mpg etc
    if(preg_match('/video\/*/',$_FILES['add_image_image']['type'])): 
        echo "THIS IS A VIDEO FILE";
    else:
          echo "NOT A VIDEO FILE";           
    endif;
于 2015-08-22T06:21:30.590 回答
8
if(end(explode(".",$ff)) =="mp4")
{
echo "its an mp4 movie";
}

你去吧,对于不区分大小写的扩展版本

<?php
$ff="abc.MP4";
if(strtolower(end(explode(".",$ff))) =="mp4")
{
echo "its an mp4 movie";
}
?>
于 2013-08-19T06:46:09.200 回答
5

使用mime_content_typemime_content_type php.net

if (mime_content_type($dir.'/'.$ff)=='video/mp4')
    echo "its mp4";
于 2013-08-19T08:09:36.140 回答
5

我使用这段代码:

$mimeType = mime_content_type(public_path('uploads/' . $file));
$fileType = explode('/', $mimeType)[0]; // video|image

if ($fileType === 'video') {
    // do something
}
于 2019-01-17T20:58:07.877 回答
3

请使用类似的工具file。此答案具有安全意识,并且是对上传文件类型的一般响应。使用的第二个优点file是它会告诉您有关所使用格式的更多详细信息。有很多格式组合可以合法地存储在“*.mpg”文件中。您可能无法处理所有这些问题。

我做了一个更详细的网络搜索,有一个重复的文本文章列表,但没有发布可靠的解决方案。有一个fileinfo形式的“魔术字节”检测器。这被编译成最新版本的 PHP(它的标准扩展)。

注意: mime_content_type() 已弃用。同样,如果需要,请尝试fileinfo

于 2013-08-19T07:40:17.733 回答
2

你可以实现preg_match

if(preg_match('/^.*\.(mp4|mov)$/i', $filename)) {
    echo $filename;
}

您可以附加另一个视频分机,例如:(mp4|mov|mpg|mpeg|wmv|mkv)

于 2013-08-19T06:48:42.797 回答
2

你也可以试试这个。应该相当准确和高性能

<?php 
 function isVideo($file) {
   return is_file($file) && (0 === strpos(mime_content_type($file), 'video/'));
 }
?>
于 2020-04-02T01:21:20.840 回答
1

我最近使用它来获取文件类型,即图像或视频:

explode('/', $request->article_thumbnail->getMimeType())[0]
于 2021-08-26T21:51:51.783 回答
0

获取上传文件的 mime 类型并检查如下类型,

$mime = $file->getMimeType;
$videoJS = array('video/mp4','video/ogg','video/webm');

if(array_search($mime, $videoJS) !== false) {
    //do upload
}
于 2013-08-19T06:56:56.283 回答
0
$fileType = exec( 'file --mime-type '.escapeshellarg($filePath)); //e.g. output -> /tmp/somefile.mov: video/quicktime
$fileType = substr($fileType, strpos($fileType, ": ") + 2); //strip away file path -> video/quicktime
$fileType = substr($fileType, 0,strpos($fileType, "/")); //strip away whatever video type -> video
if ($fileType == 'video') $fileType = 'im a video!';

此代码使用带有选项 --mime-type 的 unix 'file' 命令来最小化输出以便于解析。不确定是否有更好的方法来解析输出。

还要确保您具有正在检查的文件的读取权限。

于 2015-08-10T05:12:50.637 回答