使用php保存远程文件到本地服务器
最近写了个小东西,获取到json中mp3文件url地址,保存到服务器上。以前我保存图片时,使用file_put_contents($save_path, $file)函数就能解决,但这次保存音频文件到服务器上,就不行了,全成了1kb的小文件,后来改成curl来下载音频文件,完美解决,并且通用,函数如下:
/**
* @param string $file_url 下载文件地址
* @param string $save_path 下载文件保存目录
* @param string $file_name 下载文件保存名称
* @return bool
*/
function curlDownFile($file_url, $save_path = '', $file_name = '') {
// 没有远程url或已下载文件,返回false
if (trim($file_url) == '' || file_exists( $save_path.$file_name )) {
return false;
}
// 若没指定目录,则默认当前目录
if (trim($save_path) == '') {
$save_path = './';
}
// 若指定的目录没有,则创建
if (!file_exists($save_path) && !mkdir($save_path, 0777, true)) {
return false;
}
// 若没指定文件名,则自动命名
if (trim($file_name) == '') {
$file_ext = strrchr($file_url, '.');
$file_exts = array('.gif', '.jpg', '.png','mp3');
if (!in_array($file_ext, $file_exts)) {
return false;
}
$file_name = time() . $file_ext;
}
// curl下载文件
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file = curl_exec($ch);
curl_close($ch);
// 保存文件到指定路径
file_put_contents($save_path.$file_name, $file);
// 释放文件内存
unset($file);
// 执行成功,返回true
return true;
}