PHP实现数据导入、CSV文件下载的例子

 更新时间:2016年11月25日 15:41  点击:1302
下面我来给各位同学简单的分享两个利用php操作csv格式文件的例子,一个是对csv输出下载,另一个是利用php的fgetcsv函数、fputcsv函数进行读写操作。

导入、导出CSV文件

 代码:

 代码如下 复制代码

class csv
{
 private $resource;

 /**
  * @param string $fileName 文件路径
  * @param string $mode     文件访问类型:w:写入、r:只读
  */
 public function __construct($fileName, $mode)
 {
  $this->resource = fopen($fileName, $mode);
 }

 public function __destruct()
 {
  fclose($this->resource);
 }

 /**
  * 导入CSV www.111cn.net
   * @param array $data
  * @return int
  */
 public function export($data)
 {
  fputcsv($this->resource, $data);
 }

 /**
  * 导出CSV
  * @return array
  */
 public function import()
 {
  $tmp = array();
  while($data = fgetcsv($this->resource))
  {
   $tmp[] = $data;
  }

  return $tmp;
 }
}

这里我们主要用到了php fgetcsv函数、fputcsv函数。


CSV文件下载

 代码如下 复制代码

function exportUserTask()
{
 //获取数据库数据
 /*
  * $result = array(
  *   array(value1,value2,value3,value4,value5,value6),
  *   array(value1,value2,value3,value4,value5,value6),
  * );
  */

 $handle = fopen('php://output', "w");
 header('Content-Type: application/csv');
 header('Content-Disposition: attachment; filename="test.csv"');

 //表头 www.111cn.net
 fputcsv($handle, array('用户UID', '用户名', '进行中', '已完成', '已失败', '总计'));

 foreach($result as $value)
 {
  fputcsv($handle, $value);
 }

 fclose($handle);
}

需要提醒的是在导入、导出数据过程注意中文乱码问题,这主要是数据编码格式问题,使用过程根据实际情况对数据进行转码。

PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格

导出类

PHPExcel类导出excel,同时对PHPExcel做了些精简处理,基本上可以满足数据导出excel的功能

代码如下:

<?php

 代码如下 复制代码

//载入PHPExcel类
require './phpexcel/PHPExcel.php';

//创建一个excel对象实例
$objPHPExcel = new PHPExcel();

//设置文档基本属性
$objProps = $objPHPExcel->getProperties();
$objProps->setCreator("Lao Mao");
$objProps->setLastModifiedBy("Lao Mao");
$objProps->setTitle("Office XLS Test Document");
$objProps->setSubject("Office XLS Test Document, Demo");
$objProps->setDescription("Test document, generated by PHPExcel.");
$objProps->setKeywords("office excel PHPExcel");
$objProps->setCategory("Test");

//设置当前的sheet索引,用于后续的内容操作。
//一般只有在使用多个sheet的时候才需要显示调用。
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
$objPHPExcel->setActiveSheetIndex(0);

//设置当前活动sheet的名称
$objActSheet = $objPHPExcel->getActiveSheet();
$objActSheet->setTitle('测试Sheet');

//设置单元格内容www.111cn.net
//这里的数据可以从数据库中读取,然后再做循环处理
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'a1');
$objPHPExcel->getActiveSheet()->SetCellValue('A2', 'a2');
$objPHPExcel->getActiveSheet()->SetCellValue('A3', 'a3');
$objPHPExcel->getActiveSheet()->SetCellValue('A4', 'a4');
$objPHPExcel->getActiveSheet()->SetCellValue('A5', 'a5');

$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'b1');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'b2');
$objPHPExcel->getActiveSheet()->SetCellValue('B3', 'b3');
$objPHPExcel->getActiveSheet()->SetCellValue('B4', 'b4');
$objPHPExcel->getActiveSheet()->SetCellValue('B5', 'b5');

$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'c1');
$objPHPExcel->getActiveSheet()->SetCellValue('C2', 'c2');
$objPHPExcel->getActiveSheet()->SetCellValue('C3', 'c3');
$objPHPExcel->getActiveSheet()->SetCellValue('C4', 'c4');
$objPHPExcel->getActiveSheet()->SetCellValue('C5', 'c5');

//输出文档
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);

//设置header头部信息,并输出到浏览器
//header('Content-Type: application/vnd.ms-excel');
//header("Content-Disposition:attachment; filename=demo.xls");
//header('Cache-Control: max-age=0');
//$objWriter->save('php://output');

//保存至某一位置
$objWriter->save(dirname(__FILE__) . '/demo.xls');


 

导入excel的方法:

 代码:

 代码如下 复制代码

