PHP定时循环执行脚本

代码如下:

<?php
    ignore_user_abort(); //关掉浏览器,PHP脚本也可以继续执行.
    set_time_limit(0); // 通过set_time_limit(0)可以让程序无限制的执行下去
    $interval = 43200; // 每隔*秒运行,这里是12小时执行一次
    $is_send = true;//是否开启true为开启,false为关闭
    do {
        //需要循环定时执行的PHP代码,我这里是进行查询7天前到10天前的已经发货的订单,将这些订单改为已收货状态。我这是基于CI框架做的。
        $starttime = strtotime("-7 day");
        $endtime = strtotime("-10 day");
        $data = $this->harvest->harvest_list($starttime,$endtime);
        if(!empty($data)){
            foreach($data as $val){
                $this->harvest->harvest_update($val['order_code']);
                $this->harvest->harvestorder_update($val['order_code']);
            }
        }
        sleep($interval); // 等待*秒钟,一定要加上这句话,不然就是死循环,服务器会宕机的。
    } while ($is_send);

对于上诉的关闭浏览器继续无限制的执行,我因为时间太短,还没测试效果,不过,还有一个解决办法。可以去360监控,监控宝等网站上申请一个账号,然后填上该脚本的地址,这样就可以每隔多久访问并执行这个脚本了,实现全自动化。

CI框架使用PHPExcel实例

0x01 准备工作

1、下载PHPExcel,我用的是官网最新版1.8.0

2、安装PHPExcel到Codeigniter
   1) 解压压缩包里的Classes文件夹中的内容到application\libraries目录下,目录结构如下:

    -- application\libraries\PHPExcel.php

    -- application\libraries\PHPExcel (文件夹)

到这里准备工作准备完毕。

0x02 使用代码

