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

经过测试,我发现内容类型可能是一个数组,第一个设置为文本,第二个设置为音频/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 回答