如何在PHP中获取文件的内容类型?

我正在使用PHP发送带有附件的电子邮件。附件可以是几种不同的文件类型(pdf,txt,doc,swf等)中的任何一种。

首先,脚本使用“ file_get_contents”获取文件。

后来,脚本在标头中回显:

Content-Type: <?php echo $the_content_type; ?>; name="<?php echo $the_file_name; ?>"

如何为$ the_content_type设置正确的值?


长风秋雁
浏览 1311回答 3
3回答

阿波罗的战车

我正在使用此函数,其中包括几个后备功能,以补偿旧版本的PHP或简单的不良结果:function&nbsp;getFileMimeType($file)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(function_exists('finfo_file'))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$finfo&nbsp;=&nbsp;finfo_open(FILEINFO_MIME_TYPE); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type&nbsp;=&nbsp;finfo_file($finfo,&nbsp;$file); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finfo_close($finfo); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once&nbsp;'upgradephp/ext/mime.php'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type&nbsp;=&nbsp;mime_content_type($file); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$type&nbsp;||&nbsp;in_array($type,&nbsp;array('application/octet-stream',&nbsp;'text/plain')))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$secondOpinion&nbsp;=&nbsp;exec('file&nbsp;-b&nbsp;--mime-type&nbsp;'&nbsp;.&nbsp;escapeshellarg($file),&nbsp;$foo,&nbsp;$returnCode); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($returnCode&nbsp;===&nbsp;0&nbsp;&&&nbsp;$secondOpinion)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type&nbsp;=&nbsp;$secondOpinion; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$type&nbsp;||&nbsp;in_array($type,&nbsp;array('application/octet-stream',&nbsp;'text/plain')))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once&nbsp;'upgradephp/ext/mime.php'; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$exifImageType&nbsp;=&nbsp;exif_imagetype($file); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($exifImageType&nbsp;!==&nbsp;false)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type&nbsp;=&nbsp;image_type_to_mime_type($exifImageType); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$type;}它尝试使用较新的PHP&nbsp;finfo函数。如果这些选项不可用,它将使用mime_content_type替代方法,并包括Upgrade.php库中的直接替换项,以确保存在该替换项。如果这些命令没有返回任何有用的信息,它将尝试使用OS的file命令。仅在* NIX系统上可用的AFAIK,如果打算在Windows上使用它,则可能需要更改或取消该设置。如果没有任何效果,它将exif_imagetype仅作为图像的后备。我已经注意到,不同的服务器在支持mime类型的功能方面差异很大,而且Upgrade.php的mime_content_type替代还远远不够完美。有限的exif_imagetype功能,无论是原始功能还是Upgrade.php替换功能,都可以正常运行。如果您只关心图像,则可能只想使用最后一个。

catspeake

在php中拥有它非常容易。只需调用以下php函数&nbsp;mime_content_type<?php &nbsp;&nbsp;&nbsp;&nbsp;$filelink=&nbsp;'uploads/some_file.pdf'; &nbsp;&nbsp;&nbsp;&nbsp;$the_content_type&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;check&nbsp;if&nbsp;the&nbsp;file&nbsp;exist&nbsp;before &nbsp;&nbsp;&nbsp;&nbsp;if(is_file($file_link))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$the_content_type&nbsp;=&nbsp;mime_content_type($file_link); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;You&nbsp;can&nbsp;now&nbsp;use&nbsp;it&nbsp;here.?>函数mime_content_type()的PHP文档&nbsp;希望对您有所帮助

慕尼黑的夜晚无繁华

这是一个使用finfo_open的示例,该示例在PHP5和PECL中可用:$mimepath='/usr/share/magic';&nbsp;//&nbsp;may&nbsp;differ&nbsp;depending&nbsp;on&nbsp;your&nbsp;machine//&nbsp;try&nbsp;/usr/share/file/magic&nbsp;if&nbsp;it&nbsp;doesn't&nbsp;work$mime&nbsp;=&nbsp;finfo_open(FILEINFO_MIME,$mimepath);if&nbsp;($mime===FALSE)&nbsp;{ &nbsp;throw&nbsp;new&nbsp;Exception('Unable&nbsp;to&nbsp;open&nbsp;finfo');}$filetype&nbsp;=&nbsp;finfo_file($mime,$tmpFileName);finfo_close($mime);if&nbsp;($filetype===FALSE)&nbsp;{ &nbsp;throw&nbsp;new&nbsp;Exception('Unable&nbsp;to&nbsp;recognise&nbsp;filetype');}另外,您可以使用已弃用的&nbsp;mime_ content_类型函数:$filetype=mime_content_type($tmpFileName);或使用操作系统的内置功能:ob_start();system('/usr/bin/file&nbsp;-i&nbsp;-b&nbsp;'&nbsp;.&nbsp;realpath($tmpFileName));$type&nbsp;=&nbsp;ob_get_clean();$parts&nbsp;=&nbsp;explode(';',&nbsp;$type);$filetype=trim($parts[0]);
打开App,查看更多内容
随时随地看视频慕课网APP