我想在我的服务器上存储使用API检索的一些数据。具体来说,这些是(免费)学习曲目的.mp3文件。我遇到了一个问题。从请求返回的mp3链接不是直接的.mp3文件,而是进行ADDITIONAL API调用,通常会提示您下载mp3文件。
file_put_contents
似乎并不喜欢这样。 mp3文件是空的。
以下是代码:
$id = $_POST['cid'];
$title = $_POST['title'];
if (!file_exists("tags/".$id."_".$title))
{
mkdir("tags/".$id."_".$title);
}
else
echo "Dir already exists";
file_put_contents("tags/{$id}_{$title}/all.mp3", fopen($_POST['all'], 'r'));
这是我之前提到的第二个API的示例: http://www.barbershoptags.com/dbaction.php?action=DownloadFile&dbase=tags&id=31&fldname=AllParts
有没有办法绕过这个中间步骤?如果无法访问mp3的直接网址,有没有办法将文件下载提示重定向到我的服务器?
提前感谢您的帮助!
修改
这是当前的片段。我应该回应一下,对吗?
$handle = fopen("http://www.barbershoptags.com/dbaction.php?action=DownloadFile&dbase=tags&id=31&fldname=AllParts", 'rb');
$contents = stream_get_contents($handle);
echo $contents;
因为这没有回音。
解
好吧,我想file_get_contents应该可以很好地处理重定向,但这并没有发生。所以我找到了这个函数:https://stackoverflow.com/a/4102293/2723783来返回API的最终重定向。我将该URL插入file_get_contents和volia!
答案 0 :(得分:0)
您似乎只是打开文件处理程序而不是使用fread()或其他类似函数获取内容:
http://www.php.net/manual/en/function.fread.php
$handle = fopen($_POST['all'], 'rb')
file_put_contents("tags/{$id}_{$title}/all.mp3", stream_get_contents($handle));