public function excel()
{
    $errstr = str_replace('#bool#', 'false',$this->config->item('json_demo')['check_login']);
    $where["cpCode"] = $this->session->userdata('cpcode');
    $this->form_validation->set_data($this->input->get(NULL,TRUE));
    $this->form_validation->set_rules('str_type', '订单类型', 'trim|integer');
    $this->form_validation->set_rules('str_pay', '支付状态', 'trim|integer');
    $this->form_validation->set_rules('str_release', '发货状态', 'trim|integer');
    $this->form_validation->set_rules('str_balancing', '结算状态', 'trim|integer');
    $this->form_validation->set_rules('startday', '起始下单时间', 'trim|integer');
    $this->form_validation->set_rules('endday', '结束下单时间', 'trim|integer');
    $this->form_validation->set_rules('strName', '商品名称', 'trim')
    if ($this->form_validation->run() == false) { //验证通过
        exit(str_replace('#message#', '订单导出筛选条件错误!', $errstr));
    } else {
        //设置筛选条件,无筛选条件导出则为空
        $where['str_type'] = ($this->input->get('str_type',true) != 999)?$this->input->get('str_type',true):'';
        $where['str_pay'] = ($this->input->get('str_pay',true) != 999)?$this->input->get('str_pay',true):'';
        $where['str_release'] = ($this->input->get('str_release',true) != 999)?$this->input->get('str_release',true):'';
        $where['str_balancing'] = ($this->input->get('str_balancing',true) != 999)?$this->input->get('str_balancing',true):'';
        $where['startday'] = ($this->input->get('startday',true) != 0)?$this->input->get('startday',true):'';
        $where['endday'] = ($this->input->get('endday',true) != 0)?$this->input->get('endday',true):'';
        $where['str_name'] = $this->input->get('str_name',true);
        $data = $this->order->excel_list($where);
        $release = array(
            0 => '未发货',
            1 => '已发货',
            2 => '已收货',
            3 => '售后中'
        );
        $pay_status = array(
            0 => '未支付',
            1 => '已支付',
            2 => '支付失败'
        );
        $balancing = array(
            0 => '未结算',
            1 => '已结算',
            2 => '结算失败'
        );
        //开始导出
        $this->load->library('PHPExcel');//导入PHPExcel
        $objPHPExcel = new PHPExcel();//实例化使用
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean();//清除缓存,避免出错
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);//设置B列单元格宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(18);
        $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(18);
        $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(13);
        $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);//设置第一行单元格高度
        $objPHPExcel->getActiveSheet()->getStyle('A1:M2')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);//单元格边框
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//这两行将A1单元格垂直水平居中
        $objPHPExcel->getActiveSheet()->setTitle('订单列表');
        $objPHPExcel->getActiveSheet()->mergeCells('A1:M1');//合并单元格
        $objPHPExcel->getActiveSheet()->setCellValue('A1', '企业端订单列表');
        $objPHPExcel->getActiveSheet()->setCellValue('A2', '订单号');
        $objPHPExcel->getActiveSheet()->setCellValue('B2', '订单日期');
        $objPHPExcel->getActiveSheet()->setCellValue('C2', '产品名称');
        $objPHPExcel->getActiveSheet()->setCellValue('D2', '支付状态');
        $objPHPExcel->getActiveSheet()->setCellValue('E2', '收货地址');
        $objPHPExcel->getActiveSheet()->setCellValue('F2', '收货人');
        $objPHPExcel->getActiveSheet()->setCellValue('G2', '收货人电话');
        $objPHPExcel->getActiveSheet()->setCellValue('H2', '发货状态');
        $objPHPExcel->getActiveSheet()->setCellValue('I2', '快递名称');
        $objPHPExcel->getActiveSheet()->setCellValue('J2', '快递单号');
        $objPHPExcel->getActiveSheet()->setCellValue('K2', '发货时间');
        $objPHPExcel->getActiveSheet()->setCellValue('L2', '结算状态');
        $objPHPExcel->getActiveSheet()->setCellValue('M2', '订单金额');
        $count = count($data['excelList']);
        $count = $count + 3;
        for ($j = 3; $j < $count; $j++) {
            $objPHPExcel->getActiveSheet()->setCellValue('A' . $j, $data['excelList'][$j - 3]['order_code']);
            $objPHPExcel->getActiveSheet()->setCellValue('B' . $j, date('Y-m-d H:i:s', $data['excelList'][$j - 3]['order_time']));
            $objPHPExcel->getActiveSheet()->setCellValue('C' . $j, $data['excelList'][$j - 3]['product_name']);
            $objPHPExcel->getActiveSheet()->setCellValue('D' . $j, $pay_status[$data['excelList'][$j - 3]['order_pay_status']]);
            $objPHPExcel->getActiveSheet()->setCellValue('E' . $j, $data['excelList'][$j - 3]['address_name']);
            $objPHPExcel->getActiveSheet()->setCellValue('F' . $j, $data['excelList'][$j - 3]['contact_name']);
            $objPHPExcel->getActiveSheet()->setCellValue('G' . $j, $data['excelList'][$j - 3]['contact_phone']);
            $objPHPExcel->getActiveSheet()->setCellValue('H' . $j, $release[$data['excelList'][$j - 3]['order_release']]);
            $objPHPExcel->getActiveSheet()->setCellValue('I' . $j, $data['excelList'][$j - 3]['ex_api_code']);
            $objPHPExcel->getActiveSheet()->setCellValue('J' . $j, " " . $data['excelList'][$j - 3]['ex_number']);
            $objPHPExcel->getActiveSheet()->setCellValue('K' . $j, $data['excelList'][$j - 3]['express_time'] ? date('Y-m-d H:i:s', $data['excelList'][$j - 3]['express_time']) : ' ');
            $objPHPExcel->getActiveSheet()->setCellValue('L' . $j, $balancing[$data['excelList'][$j - 3]['order_balancing']]);
            $objPHPExcel->getActiveSheet()->setCellValue('M' . $j, $data['excelList'][$j - 3]['buy_price'] . '元');
        }
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="企业订单详情_' . date('ymd') . '.xls"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit();
    }
}

PHP中抽象类与接口

接口:

1、通过Interface来定义一个接口,通过关键字implements来使用一个接口,也可以通过关键字extends继承,接口中不可以声明变量(包括静态变量),但是可以声明常量,可以声明方法,方法都必须是public。
2、必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称。
3、接口中可以定义常量,接口常量和类常量的使用完全相同,他们都是定值,不能被子类或子接口修改。

抽象类:

1、php5支持抽象类和抽象方法,使用关键字abstract来声明一个抽象类或者方法。
2、抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类,任何一个类,如果他里面至少有一个方法是被声明为抽象的,那这个类就必须被声明为抽象的,如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现(通过子类继承来实现)。
3、继承一个抽象类的时候,子类必须实现抽象类中的所有的抽象方法,另外,这些方法的可见性必须和抽象类中一样(或更轻松),如果抽象类中的某个抽象方法被声明为proteected,那么子类中实现的方法应该声明为pritected或者public。

什么时候用抽象类什么时候用接口:

1、如果要建一个类模型,这个模型将由一些紧密相关的对象采用,使用抽象类。如果模型将由不太相关的对象采用,用接口。
2、如果一个具体class将从多个来源继承行为,用接口。php类可以继承多个接口,但是不能继承多个抽象类。
3、如果所有的类都要共享一个公共的行为实现,用抽象类,并在其中实现该行为。先用子类继承一个抽象类,继承后的子类能够实现原先的行为。

博客全新改版-全新开放

虽然博客已经弄了快一年时间了,但是模板总是不如我意;

今天有点时间将原来的程序直接废掉。

全新架构,全新开始;