0

リモート サーバーで mp3 ファイルをテストし、コンテンツ タイプがメディアかどうかを確認しようとしています。私はすでに使用CURLOPT_FOLLOWLOCATIONしていCURLINFO_CONTENT_TYPEますが、最後の場所になるということですか。URLで試してみたところ、無効であると言われましたが、URLにアクセスすると、ストリーミングされました。このコードのほとんどをhttps://stackoverflow.com/a/12733693から取得し、いくつかの調整を加えましたが、常に正しい結果が得られるとは限らないのではないかと心配しています。最後の URL のコンテンツ タイプを取得するにはどうすればよいですか?

function mp3URLIsValid($url){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_FILETIME, true);
    curl_setopt($curl, CURLOPT_NOBODY, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $header = curl_exec($curl);
    $info = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
    curl_close($curl);

    $mp3_mimes = array('audio/mpeg','application/octet-stream','application/mp3','audio/mpeg3','audio/x-mpeg-3');
    if (in_array($info, $mp3_mimes)) {
        return true;
    }
    return false;
}
4

1 に答える 1

0

テストの結果、コンテンツ タイプは、最初にテキストに設定され、2 番目にオーディオ/mpeg に設定された配列である可能性があることがわかりました。そこで、php の get_header メソッドを使用して情報を抽出しました。

function mp3URLIsValid($url){
    $headers = get_headers($url, 1);
    $type = $headers["Content-Type"];
    $mp3_mimes = array('audio/mpeg','application/octet-stream','application/mp3','audio/mpeg3','audio/x-mpeg-3');

    if(is_array($type)){
        foreach($type as $ntype){
            if (in_array($ntype, $mp3_mimes)) {
            return true;
            }
        }
    }else{
        if (in_array($type, $mp3_mimes)) {
            return true;
        }
    }
    return false;
}
于 2013-08-24T21:45:47.623 に答える