怎么利用register_shutdown_function判断php程序是否执行完

 更新时间:2017年1月22日 11:08  点击:2172
php中的异常捕获没有java的强大,有些情况下,需要知道某段php程序业务是否正常执行完,可以用register_shutdown_function函数来辅助实现。掌握此函数,对php学习又提高了一层。

register_shutdown_function函数的用法:当php脚本运行结束后,会回调一个您指定的函数里面的逻辑。(注意,以下两种情况不会执行回调函数:1.程序有语法错误;2.register_shutdown_function函数前,发生了致命错误,所以下面例子,我将register_shutdown_function放到了程序的最上面。)

还有一种应用场景就是:要做一个消费队列,因为某条有问题的数据导致致命错误,如果这条数据不处理掉,那么整个队列都会导致瘫痪的状态,这样可以用以下方法来解决。即:如果捕获到有问题的数据导致错误,则在回调函数中将这条数据处理掉就可以了。

php范例参考与解析:

<?php

register_shutdown_function('myFun'); //放到最上面,不然如果下面有致命错误,就不会调用myFun了。

$execDone = false; //程序是否成功执行完(默认为false)

/**

********************* 业务逻辑区*************************

*/

$tas = 3;

if($tas == 3)

{

new daixiaorui();

}

/**

********************* 业务逻辑结束*************************

*/

$execDone = true; //由于程序由上至下执行,因此当执行到此后,则证明逻辑没有出现致命的错误。

function myFun()

{

global $execDone;

if($execDone === false)

{

file_put_contents("E:/myMsg.txt", date("Y-m-d H:i:s")."---error: 程序执行出错。\r\n", FILE_APPEND);

/******** 以下可以做一些处理 ********/

}

}

这篇文章详细介绍了PHP中的文件操作,包括文件读取、判断文件是否存在、修改时间等,有需要的同学可以参考一下。

本文实例为大家分享了PHP文件操作的具体代码,供大家参考,具体内容如下

(1)文件读取

file_get_contents( )

实例:

 
 代码如下 复制代码
<?php
 
// 文件部分 文件的读取
 
// 要求把a.txt的内容读取出来,赋值给str变量
 
/* file_get_contents()可以获取一个文件的内容或一个网络资源的内容
 
file_get_contents()是读取文件/读网络数据比较快捷的一个函数,帮我们封装了打开/关闭等操作
 
但是要小心,这个函数一次性把文件的内容读取出来,放内存里,因此工作中处理上百M的大文件,谨慎使用
*/
 
$file='a.txt';
$str=file_get_contents($file);
echo$str;
 
/*
$url = 'http://www.163.com/';
$str = file_get_contents($url);
file_put_contents('162.html', $str);
*/
// 读出来的内容,能否写入另一个文件里面
/*
file_put_contents() 这个函数用来把内容写入文件
也是一个快捷函数,帮我们封装打开写入关闭的细节
 
注:如果指定的文件不存在,则会自动创建
*/
file_put_contents('./b.txt',$str);
 
 
/*
最简单的爬网页程序
*/
$url='http://www.sina.com/';
$html=file_get_contents($url);
 
if(file_put_contents('sina.html',$html)) {
 echo"抓过来了";
}else{
 echo"抓错了";
}
 

(2)文件操作

fopen: 打开
fread : 读取
fwrite: 写入
fclose: 关闭

实例:

 
 代码如下 复制代码
<?php
 
/*
 文件操作之
 fopen
 fread
 fwrite
 fclose
*/
 
 
/*
fopen() 打开一个文件,返回一个句柄资源
fopen($filename,mode);
第二个参数是‘模式',如只读模式,读写模式等
返回值:资源
*/
 
$file='./162.html';
$fh=fopen($file,'r');
 
// 沿着上面返回的$file这个资源通道来读文件
echofread($fh,10),'<br />';
 
// 返回 int(0),说明没有成功写入
// 原因:在于第二个mode参数,选的r,即只读打开
var_dump(fwrite($fh,'测试一下,能不能用'));
 
