2017-08-30 70 views
0

我在大多數服務器上都試過這種方式,而PHP似乎爲ogv視頻文件返回application/ogg。這很奇怪,因爲Apache mime配置文件清楚地列出了video/ogg(也不可取,但至少它是有道理的,因爲信息應該來自那裏)。最初我在響應文件管理器中遇到了這個問題,但能夠獨立重現它。來自PHP fileinfo的錯誤/不需要的ogv MIME類型

代碼:

$fileinfo = finfo_open(FILEINFO_MIME); 
$mime_type = finfo_file($fileinfo, $file); 
finfo_close($fileinfo); 

var_dump($mime_type); 

輸出:

string(31) "application/ogg; charset=binary" 

這是哪裏的信息來自哪裏,以及如何改變呢?

放置.htaccess指令似乎沒有任何幫助。這可能也很重要,我正在運行cPanel/WHM,但無法找到任何其他相關配置。此外,cPanel也爲ogv提供video/ogg,就像Apache一樣。

+2

不可能知道Ogg容器實際包含的內容沒有比在這裏執行的更深的分析。 –

+0

很高興知道。對於如何強制PHP返回我希望用於ogv的MIME類型的信息,我會滿意的 - 最好不要更改RFM代碼。即使瞭解PHP從何處獲取此類型(直接來自文件頭?這似乎不太可能,但可能)可能會讓我強制它使用.htaccess。 – Ynhockey

回答

0

finfo_file被利用Linux file命令:https://linux.die.net/man/1/file輸出finfo_file

輸出的 file -i sample.ogv

application/ogg; charset=binary 

一種解決方案是使用apache_lookup_uri這聽起來像它

application/ogg; charset=binary 

可因爲你在Apache上運行:http://php.net/apache_lookup_uri

var_dump(apache_lookup_uri('sample.ogv')); 

object(stdClass)#1 (16) { 
    ["status"]=> 
    int(200) 
    ["the_request"]=> 
    string(27) "GET /tmp/test.php HTTP/1.1" 
    ["method"]=> 
    string(3) "GET" 
    ["mtime"]=> 
    int(0) 
    ["clength"]=> 
    int(0) 
    ["chunked"]=> 
    int(0) 
    ["content_type"]=> 
    string(9) "video/ogg" 
    ["no_cache"]=> 
    int(0) 
    ["no_local_copy"]=> 
    int(1) 
    ["unparsed_uri"]=> 
    string(16) "/mime/sample.ogv" 
    ["uri"]=> 
    string(16) "/mime/sample.ogv" 
    ["filename"]=> 
    string(48) "/tmp/sample.ogv" 
    ["allowed"]=> 
    int(0) 
    ["sent_bodyct"]=> 
    int(0) 
    ["bytes_sent"]=> 
    int(0) 
    ["request_time"]=> 
    int(1504107700) 
} 
+0

謝謝。記錄:使用apache_lookup_uri無法正常工作,最終我不得不修改響應FileManager代碼來解決此問題。但希望它能爲別人工作。 – Ynhockey