php远程下载文件并保存到服务器

适合用于小程序下载文件

  • 核心方法
/**
 * 下载文件到服务器
 * addtime 2020年8月28日 18:38:43
 */
function getFile($url, $save_dir = '', $filename = '', $type = 0)
{
     
	if (trim($url) == '') {
     
		return false;
	}
	if (trim($save_dir) == '') {
     
		$save_dir = './';
	}
	if (0 !== strrpos($save_dir, '/')) {
     
		$save_dir.= '/';
	}
	//创建保存目录
	if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) {
     
		return false;
	}
	//获取远程文件所采用的方法
	if ($type) {
     
		$ch = curl_init();
		$timeout = 5;
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
		$content = curl_exec($ch);
		curl_close($ch);
	} else {
     
		ob_start();
		readfile($url);
		$content = ob_get_contents();
		ob_end_clean();
	}
	$size = strlen($content);
	//文件大小
	$fp2 = @fopen($save_dir . $filename, 'a');
	fwrite($fp2, $content);
	fclose($fp2);
	unset($content, $url);
	$res['code'] = 200;
	$res['fild_name'] = $filename;
	return $res;
}
  • 调用
$save_dir = "./video/"; // 服务资源目录
$filename = date('Ymd').time().".mp4"; // 自定义名称
# 检测文件大小
$Size = $this->getFileSize($res['data']);
if ($Size < 10) {
      // 超过10M不保存
	$result = $this->getFile($res['data'], $save_dir, $filename,1);
}
  • 检测文件大小
/**
 * 检测文件大小
 */
public function getFileSize($url)
{
     
	$res = get_headers($url,true);    
	$filesize = round($res['Content-Length']/1024/1024,2);//四舍五入获取文件大小,单位M
	return $filesize;
}
这里只是简单的逻辑,后续要涉及到文件的清空,具体看业务逻辑

你可能感兴趣的:(php,后端,Linux,php,linux,makefile)