// 关闭资源
fclose($fh);
 
 
/*
r+读写模式,并把指针指向文件头
写入成功
注:从文件头,写入时,覆盖相等字节的字符
*/
$fh=fopen($file,'r+');
echofwrite($fh,'hello') ?'success':'fail','<br />';
fclose($fh);
 
 
/*
w:写入模式(fread读不了)
并把文件大小截为0
指针停于开头处
*/
echo'<br />';
$fh=fopen('./test.txt','w');
fclose($fh);
echo"ok!";
 

(3)文件是否存在、修改时间

filemtime

 
 代码如下 复制代码
<?php
 
/*
判断文件是否存在
获取文件的创建时间/修改时间
*/
 
$file='./students.txt';
if(file_exists($file)) {
 echo$file,"存在 <br />";
 echo'上次修改时间是:',date('Y-m-d,H:i:s',filemtime($file));
}else{
 echo"不存在";
}
 
这篇文章介绍了PHP登录,也就是ajax提交数据和后台校验的实例教程,代码简单易懂,有需要的同学可以参考一下

实现步骤:

一:在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php。

二:导出excel代码实现

/**方法**/
functionindex(){
    $this->display();
  }
publicfunctionexportExcel($expTitle,$expCellName,$expTableData){
    $xlsTitle= iconv('utf-8','gb2312',$expTitle);//文件名称
    $fileName=$_SESSION['account'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
    $cellNum=count($expCellName);
    $dataNum=count($expTableData);
    vendor("PHPExcel.PHPExcel");
     
    $objPHPExcel=newPHPExcel();
    $cellName=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
     
    $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
    // $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
    for($i=0;$i<$cellNum;$i++){
      $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2',$expCellName[$i][1]);
    }
     // Miscellaneous glyphs, UTF-8 
    for($i=0;$i<$dataNum;$i++){
     for($j=0;$j<$cellNum;$j++){
      $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3),$expTableData[$i][$expCellName[$j][0]]);
     }      
    }
     
    header('pragma:public');
    header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
    header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
    $objWriter= PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
    $objWriter->save('php://output');
    exit; 
  }
/**
   *
   * 导出Excel
   */
  functionexpUser(){//导出Excel
    $xlsName="User";
    $xlsCell=array(
    array('id','账号序列'),
    array('truename','名字'),
    array('sex','性别'),
    array('res_id','院系'),
    array('sp_id','专业'),
    array('class','班级'),
    array('year','毕业时间'),
    array('city','所在地'),
    array('company','单位'),
    array('zhicheng','职称'),
    array('zhiwu','职务'),
    array('jibie','级别'),
    array('tel','电话'),
    array('qq','qq'),
    array('email','邮箱'),
    array('honor','荣誉'),
    array('remark','备注') 
    );
    $xlsModel= M('Member');
   
    $xlsData=$xlsModel->Field('id,truename,sex,res_id,sp_id,class,year,city,company,zhicheng,zhiwu,jibie,tel,qq,email,honor,remark')->select();
    foreach($xlsDataas$k=>$v)
    {
      $xlsData[$k]['sex']=$v['sex']==1?'男':'女';
    }
    $this->exportExcel($xlsName,$xlsCell,$xlsData);
      
  }

第三:导入excel数据代码

