2012-10-04 139 views
0

你能告诉我一个很好的方法来检查,如果远程(HTTP)文件是有效的MP3,而无需下载整个文件,有效的MP3?检查远程文件是

+2

什么是“有效的mp3”?您可以检查标题(请参阅http://stackoverflow.com/questions/2610713/get-mime-type-of-external-file-using-curl-and-php),但不保证该文件将播放。你必须下载整个文件才能确定。 – NullUserException

+0

MP3需要如何验证?完全?只是远程服务器认为它是什么(MIME类型)?只要它有一个有效的ID3头? – jimp

+0

一个'有效的'mp3可以是100GB的随机垃圾,中间埋有一个单独的mp3帧。 –

回答

0

您可以尝试

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "http://...music.mp3"); 
curl_setopt($curl, CURLOPT_HEADER, 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/mp3','audio/mpeg3','audio/x-mpeg-3'); 
if (in_array($info, $mp3_mimes)) { 
    // Somthign cooking 
} 

另一个建议是下载文件并验证通过读取头信息

$curl = curl_init(); 

$localfile = "local.temp"; 
unlink($localfile); 

$file = fopen($localfile, 'w+'); 
curl_setopt($curl, CURLOPT_URL, "http://robtowns.com/music/blind_willie.mp3"); // nput 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FILE, $file); 
curl_exec($curl); 
curl_close($curl); 
fclose($file); 

$mp3 = new mp3(); 
if ($info = $mp3->get_mp3($localfile, true, false)) { 
    var_dump($info); 
} else { 
    unlink($localfile); 
    // bad File 
} 

MP3Class

+1

不确定这是否正确。首先,您只是在服务器发送内容时检查内容类型,但我可以轻松地向您发送内容类型为“audio/mpeg”和内部垃圾的文件。其次,'audio/mpeg'不仅是mp3,还有mp2,它​​使用不同的编码。 –

+2

有时服务器发送''Content-Type:application/mp3“'。 – NullUserException

+0

@Aleks G I同意....等待我的钱上的改进版本的工作... – Baba

0

不要相信任何来自服务器。 MIME类型可能是假的。即使是文件名。假设你正在等待MP3文件。存储正确的扩展名并进行验证。

嗯,至少用正确的扩展名沿着集。在最坏的情况下,他们会听到一种可怕的噪音,并且你会受到投诉。

+0

事情是,我做了一个数据库与远程服务器的MP3声音的链接,我正在制作一个脚本,它将获取所有的链接和检查他们是否仍然是“在线”,并且如果他们被删除不去某些远程托管网站..但是,如果我下载所有的mp3声音,并每天检查他们,我生病巨大的交通... –

0

检查文件大小,如果其> 1mb验证...不是答案,但现在是最好的...