使用PHP从主机空间的下载链接保存mp3文件

使用PHP从主机空间的下载链接保存mp3文件,php,download,Php,Download,我正在从服务提供商的API获取数据(比如-http://serviceprovider.com) 从几个参数中,一个是MP3下载链接(示例-http://serviceprovider.com/storage/read?uid=475b68f2-a31b-40f8-8dfc-5af791a4d5fa_1_r.mp3&ip=255.255.255&dir=recording) 当我把这个下载链接放到我的浏览器上时,它会把它保存到我的本地电脑上 现在我的问题- 我想把这个MP3文件保存在我的托管空间

我正在从服务提供商的API获取数据(比如-
http://serviceprovider.com

从几个参数中,一个是MP3下载链接(示例-
http://serviceprovider.com/storage/read?uid=475b68f2-a31b-40f8-8dfc-5af791a4d5fa_1_r.mp3&ip=255.255.255&dir=recording

当我把这个下载链接放到我的浏览器上时,它会把它保存到我的本地电脑上

现在我的问题-

我想把这个MP3文件保存在我的托管空间的一个文件夹中,从那里我可以进一步使用它来播放JPlayer音频

我尝试了
file\u get\u contents()
,但什么也没发生

提前谢谢

编辑: 在阅读了Ali的答案后,我尝试了以下代码,但仍然不能完全工作

// Open a file, to which contents should be written to.
$fp = fopen("downloadk.mp3", "w");
$url = 'http://serviceprovider.com/storage/read?uid=475b68f2-a31b-40f8-8dfc-5af791a4d5fa_1_r.mp3&ip=255.255.255.255&dir=recording';
$handle = curl_init($url);
// Tell cURL to write contents to the file.
curl_setopt($handle, CURLOPT_FILE, $fp);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_HEADER, false);


// Do the request.
$data = curl_exec($handle);

// Clean up.    
curl_close($handle);
fwrite($fp, $data);
fclose($fp);
这在我的服务器上创建了文件download.mp3文件,但该文件的字节数为0,即为空。
此处使用的url是一个下载链接示例,而不是可以直接使用现代浏览器播放的mp3文件。

功能文件\u get\u内容用于读取本地文件。您拥有的是一个URL,为了获取内容,您需要在脚本中执行HTTP请求。PHP附带了curl扩展,它为您提供了一个用于执行HTTP请求的稳定函数库:

使用curl下载文件的方法如下:

// Open a file, to which contents should be written to.
$downloadFile = fopen("download.mp3", "w");
$url = "http://serviceprovider.com/storage/read?uid=475b68f2-a31b-40f8-8dfc-5af791a4d5fa_1_r.mp3&ip=255.255.255.255&dir=recording";
$handle = curl_init($url);
// Tell cURL to write contents to the file.
curl_setopt($handle, CURLOPT_FILE, $downloadFile);
// Follow redirects.
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
// Do the request.
curl_exec($handle);
// Clean up.
curl_close($handle);
fclose($downloadFile);

您可能应该添加一些错误检查。

谢谢您的回答。它创建了一个文件,但由于某些原因,它不写任何东西,即在我的主机上新创建的MP3文件有0个字节。我猜请求的url没有返回任何内容。我说这是一个下载链接,不是直接播放的链接。cURL需要遵循重定向。设置CURLOPT_FOLLOWLOCATION=true可以解决这个问题。@sanjayojha查看您的编辑,您不需要在请求后执行fwrite。cURL为您写入文件。好吧,这很有趣。这段代码适用于你编辑中给出的URL:对不起,阿里,我没有注意到你用(curl_setopt($handle,CURLOPT_FOLLOWLOCATION,true);)编辑的答案