记录一些常用的函数和瞎折腾的过程……

使用php保存远程文件到本地服务器

提醒:本文最后更新于 2025 天前,文中所描述的信息可能已发生改变,请谨慎使用。

最近写了个小东西,获取到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;
}