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"不存在";
}
|
实现步骤:
一:在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>
|
实现步骤:
一:在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>
|