利用PHP的curl批量导出文件

场景

1.需要从网站中导出大量的文件,包括有图片格式,文档格式等附件内容。

2.分文件夹来导出不同的数据

<?php
header("Content-Type:text/html;charset=‘utf-8‘");
include ‘csv.php‘ ;
$fileData = array(
    ‘csv/310-new.csv‘ => 310,
    ‘csv/308-new.csv‘ => 308,
    ‘csv/297-new.csv‘ => 297,
     ‘csv/296-new.csv‘ => 296,
     ‘csv/295-new.csv‘ => 295,
     ‘csv/293-new.csv‘ => 293,
);

foreach ($fileData as $skey => $svalue) {
    echo "export {$skey}\n";
    if(!file_exists("data/".$svalue)){
        mkdir("data/".$svalue);
    }
    if(!file_exists($skey)){
        echo " file $skey is not exists \n";
        continue;
    }
    $csvreader = new CsvReader( $skey );
    $data = $csvreader->get_data();
    foreach ($data as $key => $value) {
        $url = (trim($value[0]));
        $name = trim($value[1]);
        if( empty($url) or empty($name) ){
            echo "url is empty \n";
            continue;
        }
        $name = str_replace("/" , "-" ,$name );//字符串替换,文件名中不能有特殊字符
        $ext =  substr($url, strrpos($url, ‘.‘)+1);//获取原始文件名的尾缀
        downImage($url ,$svalue, $name .  "." .  $ext  );
        echo "export $url \n";
    }
}

 function downImage($url , $sfolder , $filename ){
    //$filename = iconv("utf-8","GBK//IGNORE", $filename);
    $folder = __DIR__ . "/data/" ;
    $filename = $folder . "{$sfolder}/" . $filename  ;
    $ret =  https_request($url);
    saveFile($filename,$ret); //下载后好的文件名
}

 function saveFile($filename, $filecontent){
    $local_file = fopen($filename, ‘w‘);
    if (false !== $local_file){
        if (false !== fwrite($local_file, $filecontent)) {
            fclose($local_file);
        }
    }
}

function https_request($url){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}

csv.php  封装的类库为

<?php
class CsvReader {
    private $csv_file;
    private $spl_object = null;
    private $error;

    public function __construct($csv_file = ‘‘) {
        if($csv_file && file_exists($csv_file)) {
            $this->csv_file = $csv_file;
        }
    }

    public function set_csv_file($csv_file) {
        if(!$csv_file || !file_exists($csv_file)) {
            $this->error = ‘File invalid‘;
            return false;
        }
        $this->csv_file = $csv_file;
        $this->spl_object = null;
    }

    public function get_csv_file() {
        return $this->csv_file;
    }

    private function _file_valid($file = ‘‘) {
        $file = $file ? $file : $this->csv_file;
        if(!$file || !file_exists($file)) {
            return false;
        }
        if(!is_readable($file)) {
            return false;
        }
        return true;
    }

    private function _open_file() {
        if(!$this->_file_valid()) {
            $this->error = ‘File invalid‘;
            return false;
        }
        if($this->spl_object == null) {
            $this->spl_object = new SplFileObject($this->csv_file, ‘rb‘);
        }
        return true;
    }

    public function get_data($length = 0, $start = 0) {
        if(!$this->_open_file()) {
            return false;
        }
        $length = $length ? $length : $this->get_lines();
        $start = $start - 1;
        $start = ($start < 0) ? 0 : $start;
        $data = array();
        $this->spl_object->seek($start);
        while ($length-- && !$this->spl_object->eof()) {
            $data[] = $this->spl_object->fgetcsv();
            $this->spl_object->next();
        }
        return $data;
    }

    public function get_lines() {
        if(!$this->_open_file()) {
            return false;
        }
        $this->spl_object->seek(filesize($this->csv_file));
        return $this->spl_object->key();
    }

    public function get_error() {
        return $this->error;
    }
}
时间: 2024-09-27 22:16:02

利用PHP的curl批量导出文件的相关文章

利用yii2 gridview实现批量删除案例[转]