functionimpUser(){
    if(!empty($_FILES)) {
      import("@.ORG.UploadFile");
      $config=array(
        'allowExts'=>array('xlsx','xls'),
        'savePath'=>'./Public/upload/',
        'saveRule'=>'time',
      );
      $upload=newUploadFile($config);
      if(!$upload->upload()) {
        $this->error($upload->getErrorMsg());
      }else{
        $info=$upload->getUploadFileInfo();
         
      }
     
      vendor("PHPExcel.PHPExcel");
        $file_name=$info[0]['savepath'].$info[0]['savename'];
        $objReader= PHPExcel_IOFactory::createReader('Excel5');
        $objPHPExcel=$objReader->load($file_name,$encode='utf-8');
        $sheet=$objPHPExcel->getSheet(0);
        $highestRow=$sheet->getHighestRow();// 取得总行数
        $highestColumn=$sheet->getHighestColumn();// 取得总列数
        for($i=3;$i<=$highestRow;$i++)
        { 
          $data['account']=$data['truename'] =$objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
          $sex=$objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
          // $data['res_id']  = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
          $data['class'] =$objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
          $data['year'] =$objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
          $data['city']=$objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
          $data['company']=$objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
          $data['zhicheng']=$objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
          $data['zhiwu']=$objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
          $data['jibie']=$objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue();
          $data['honor']=$objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue();
          $data['tel']=$objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();
          $data['qq']=$objPHPExcel->getActiveSheet()->getCell("N".$i)->getValue();
          $data['email']=$objPHPExcel->getActiveSheet()->getCell("O".$i)->getValue();
          $data['remark']=$objPHPExcel->getActiveSheet()->getCell("P".$i)->getValue();
          $data['sex']=$sex=='男'?1:0;
          $data['res_id'] =1;
           
          $data['last_login_time']=0;
          $data['create_time']=$data['last_login_ip']=$_SERVER['REMOTE_ADDR'];
          $data['login_count']=0;
          $data['join']=0;
          $data['avatar']='';
          $data['password']=md5('123456');      
          M('Member')->add($data);
      
        }
         $this->success('导入成功!');
    }else
      {
        $this->error("请选择上传的文件");
      } 
      
 
  }

四、模板代码

<html>
  <head>
     
  </head>
  <body>
  <P><ahref="{:U('Index/expUser')}">导出数据并生成excel</a></P><br/>
    <formaction="{:U('Index/impUser')}"method="post"enctype="multipart/form-data">
      <inputtype="file"name="import"/>
      <inputtype="hidden"name="table"value="tablename"/>
      <inputtype="submit"value="导入"/>
    </form>
  </body>
   
</html>

小编推荐的这篇文章介绍了thinkphp实现excel数据的导入导出,非常具有价值,感兴趣的同学快来看看吧!

实现步骤:

一:在http://phpexcel.codeplex.com/下载最新PHPExcel放到Vendor下,注意位置:ThinkPHP\Extend\Vendor\PHPExcel\PHPExcel.php。

二:导出excel代码实现

/**方法**/
functionindex(){
    $this->display();
  }
publicfunctionexportExcel($expTitle,$expCellName,$expTableData){
    $xlsTitle= iconv('utf-8','gb2312',$expTitle);//文件名称
    $fileName=$_SESSION['account'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
    $cellNum=count($expCellName);
    $dataNum=count($expTableData);
    vendor("PHPExcel.PHPExcel");
     
    $objPHPExcel=newPHPExcel();
    $cellName=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
     
    $objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
    // $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
    for($i=0;$i<$cellNum;$i++){
      $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2',$expCellName[$i][1]);
    }
     // Miscellaneous glyphs, UTF-8 
    for($i=0;$i<$dataNum;$i++){
     for($j=0;$j<$cellNum;$j++){
      $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3),$expTableData[$i][$expCellName[$j][0]]);
     }      
    }
     
    header('pragma:public');
    header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
    header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
    $objWriter= PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
    $objWriter->save('php://output');
    exit; 
  }
/**
   *
   * 导出Excel
   */
  functionexpUser(){//导出Excel
    $xlsName="User";
    $xlsCell=array(
    array('id','账号序列'),
    array('truename','名字'),
    array('sex','性别'),
    array('res_id','院系'),
    array('sp_id','专业'),
    array('class','班级'),
    array('year','毕业时间'),
    array('city','所在地'),
    array('company','单位'),
    array('zhicheng','职称'),
    array('zhiwu','职务'),
    array('jibie','级别'),
    array('tel','电话'),
    array('qq','qq'),
    array('email','邮箱'),
    array('honor','荣誉'),
    array('remark','备注') 
    );
    $xlsModel= M('Member');
   
    $xlsData=$xlsModel->Field('id,truename,sex,res_id,sp_id,class,year,city,company,zhicheng,zhiwu,jibie,tel,qq,email,honor,remark')->select();
    foreach($xlsDataas$k=>$v)
    {
      $xlsData[$k]['sex']=$v['sex']==1?'男':'女';
    }
    $this->exportExcel($xlsName,$xlsCell,$xlsData);
      
  }

