fopen简单使用


需求: 从数据库查数据,生成一个xml文件,这个xml是 sitemap.xml格式的。

分析方法 : 有两种方法实现 1. 使用 DomDocument   2. 使用 fopen 操作文件

这篇讨论fopen 实现


  public function fopenCreateSitemap(){
        date_default_timezone_set('PRC');
        set_time_limit(0);
        $this->load->model('seo_model');
        $dir = './';
        $filename = 'sitemap.xml';
        $file = $dir.$filename;
        $domain = substr(base_url(),0,-1);
        $step_num = 2; //目前需要两步,第一步走完int_a =1
        $cur_step = 0;
        $msg = '';

        $crontab = $this->seo_model->getCrontabOne(array('name'=>'SITEMAP'));

        if(empty($crontab)){
            echo 0; exit;
        }

        //int_a 代表上次执行到哪一步了
        if(empty($crontab['int_a']) || $crontab['int_a'] == 2){  //执行第一步
            //如果是本次任务的第一步,则 备份/删除原xml, w+打开新文件,
            if(file_exists($file)){
                rename($file,$dir.date('YmdHis',time()).'_'.rand(1000,9999).'sitemap.xml');
                $handle = fopen($file,'w+');
            }else{
                $handle = fopen($file,'w+');
            }

            //第一步准备信息,   首页,分类,发现的导航连接; 一级分类连接,二级分类连接,产品连接
            $msg = $this->step1($domain);
            $cur_step = 1;

        }else if($crontab['int_a'] == 1){   //执行第二步
            //如果是本次任务第二步,则 打开r+, fseek -9,
            if(file_exists($file)){
                $handle = fopen($file,'r+');
                $res =   fseek($handle,-10,SEEK_END);
            }

            //第二步; 发现
            $msg = $this->step2($domain);
            $cur_step = 2;
        }

        $res_f = fwrite($handle,$msg);
        fclose($handle);

        $res = $this->seo_model->updateCrontab(array('int_a'=>$cur_step),array('name'=>'SITEMAP'));
        if($res_f !== FALSE && $res){
            echo 1;exit;
        }

    }


这个方法在是 计划任务执行时的主要方法,xml 分两次调用 每次生成xml的一部分,这样可以避免php超时,和避免影响网站正常访问

注意 1. fopen  的a  a+ 模式下  使用 fseek 是没用的

         2. 写入文件中的中文 ,不用特别处理,就可以正常显示


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值