首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取远程.mp3文件的元数据(从URL)

获取远程.mp3文件的元数据(从URL)
EN

Stack Overflow用户
提问于 2014-09-21 02:20:19
回答 2查看 3.3K关注 0票数 3

我正在尝试从song name / artist name / song length / bitrate远程.mp3文件中获取

比如http://shiro-desu.com/scr/11.mp3

我尝试过getID3脚本,但据我所知,它不适用于远程文件,因为我收到了以下错误:“不支持远程文件--请先在本地复制该文件”

此外,该代码:

代码语言:javascript
复制
<?php
$tag = id3_get_tag( "http://shiro-desu.com/scr/11.mp3" );
print_r($tag);
?>

也不起作用。

“致命错误:在第2行调用未定义函数id3_get_tag()在/home4 4/scr/public_html/scr/index.php中”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-21 02:41:40

由于您还没有提到您的错误,所以我正在考虑一个常见的错误案例undefined function

The error you get (undefined function) means the ID3 extension is not enabled in your PHP configuration:

如果您没有Id3扩展文件.Just,请检查这里的安装信息。

票数 1
EN

Stack Overflow用户

发布于 2020-05-06 02:06:47

首先,我没有创造这个,我只是用一个完整的例子使它更容易理解。

您可以在这里更多地阅读它,但这仅仅是因为archive.org。https://web.archive.org/web/20160106095540/http://designaeon.com/2012/07/read-mp3-tags-without-downloading-it/

首先,从这里下载这个库:http://getid3.sourceforge.net/

打开zip文件夹时,您将看到‘getid3 3’。将该文件夹保存到工作文件夹中。

接下来,在该工作文件夹中创建一个名为“temp”的文件夹,下面的脚本将从该文件夹运行。

基本上,它所做的是下载文件的第一个64k,然后从文件中读取元数据。

我喜欢一个简单的例子。我希望这能帮到你。

代码语言:javascript
复制
<?php

require_once("getid3/getid3.php");

$url_media = "http://example.com/myfile.mp3"

$a=getfileinfo($url_media);

echo"<pre>";

echo $a['tags']['id3v2']['album'][0] . "\n";  
echo $a['tags']['id3v2']['artist'][0] . "\n";  
echo $a['tags']['id3v2']['title'][0] . "\n";  
echo $a['tags']['id3v2']['year'][0] . "\n"; 
echo $a['tags']['id3v2']['year'][0] . "\n";  

echo "\n-----------------\n";

//print_r($a['tags']['id3v2']['album']);

echo "-----------------\n";

//print_r($a);

echo"</pre>";

function getfileinfo($remoteFile)

{

$url=$remoteFile;
$uuid=uniqid("designaeon_", true);
$file="temp/".$uuid.".mp3";
$size=0;
$ch = curl_init($remoteFile);
//==============================Get Size==========================//
$contentLength = 'unknown';
$ch1 = curl_init($remoteFile);
curl_setopt($ch1, CURLOPT_NOBODY, true);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_HEADER, true);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, true); //not necessary unless the file redirects (like the PHP example we're using here)
$data = curl_exec($ch1);
curl_close($ch1);
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
$contentLength = (int)$matches[1];
$size=$contentLength;
}
//==============================Get Size==========================//


if (!$fp = fopen($file, "wb")) {
echo 'Error opening temp file for binary writing';
return false;
} else if (!$urlp = fopen($url, "r")) {
echo 'Error opening URL for reading';
return false;
}
try {
$to_get = 65536; // 64 KB
$chunk_size = 4096; // Haven't bothered to tune this, maybe other values would work better??
$got = 0; $data = null;

// Grab the first 64 KB of the file
while(!feof($urlp) && $got < $to_get) { $data = $data . fgets($urlp, $chunk_size); $got += $chunk_size; } fwrite($fp, $data); // Grab the last 64 KB of the file, if we know how big it is. 
if ($size > 0) {
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RESUME_FROM, $size - $to_get);
curl_exec($ch);
}

// Now $fp should be the first and last 64KB of the file!!

@fclose($fp);
@fclose($urlp);
} 
catch (Exception $e) {
@fclose($fp);
@fclose($urlp);
echo 'Error transfering file using fopen and cURL !!';
return false;
}

$getID3 = new getID3;
$filename=$file;
$ThisFileInfo = $getID3->analyze($filename);
getid3_lib::CopyTagsToComments($ThisFileInfo);
unlink($file);
return $ThisFileInfo;
}

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25955180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档