今天仍然继续探讨GridView的问题,昨天有个小伙伴留言说你用gridview给我去掉表头的链接?我想啊想,这用gridview确实不容易实现,至少我没想出来,会的下方可留言.但是呢,这根gridview有个毛线关联啊,明明是要设置ActiveDataProvider,你要我怎么用gridview实现嘛. 这个问题也是很简单的,我们来看看具体实现 $dataProvider = new ActiveDataProvider([ "query" => $query, ]); $d

利用ansible centos7 系统批量安装docker1.12 并添加docker macvlan 网络支持

利用ansible centos7 系统批量安装docker 1.12并添加docker macvlan 网络支持 ansible 目录结构 . ├── hosts ├── roles │   └── docker_client │       ├── defaults │       ├── files │       ├── handlers │       ├── meta │       ├── tasks │       │   └── main.yml # ansible 安装doc

利用LDIFDE,CSVDE 批量导出用户!

利用LDIFDE,CSVDE 批量导出用户!2017年11月07日 15:26:00 weixin_34198797 阅读数 28原文链接:https://yq.aliyun.com/articles/565037利用LDIFDE,CSVDE 批量导出用户!分类: 活动目录 2008-11-27 22:50 911人阅读 评论(2) 收藏 举报今天客户提出了一个有关导出和导入用户的需求,是将客户DC上的用户和组信息导出. 一般以前用的比较多的是CSVDE ,立即动手,执行命令: csvde -l

整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK

Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html 二:配置Android的SDK环境变量 除了需要Java的环境变量,我们还需要配置Android的sdk的位置,名字是ANDROID_HOME,值就是你的android的sdk的位置,比如我的

Altium原理图中利用封装管理器批量修改元器件封装

批量修改封装,或者别人拿来原理图让我们画板时,发现封装全不对.如果原理图中同样封装的器件很多时,那么批量修改封装将大大减少你的工作量.下面将我批量修改封装的方法共享给大家. 在原理图界面,打开封装管理器:快捷键T-G,如图,在Design Item ID下选择需要修改的元器件ID,这个ID在设计原理图就确定了,不可以随便改变.如果全局修改本类别的元器件选择这个选项.也可以根据需求选择其他选项.如图,选中需要更改的PC814,并全选. 在图的右下角有Add添加按钮,添加封装,如图: 这时在窗口可以

Android利用网络编程HttpClient批量上传(一个)

请尊重他人的劳动成果.转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP訪问网络资源>一文中介绍过HttpCient的使用,这里就不在累述了,感兴趣的朋友能够去看一下.在这里主要介绍怎样通过HttpClient实现文件上传. 1.预备知识: 在HttpCient4.3之前上传文件主要使用MultipartEntity这个类,但如今这个类已经不在推荐使用了. 随之替代它的类是MultipartEntityBuilder. 以

利用Acunetix WVS进行批量网站漏洞评估

我们知道Acunetix WVS可以对网站进行安全性评估,那么怎么能批量扫描呢?游侠(www.youxia.org)在测试WVS 8 BETA2的时候发现WVS居然支持WEB管理,还是很方便的. 打开Acunetix WVS,点New Scan,在弹出来的界面可以看到有三个选项: 最下面一个:如果你想扫描一个网站列表,使用Acunetix计划任务,访问http://localhost:8181,打开后选择“+schedule new scan”: 有Basic options.Advanced

利用php的curl扩展进行模拟浏览器访问网页

我们一般要抓取一个网站的静态页面来完成我们的需求,其实在这里面有很多种方式可以完成, php内置函数file_get_contents();file();readfile();都可以进行网页抓取,但是这种方式毕竟是有很大 局限性的,例如我们要访问一个需要登录的网站,需要登录验证信息,这是后php内置函数就显得疲软了 所以我们发现了一个php的扩展类curl来帮助我们完成这种事情,curl是php的扩展之一我们只需要安装它 并且在php.ini文件中打开他的扩展就可以使用了,这里我们不多赘述,其实

oracle_利用ctl文件实现批量导入

利用oracle控制文件实现大批量数据的入库操作,效率比sql脚本文件要高很多. 使用ctl控制文件步骤如下: 1. 制作ctl文件 test.ctl load   data infile   'd:\test.txt'   --数据文件,数据源文件 append   into   table   table_name --数据文件导入的目标表 Fields terminated by "@[email protected]"   --字段分隔符,建议以特殊字符作为字段分隔符 Opti