繁体   English   中英

如何通过 PHP 中的文件句柄检测 MIME 类型?

[英]How do I detect MIME type via a file handle in PHP?

我在 5.4 上并希望从我的文件句柄中检测 mime 类型。 我知道我可以保存一个文件,然后通过传递字符串来使用函数,但我们想避免使用字符串。 那么有没有没有任何字符串的方法?

不是传递文件句柄或字符串,而是传递SplFileObject 使用它,您无需直接调用文件系统函数即可获得对文件的 OO 访问权限。 仍然可以通过在对象上调用 ->getRealPath() 来使用需要路径名的函数。

$finfo     = new finfo(FILEINFO_MIME_TYPE); 
$mime_type = $finfo->file( $fileObject->getRealPath() );

如果您的 PHP 安装支持Fileinfo

$finfo = new finfo;
$mime = $finfo->file($file, FILEINFO_MIME);
finfo_close($finfo);

$file$file的完整路径。 $mime将包含它的 MIME 类型,例如 'image/jpeg' 表示 JPG 图像或 'text/x-php' 表示 PHP 脚本。

使用fileinfo

$fileinfo = finfo_file($finfo, $file, FILEINFO_MIME);     
finfo_close($finfo);

或者,您可以采用面向对象的方式:

$finfo = new finfo();
$file = '/path/to/file/';
$fileinfo = $finfo->file($file, FILEINFO_MIME);

使用stream_get_meta_data提取uri

$mime = mime_content_type(
    stream_get_meta_data($fh)['uri']
);

$fh是我们的文件句柄

AFAIK 文件内容字节中没有任何内容专门告诉 mime 类型。 您有两个选择:

  1. 检测检查字节的内容(实际上,考虑到所涉及的难度和性能影响,我认为这不应被视为一种选择)。
  2. 检测检查文件扩展名的 mime 类型(如果存在此类扩展名):此方法不是防错方法,但它是公认的执行此操作的方式 (IMO)。 如果文件没有任何扩展名,那么您就有一个不容易解决的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM