分享编程~
 
PHP远程图片文件不限类型下载到本地

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);
}


上一篇:原生纯js DOM节点class操作获取当前class第几个以及纯js实现jquery class操作下一篇:wangEditor一个页面多个编辑器不同菜单配置
赞(1) 踩(0)
您说多少就多少,您的支持是我最大的动力
赏金
微 信
赏金
支付宝
本文连接: https://www.yj521.com/article/174.html
版权声明: 本文为原创文章,版权归《越加网》所有,分享转载请注明出处!