工作中遇到了,记录一下
<?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;
}
该PHP代码段定义了一个down_file函数,用于从$url指定的位置下载文件并保存到本地$folder目录下,文件名可以自定义为$down_name。如果$id存在,会在文件名前加上$id标识。函数首先检查目标目录是否存在,如果不存在则创建。然后获取文件的后缀名,打开远程文件并以块为单位写入到新文件中。最后关闭文件并返回成功标志。
590

被折叠的 条评论
为什么被折叠?



