工作中遇到了,记录一下
<?php
$link = '';
down_file($link,'./down_path/','down_name','id');
/**
* @param $url 文件下载地址
* @param string $folder 文件存储地址
* @param string $down_name 文件另存名称
* @param string $id 文件id【多个文件为了区分加的,一般不用】
* @return bool
*/
function down_file($url, $folder = "./", $down_name='', $id='')
{
set_time_limit(0); // 设置超时时间
$destination_folder = $folder . '/'; // 文件下载保存目录,默认为当前文件目录
if (!is_dir($destination_folder)) { // 判断目录是否存在
mkdirs($destination_folder); // 如果没有就建立目录
}
$down_name = explode('.', $down_name); // 因为数据库存的名称格式不统一,需要进行处理
$down_name = $down_name[0]; // 根据自己需求判断是否需要以上两步
$postfix = substr($url, strrpos($url, '.') + 1); // 取得文件后缀名
$more_pre = '';
if($id){
$more_pre = $id . '-';
}
$newfname = $destination_folder . $more_pre . $down_name . '.' . $postfix; // 取得文件的名称
$file = fopen($url, "rb"); // 远程下载文件,二进制模式
if ($file) { // 如果下载成功
$newf = fopen($newfname, "wb"); // 远在文件文件
if ($newf) // 如果文件保存成功
while (!feof($file)) { // 判断附件写入是否完整
fwrite($newf, fread($file, 1024 * 8), 1024 * 8); // 没有写完就继续
}
fclose($file); // 关闭远程文件
fclose($newf);
}
return true;
}
function mkdirs($path, $mode = "0755")
{
if (!is_dir($path)) { // 判断目录是否存在
mkdirs(dirname($path), $mode); // 循环建立目录
mkdir($path, $mode); // 建立目录
}
return true;
}