CURLINFO_CONTENT_TYPE是否是最后一个url的内容类型

时间:2013-08-24 20:39:24

标签: php curl mp3 mime-types content-type

我正在尝试在远程服务器上测试mp3文件,看看内容类型是否是媒体。我已经在使用CURLOPT_FOLLOWLOCATION,但这意味着CURLINFO_CONTENT_TYPE将用于最后一个位置。我在一个网址上尝试了它,它说这是无效的,但是一旦我去了网址,它就会流向我。我从https://stackoverflow.com/a/12733693获得了大部分代码,并添加了一些调整,但现在我担心它并不总能给出正确的结果。如何获取最后一个网址的内容类型?

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;
}

1 个答案:

答案 0 :(得分:0)

经过测试我发现内容类型可能是一个数组,第一个设置为text,第二个是audio / 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;
}