我正在尝试在远程服务器上测试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;
}
答案 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;
}