来自 PHP 文件信息的不正确/不受欢迎的 ogv MIME 类型

Posted

技术标签:

【中文标题】来自 PHP 文件信息的不正确/不受欢迎的 ogv MIME 类型【英文标题】:Incorrect/undesirable ogv MIME type from PHP fileinfo 【发布时间】:2018-02-08 08:25:04 【问题描述】:

我在我拥有的大多数服务器上都试过这个,php 似乎为 ogv 视频文件返回 application/ogg。这很奇怪,因为 Apache mime 配置文件清楚地列出了video/ogg(也不是可取的,但至少它是有意义的,因为信息应该来自那里)。最初我在响应式文件管理器中遇到了这个问题,但能够独立重现。

代码:

$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 一样。

【问题讨论】:

如果没有比这里执行的更深入的分析,就不可能知道 Ogg 容器实际包含什么。 很高兴知道。我会对有关如何强制 PHP 返回我想要的 ogv 的 MIME 类型的信息感到满意——最好不要更改 RFM 代码。即使了解 PHP 从哪里获取这种类型(直接从文件头?这似乎不太可能,但可能)可能允许我强制它使用 .htaccess 来代替。 【参考方案1】:

finfo_file 正在使用 Linux file 命令:https://linux.die.net/man/1/file

finfo_file的输出:

application/ogg; charset=binary

file -i sample.ogv的输出

application/ogg; charset=binary

一种解决方案是使用apache_lookup_uri,这听起来可能对您有用,因为您在 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)

【讨论】:

谢谢。记录在案:使用 apache_lookup_uri 不起作用,最终我不得不修改 Responsive FileManager 代码来解决这个问题。希望它对其他人有用。

以上是关于来自 PHP 文件信息的不正确/不受欢迎的 ogv MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

<div> 标签是 <p> 标签的不受欢迎的替代品吗?

使用PHP将视频文件转换为mp4、flv、webgl、webm、ogv等

使用 HTML5 视频时,我需要 WebM 和 ogv 格式吗?

如何在我的不和谐机器人上实时显示来自文件(文本)的信息

为啥 XML::Simple 不受欢迎?

盘点丨开发者最讨厌的编程语言:Perl 名列第一,PHPObjective-C 和 Ruby 都在其中