簡體   English   中英

php中如何判斷一個文件是不是視頻類型?

[英]How to check a file is video type or not in php?

我有以下腳本:

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 是否是視頻類型?

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

使用mime_content_type mime_content_type php.net

if (mime_content_type($dir.'/'.$ff)=='video/mp4')
    echo "its mp4";

我使用這個代碼:

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

if ($fileType === 'video') {
    // do something
}

請使用類似file的工具。 此答案具有安全意識,並且是對上傳文件類型的一般響應。 使用file的第二個優點是它會告訴您有關所用格式的更多詳細信息。 有很多格式組合可以合法地存儲在“*.mpg”文件中。 您可能無法處理所有這些問題。

我做了一個更詳細的網絡搜索,有一個重復文本文章的列表,但沒有發布可靠的解決方案。 有一個fileinfo形式的“魔術字節”檢測器。 這被編譯成最新版本的 PHP(它是一個標准擴展)。

注意:不推薦使用 mime_content_type()。 同樣,如果需要,請嘗試fileinfo

您可以使用preg_match實現

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

您可以附加另一個視頻擴展,如: (mp4|mov|mpg|mpeg|wmv|mkv)

你也可以試試這個。 應該相當准確和高效

<?php 
 function isVideo($file) {
   return is_file($file) && (0 === strpos(mime_content_type($file), 'video/'));
 }
?>

我最近用它來獲取文件類型,即圖像或視頻:

explode('/', $request->article_thumbnail->getMimeType())[0]

獲取上傳文件的 MIME 類型並檢查類型如下,

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

if(array_search($mime, $videoJS) !== false) {
    //do upload
}
$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' 命令來最小化輸出以便於解析。 不確定是否有更好的方法來解析輸出。

還要確保您對正在檢查的文件具有讀取權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM