ホームページ > バックエンド開発 > PHPチュートリアル > PHP でファイルの「Content-Type」をどのように判断しますか?

PHP でファイルの「Content-Type」をどのように判断しますか?

Mary-Kate Olsen
リリース: 2024-11-27 07:52:14
オリジナル
667 人が閲覧しました

How do you determine the `Content-Type` of a file in PHP?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート