php将远超文件下载到本地

来源:互联网 发布:spss手机版软件 编辑:程序博客网 时间:2024/05/28 23:20

注:这个demo适用的是yii框架,如果您使用的不是yii框架,这个方法也适用您,简单的了解一下思路

   /**     * 保存文件到本地     * @param 文件路径 $url     * @param 保存本地路径 $savePath     * @return string     */    public static function downloadFile($url) {        $www_root = Yii::getPathOfAlias('webroot');        $root_dir = 'uploads/audio';        $build_dir = date('Y') . '/' . date('m');        $origin_dir = $root_dir . '/' . $build_dir;        $savePath = $www_root . DIRECTORY_SEPARATOR . $origin_dir . DIRECTORY_SEPARATOR;// 本地存放的路径(我是按照年月日来划分)        $fileName = Common::getUrlFileExt($url);                                     // 获取文件扩展名        if (!file_exists($savePath)) {            Common::mkdirs($savePath);                                              //目录不存在创建目录        }        $fileName = time() . '.' . $fileName;        //$file = file_get_contents($url);        $ch = curl_init();        $timeout = 60;        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);        $file_contents = curl_exec($ch);        curl_close($ch);                                                //使用curl $ch 为返回的文件流        if (!empty($file_contents)) {            file_put_contents($savePath . '/' . $fileName, $file_contents);  //保存到本地的地址            return '/' . $origin_dir . '/' . $fileName;                  //返回本地地址        }    }    /**     * 获取文件扩展名     * @param 网页URL $url     * @return string     */    public static function getUrlFileExt($url) {        $ary = parse_url($url);        $file = basename($ary['path']);        $ext = explode('.', $file);        return $ext[1];    }
    /**     * 创建多级目录     */    public static function mkdirs($dir) {        if (!is_dir($dir)) {            if (!Common::mkdirs(dirname($dir))) {                return false;            }            if (!mkdir($dir, 0777)) {                return false;            }        }        return true;    }
downloadFile(http://www.baidu.com/mp3/123.wav);  // 调用


0 0