使用php查找所有文件格式的Mime类型的文件或URL

Hit*_*esh 6 php content-type cdn amazon-web-services mime-types

嗨,我正在寻找最好的方法来找出任何本地文件或网址的PHP中的mime类型.我已经尝试了php的mime_content_type函数,但由于它已被弃用,我正在寻找更好的解决方案在php中的所有文件格式.

mime_content_type — Detect MIME Content-type for a file ***(deprecated)***
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下功能了

echo 'welcome';
if (function_exists('finfo_open')) {
    echo 'testing';
    $finfo = finfo_open(FILEINFO_MIME);
    $mimetype = finfo_file($finfo, "http://4images.in/wp-content/uploads/2013/12/Siberian-Tiger-Running-Through-Snow-Tom-Brakefield-Getty-Images-200353826-001.jpg");
    finfo_close($finfo);
    echo $mimetype;
}
Run Code Online (Sandbox Code Playgroud)

以上代码对我不起作用,我只看到welcome输出.我不确定我在这里做错了什么.


下面的代码在我的本地工作,但它不适用于网址.

$file = './apache_pb2.png';
$file_info = new finfo(FILEINFO_MIME);  // object oriented approach!
$mime_type = $file_info->buffer(file_get_contents($file));  // e.g. gives "image/jpeg"
$mime  = explode(';', $mime_type);
print $mime[0];
Run Code Online (Sandbox Code Playgroud)

是否有一些工作为两者(网址和本地)工作.为php.also中的mime_content_type函数以外的所有内容(图像,视频,文件等)设置mime类型的最佳做法是什么.建议使用php中的mime_content_type函数,是php中的最佳实践吗?

Sha*_*ran 10

利用file_infoPHP中的FILEINFO_MIME_TYPE标志作为参数.

[从PHP手册中获取的示例]

<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
    echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
?>
Run Code Online (Sandbox Code Playgroud)

OUTPUT :

text/html
image/gif
application/vnd.ms-excel
Run Code Online (Sandbox Code Playgroud)

EDIT :

您需要启用您的扩展程序 PHP.ini

;extension=php_fileinfo.dll
Run Code Online (Sandbox Code Playgroud)

从该行中删除分号并重新启动您的网络服务器,您就可以开始使用了.
Installation Doc.


Hit*_*esh 6

找到答案,

要找到文件扩展名的最佳方法是对本地文件和url 使用path_info.

$info     = pathinfo($filename);

$basename = $info['basename'];

$ext      = $info['extension'];
Run Code Online (Sandbox Code Playgroud)

为mime类型创建一个数组

$mimeTypes = array("mp4" => "video/mp4");//- > 请参见此处此处的示例

//get the mime type for file
$type = isset($this->mime_types[$ext]) ? $this->mime_types[$ext] : "application/octet-stream";
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于url和本地文件.

注意 :

那些与CDN mp4视频mime类型视频/ mp4问题挣扎的人 - 我在我的class.s3.php文件中做了一个更改 - >在mime_type []数组中,并且还使用putObject()函数交叉检查.

mime类型的设置总是在编码方面完成,而不是在AWS S3存储桶中完成,我们需要使用AWS PHP Class file or sdkmime类型进行操作或在核心类文件中进行必要的更改(例如class.s3..sp)

  • 好的,如果链接看起来像"https://avatars2.githubusercontent.com/u/124070?v=3&s=400",你做了什么?它没有任何扩展! (2认同)

lbs*_*eek 5

$type = image_type_to_mime_type(exif_imagetype($file));
Run Code Online (Sandbox Code Playgroud)