PHP におけるコンテンツ タイプの識別について
メールにファイルを添付する場合、そのコンテンツ タイプを正確に判断することが重要です。 PHP は、これを実現するためのさまざまなメソッドを提供します。
コンテンツ タイプを決定する関数
このニーズに対処するために、提供されるソリューションは次の関数を提供します。
function getFileMimeType($file) { // Attempt to use PHP finfo functions if (function_exists('finfo_file')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $type = finfo_file($finfo, $file); finfo_close($finfo); } // Fallback to mime_content_type alternative else { require_once 'upgradephp/ext/mime.php'; $type = mime_content_type($file); } // Further fallbacks if previous attempts failed if (!$type || in_array($type, array('application/octet-stream', 'text/plain'))) { // Use file command if available $secondOpinion = exec('file -b --mime-type ' . escapeshellarg($file), $foo, $returnCode); if ($returnCode === 0 && $secondOpinion) { $type = $secondOpinion; } } if (!$type || in_array($type, array('application/octet-stream', 'text/plain'))) { // Attempt to use exif_imagetype for images require_once 'upgradephp/ext/mime.php'; $exifImageType = exif_imagetype($file); if ($exifImageType !== false) { $type = image_type_to_mime_type($exifImageType); } } return $type; }
関数の説明
この関数は、 MIME タイプを識別するための PHP の finfo 関数。これが失敗した場合は、mime_content_type 関数に戻ります。これらのどちらも機能しない場合は、*NIX システム上で「file」コマンドを実行しようとします。最後に、exif_imagetype を使用して画像の MIME タイプを決定します。
サーバーごとに MIME タイプ関数のサポートが異なり、Upgrade.php の mime_content_type の置換が常に信頼できるとは限らないことに注意してください。ただし、exif_imagetype 関数はサーバー間で一貫して実行される傾向があります。画像ファイルのみに関係する場合は、この関数を MIME タイプの決定にのみ使用することを検討してください。
以上がPHP でファイルの「Content-Type」をどのように判断しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。