PHP远程图片文件不限类型下载到本地,jpg,png,gif,zip,rar,exe,doc,txt,xls等
php将远程图片下载到本地,三种方式
1、header设置文件格式、大小、名称输出缓冲区【不推荐】如:
$fileurl = 'http://test.yj521.com/d1.jpg';
ob_clean();
$filePathArr = explode('/', $fileurl);
$fileName = end($filePathArr);
header( "Content-type: application/octet-stream ");
header( "Accept-Ranges: bytes ");
header( "Content-Disposition: attachment; filename=".$fileName); //告诉浏览器通过附件形式来处理文件
header('Content-Length: ' . filesize($fileurl)); //下载文件大小
readfile($fileurl); //读取文件内容
这种方式需要设置文件格式读取文件大小等太过于麻烦,读取文件大小不全时输出文件容易丢失原数据
2、通过file_get_contents和file_put_contents函数
$fileUrl = 'http://test.yj521.com/d1.jpg';
// 当前文件加下的uploads文件夹下
$path = dirname(__FILE__).'/uploads/';
// 获得文件名如:a.jpg
$filename = pathinfo($fileUrl, PATHINFO_BASENAME);
// 获得远程图片数据
$content = file_get_contents($fileUrl);
// 将文件写入到指定文件夹下
file_put_contents($path.$filename, $content);
通过以上可以优化封装成方法:
function fileDow($url,$path = '/uploads/'){
// 路径
$localPath = dirname(__FILE__).$path;
// 没有路径创建
if (!file_exists($localPath)) {
@mkdir($localPath, 0777);
@chmod($localPath, 0777);
}
// 获取文件名方法一
//$filePathArr = explode('/', $url);
//$fileNames = end($filePathArr);
// 获取文件名方法二
$fileNames = pathinfo($url, PATHINFO_BASENAME);
// 拼接新路径
$fileLocal = $localPath.$fileNames;
// 获取文件数据
$fileData = file_get_contents($url);
// 将文件写入到指定文件夹下
file_put_contents($fileLocal, $fileData);
//return $fileLocal; // 返回文件路径
return true;
}
3、通过curl
$url = 'http://test.yj521.com/d.jpg';
$path = dirname(__FILE__).'/uploads/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
通过以上优化封装成方法:
function fileDow($url, $path = '/uploads/'){
// 路径
$path = dirname(__FILE__).$path;
// 没有路径创建
if (!file_exists($path)) {
@mkdir($path, 0777);
@chmod($path, 0777);
}
// 获取文件数据
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
// 获取文件名
$filename = pathinfo($url, PATHINFO_BASENAME);
// 打开文件
$resource = fopen($path . $filename, 'a');
// 写入文件
fwrite($resource, $file);
// 关闭
fclose($resource);
}