<?php
//载入PHPExcel类
include(dirname(__FILE__).'/phpexcel/PHPExcel.php');

$Obj = new PHPExcel_Reader_Excel5();
$Obj->setReadDataOnly(true);

//读取demo.xls文件
$phpExcel = $Obj->load(dirname(__FILE__).'/output.xls');

//获取当前活动sheet
$objWorksheet = $phpExcel->getActiveSheet();

//获取行数
$highestRow = $objWorksheet->getHighestRow();

//获取列数
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);

//循环输出数据 www.111cn.net
$data = array();
for($row = 1; $row <= $highestRow; ++$row) {
 for($col = 0; $col < $highestColumnIndex; ++$col) {
  $val = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
  $data[$row][$col] = trim($val);
 }
}

echo '<pre>';
print_r($data);
echo '</pre>';

但是这种方式有缺陷,老版本的excel有个数据上限,最多65536行数据,这时我们就无法通过excel来实现大数据的导出, 但我估计也没几个有这么我数据吧,当然如果有可以考虑使用csv来操作

下面我们一起来看一个PHP模拟QQ登录,发送和接收信息的例子,希望此例子对各位同学会有所帮助。
 代码如下 复制代码


<?php
header(‘Content-type: text/html; charset=utf-8′);
$sid = qqLogin(‘发送信息的QQ’,'发送信息的QQ密码’);   //登录帐号
sendMsg($sid,’接收信息的QQ’,'聊天内容’);            //发送消息

$data = getMsg($sid,’接收信息的QQ’);               //获取和某个帐号的聊天记录

if(!empty($data)){
foreach($data as $v){
echo $v['title'].’<br />’;
echo $v['msg'].’<br />’;
echo ‘————————<br />’;
}
}

function qqLogin($qq_num,$qq_pwd){                //登录帐号
$data = httpGet(‘http://pt.3g.qq.com/’);
$action = preg_match(“/action=”(.+)?”/”, $data, $matches);
$action = $matches[1];
$params = array();
$params["login_url"] = ‘http://pt.3g.qq.com/s?aid=nLogin’;
$params["sidtype"] = 1;
$params["loginTitle"] = ‘手机腾讯网’;
$params["bid"] = 0;
$params["qq"] = $qq_num;
$params["pwd"] = $qq_pwd;
$params["loginType"] =1;
$data = httpPost($action, $params,1);
$action = preg_match(“/sid=(.+?)&/”, $data, $matches);
$sid = $matches[1];
if($sid){
return $sid;
}else {
echo ‘登录失败’;
}
}

function sendMsg($sid,$to_num,$msg){            //发送消息
$params = array();
$params["msg"] = $msg;
$params["u"] = $to_num;
$params["saveURL"] = 0;
$params["do"] = “send”;
$params["on"] = 1;
$params["aid"] = “发送”;
$url = “http://q16.3g.qq.com/g/s?sid=” . $sid;
$data = httpPost($url, $params);
if(preg_match(‘/消息发送成功/’,$data)) echo ‘发送成功<br />’;
else  echo ‘发送失败’;

}

function getMsg($sid,$qq_num) {                    //获取消息
$url = “http://q16.3g.qq.com/g/s?sid=” . $sid . “&u=” . $qq_num . “&saveURL=0&aid=nqqChat”;
$data = httpGet($url);
preg_match_all(‘/<div class=”main-module bm-gray”>s+<p class=”(?:ft-s-gray|ft-s ft-cl2)”>(.+?)</p>s+<p>(.+?)</p></div>/s’,str_replace(“rn”,”",$data),$m);
foreach($m[1] as $k=>$v){
$tmp['title']=$v;
$tmp['msg']=$m[2][$k];
$r[]=$tmp;
}
return $r;
}

function httpGet($url,$header=0){                //GET请求
$opt = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => $header,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 60,
CURLOPT_USERAGENT=>’Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13′
);
return curlRun($opt);
}

function httpPost($url,$data,$header=0){         //POST请求
$opt = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => $header,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 60,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_USERAGENT=>’Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13′
);
return curlRun($opt);
}

function curlRun($opt){
$ch = curl_init();
curl_setopt_array($ch,$opt);
$r = curl_exec($ch);
curl_close($ch);
return $r;
}

?>

字节换算功能函数就是把kb转换在mb,gb,tg,eb,pb之类的单位,这个对于我们文件上传是非常的有用的,下面给各位分享一个函数。
 代码如下 复制代码

//字节换算
function conversion($size) {
$kb = 1024; // 1KB(Kibibyte,千字节)=1024B,
$mb = 1024 * $kb; //1MB(Mebibyte,兆字节,简称“兆”)=1024KB,
$gb = 1024 * $mb; // 1GB(Gigabyte,吉字节,又称“千兆”)=1024MB,
$tb = 1024 * $gb; // 1TB(Terabyte,万亿字节,太字节)=1024GB,
$pb = 1024 * $tb; //1PB(Petabyte,千万亿字节,拍字节)=1024TB,
$fb = 1024 * $pb; //1EB(Exabyte,百亿亿字节,艾字节)=1024PB,
$zb = 1024 * $fb; //1ZB(Zettabyte,十万亿亿字节,泽字节)= 1024EB,
$yb = 1024 * $zb; //1YB(Yottabyte,一亿亿亿字节,尧字节)= 1024ZB,
$bb = 1024 * $yb; //1BB(Brontobyte,一千亿亿亿字节)= 1024YB
 
if ($size &lt; $kb) {
return $size . " B";
} else if ($size &lt; $mb) {
return round($size / $kb, 2) . " KB";
} else if ($size &lt; $gb) {
return round($size / $mb, 2) . " MB";
} else if ($size &lt; $tb) {
return round($size / $gb, 2) . " GB";
} else if ($size &lt; $pb) {
return round($size / $tb, 2) . " TB";
} else if ($size &lt; $fb) {
return round($size / $pb, 2) . " PB";
} else if ($size &lt; $zb) {
return round($size / $fb, 2) . " EB";
} else if ($size &lt; $yb) {
return round($size / $zb, 2) . " ZB";
} else {
return round($size / $bb, 2) . " YB";
}
 
}
在php中exit()与die()我常常分不清楚他们的区别是什么,当然也没想去了解,因为感觉都是一样的,今天看了下面方法之后才发现原来他们有这么大的区别,下面我来和大家一起再看一篇吧。

先思考一个问题:

如下代码会向页面显示什么?

 代码如下 复制代码

 <?php 

 die(123); 

 ?>

曾经有段时间我一直认为 页面会显示 123,但实践结果告诉我,答案错了,页面一片空白!

一直不知道为什么,死活不输出123,为了让页面输出123,我把它修改为如下代码:

 代码如下 复制代码

 <?php 

echo '123'; 

 die(); 

 ?>
 

 

网络上的一段资料:

PHP中exit()与die()的区别

PHP手册:die()Equivalent to exit()。

说明:die()和exit()都是中止脚本执行函数;其实exit和die这两个名字指向的是同一个函数,die()是exit()函数的别名。该函数只接受一个参数,可以是一个程序返回的数值或是一个字符串,也可以不输入参数,结果没有返回值。

参考:虽然两者相同,但通常使用中也有细微的选择性。例如:

当传递给exit和die函数的值为0时,意味着提前终止脚本的执行,通常用exit()这个名字。

 代码如下 复制代码

 echo "1111"; 

 exit(0); 

 echo "2222"; 

 // 22222不会被输出,因为程序运行到exit(0)时,脚本已经被提前终止,“马上断气”。
当程序出错时,可以给它传递一个字符串,它会原样输出在系统终端上,通常使用die()这个名字。

 

 代码如下 复制代码
$fp=fopen("./readme.txt","r") or die("不能打开该文件"); 

2 // 这种情况下,如果fopen函数被调用返回布尔值false时,die()将立即终止脚本,并马上打印 

3 // 传递给它的字符串,“死前还能说一两句话”。
 


--------------------------------------------------------------------------------

 

回到前面这个话题,下面代码为什么不输出 123 到页面?

 

 代码如下 复制代码

 <?php 

 die(123); 

 // 或 exit(123); 

?>

自己总结:

1、功能上,die() 就等同于 exit();

2、PHP有多种运行方式,即可网站形式,也可脚本形式(不需要Web服务器)。

当PHP为脚本形式运行时,建议用exit():

比如说 Bash Shell脚本语言,当它要停止运行时,会用 exit()函数终止脚本,并允许输出点内容到运行环境(一般是存储到一个全局变量中),但输出的内容只能是 数字,表示“命令的结束状态”。

 

也就是说,exit(123)只是输出一种运行状态123,而不是真的要向控制台输出 123。如果要向控制台输出123,代码得改成如下形式:

 代码如下 复制代码


<?php

 exit('123'); 
?>

 

当PHP为网站形式运行时,建议用die():

但此时 die(数字),就没啥意义,因为它不会向页面输出 数字 字符串,也就是说,如果想让页面终止并且输出数字的话,得改成如下形式

 代码如下 复制代码

 <?php 

 die('123'); 

 ?>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#实现写入文本文件内容的方法

    这篇文章主要介绍了C#实现写入文本文件内容的方法,涉及C#针对文本文件的判断、创建及写入等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31