有时候需要下载文件,图片、文件之类的,所以写了一个方法:
/**
* 下载文件
* @param string $sourceName 要下载文件的地址
* @param string $save_path 下载后文件保存目录
* @param string $filename 下载后文件保存名称
* @return bool
*/
function downloadFile($sourceName, $save_path = '', $filename = '') {
//判断远程文件不能为空
if (trim($sourceName) == '') {
return false;
}
//判断远程文件是否能打开
if (false === @fopen($sourceName, 'rb')) {
return false;
}
//判断保存路径是否为空,为空的话默认保存到根目录下runtime目录
if (trim($save_path) == '') {
$save_path = Env::get('root_path') . 'runtime/';
}
//保存目录不存在则创建之
if (!file_exists($save_path) && !mkdir($save_path, 0777, true)) {
return false;
}
//保存的文件名如果没有,默认取文件类型前的名字(可自己拓展)
if (trim($filename) == '') {
$img_ext = strrchr($sourceName, '.');
$img_exts = array('.zip','.jpg','.jpeg','.png','.gif','.pdf');
if (!in_array($img_ext, $img_exts)) {
return false;
}
$filename = time() . $img_ext;
}
// curl下载文件
$ch = curl_init();
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //不验证证书
curl_setopt($ch, CURLOPT_URL, $sourceName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch);
curl_close($ch);
//判断文件流是否为空(因为这里可能会获取到空到文件流,这样保存之后到文件是错误的),为空就用另一种方法获取文件流
if(empty($result)){
ob_start();
readfile($sourceName);
$result = ob_get_contents();
ob_end_clean();
}
// 保存文件流到指定路径文件
$length = file_put_contents($save_path.$filename, $result);
//保存失败就重新保存
if($length == 0){
unlink($save_path.$filename);
if(!empty($result)){
$fp2 = @fopen($save_path . $filename, 'a');
fwrite($fp2, $result);
fclose($fp2);
}
}
//释放资源
unset($result, $url);
return true;
}
在需要的地方直接调用这个方法就可以了,这样就可以保证文件能下载成功!
Mysql8新增用户,mysql8配置权限,mysql8配置,mysql8配置文件 Linux命令,scp,scp命令,Linux复制 git commit git add centos git 搭建FTP,Linux FTP,禁止FTP登录ssh 上传文件,阿里云OSS上传,文件上传到OSS,OSS文件上传,OSS上传 微信支付,微信支付V3,PHP微信支付,微信nativePay支付,微信jsapi支付 微信支付,微信支付V3,PHP微信支付 bootstrap4 modal, lavarel The subversion command line tools are no longer provided by Xcode. 银联支付,tp5.1银联支付 支付宝即时到账,PHP支付宝 system libzip must be upgraded to version >= 0.11 CMake 3.0.2 or higher is required Class 'ZipArchive' not found chr() expects parameter 1 to be int php7.4 tcpdf unexpected '='