【问题标题】:PHP Get metadata of remote .mp3 file (from URL)PHP 获取远程 .mp3 文件的元数据(来自 URL)
【发布时间】:2014-09-21 02:20:19
【问题描述】:

我正在尝试从 远程 .mp3 文件
例如 http://shiro-desu.com/scr/11.mp3 em> 。

我已经尝试过 getID3 脚本,但据我了解它不适用于远程文件,因为我收到此错误:“不支持远程文件 - 请先将文件复制到本地” em>

另外,这段代码:

<?php
$tag = id3_get_tag( "http://shiro-desu.com/scr/11.mp3" );
print_r($tag);
?>

也不起作用。
“致命错误:在第 2 行的 /home4/shiro/public_html/scr/index.php 中调用未定义函数 id3_get_tag()”

【问题讨论】:

    标签: php mp3 metadata


    【解决方案1】:

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

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

    如果您没有 Id3 扩展文件。请查看here 以获取安装信息。

    【讨论】:

    【解决方案2】:

    首先,我没有创建它,我只是通过一个完整的示例使其易于理解。

    您可以在此处阅读更多内容,但这仅仅是因为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”。将该文件夹保存到您的工作文件夹中。

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

    基本上,它的作用是下载文件的前 64k,然后从文件中读取元数据。

    我喜欢一个简单的例子。我希望这会有所帮助。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2013-07-01
      • 2011-06-10
      • 1970-01-01
      相关资源
      最近更新 更多