第三:导入excel数据代码

functionimpUser(){
    if(!empty($_FILES)) {
      import("@.ORG.UploadFile");
      $config=array(
        'allowExts'=>array('xlsx','xls'),
        'savePath'=>'./Public/upload/',
        'saveRule'=>'time',
      );
      $upload=newUploadFile($config);
      if(!$upload->upload()) {
        $this->error($upload->getErrorMsg());
      }else{
        $info=$upload->getUploadFileInfo();
         
      }
     
      vendor("PHPExcel.PHPExcel");
        $file_name=$info[0]['savepath'].$info[0]['savename'];
        $objReader= PHPExcel_IOFactory::createReader('Excel5');
        $objPHPExcel=$objReader->load($file_name,$encode='utf-8');
        $sheet=$objPHPExcel->getSheet(0);
        $highestRow=$sheet->getHighestRow();// 取得总行数
        $highestColumn=$sheet->getHighestColumn();// 取得总列数
        for($i=3;$i<=$highestRow;$i++)
        { 
          $data['account']=$data['truename'] =$objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
          $sex=$objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
          // $data['res_id']  = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
          $data['class'] =$objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
          $data['year'] =$objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
          $data['city']=$objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
          $data['company']=$objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
          $data['zhicheng']=$objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
          $data['zhiwu']=$objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
          $data['jibie']=$objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue();
          $data['honor']=$objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue();
          $data['tel']=$objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();
          $data['qq']=$objPHPExcel->getActiveSheet()->getCell("N".$i)->getValue();
          $data['email']=$objPHPExcel->getActiveSheet()->getCell("O".$i)->getValue();
          $data['remark']=$objPHPExcel->getActiveSheet()->getCell("P".$i)->getValue();
          $data['sex']=$sex=='男'?1:0;
          $data['res_id'] =1;
           
          $data['last_login_time']=0;
          $data['create_time']=$data['last_login_ip']=$_SERVER['REMOTE_ADDR'];
          $data['login_count']=0;
          $data['join']=0;
          $data['avatar']='';
          $data['password']=md5('123456');      
          M('Member')->add($data);
      
        }
         $this->success('导入成功!');
    }else
      {
        $this->error("请选择上传的文件");
      } 
      
 
  }

四、模板代码

<html>
  <head>
     
  </head>
  <body>
  <P><ahref="{:U('Index/expUser')}">导出数据并生成excel</a></P><br/>
    <formaction="{:U('Index/impUser')}"method="post"enctype="multipart/form-data">
      <inputtype="file"name="import"/>
      <inputtype="hidden"name="table"value="tablename"/>
      <inputtype="submit"value="导入"/>
    </form>
  </body>
   
</html>

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • 一个奇葩的最短的 IE 版本判断JS脚本

    使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • c# 判断是否为空然后赋值的4种实现方法

    下面小编就为大家分享一篇c# 判断是否为空然后赋值的4种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • MySql存储过程之逻辑判断和条件控制

    具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
  • PHP中empty和isset对于参数结构的判断及empty()和isset()的区别

    废话不多说了,直接给大家贴代码了。<&#63;php class test{} $a1 = null; $a2 = ""; //$a3 = $a4 = 0; $a5 = '0'; $a6 = false; $a7 = array(); //var $a8; $a9 = new test(); for ($i=1; $i <=9 ; $i++) {...2015-11-24
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • Python爬取微信小程序通用方法代码实例详解

    这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29