10

リモートファイルのMIMEタイプをチェックする最速の方法は何ですか...最初のバイトからいくつかを読み取ることを考えています...物事を正しくする方法を考えるのに数時間を費やしていますが、何も考えていません...リモートファイルがmp3であるかどうかを確認する必要がありますが、高速チェックである必要があります...

4

3 に答える 3

16

PHP curl_getinfo()

<?php
    # the request
    $ch = curl_init('http://www.google.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);

    # get the content type
    echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

    # output
    // text/html; charset=ISO-8859-1
?>

出力

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Fri, 09 Apr 2010 20:35:12 GMT
Expires: Sun, 09 May 2010 20:35:12 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219

ファイルに実際の MP3 データまたはその他のメディア形式が含まれているかどうかを実際に確認するには、getID3()を使用します。

于 2012-09-29T22:07:56.120 に答える
6

HEAD リクエストを作成します。サーバーが主張する Content-Type を確認します。

このスタックオーバーフローの質問では、PHP を介した HTTP ヘッダーへのアクセスについて説明しています。

于 2012-09-29T22:04:00.327 に答える
1

Content-Type信頼しているリモートサーバーのみをチェックする場合:

  • リモート サーバーが悪意を持っており、意図的に間違ったコンテンツ タイプを提供している可能性があります
  • Content-Type はファイル拡張子を使用して生成されるため、悪意のあるユーザーが許可された拡張子を持つ間違ったファイル タイプを保存して、セキュリティをバイパスする可能性があります。

より安全な方法は、ファイルを一時フォルダーにダウンロードし、 を使用mime_content_typeしてローカルで MIME タイプを確認することmagic.mimeです。

この手法では、マジック ナンバーのみを使用し、バイパス可能なファイルの最初のバイト (ヘッダー) のみを読み取ります。

最も安全な方法は、指定されたファイルが必要なタイプに対して有効であることを検証するライブラリを使用することです。

于 2019-11-02T00:40:30.797 に答える