csv文件是一种纯文本文件,但利用excel文件打开可以当作excel文件使用,下面我来总结几个常用的读取excel的php实例。
PHP有自带的分析.csv函数:fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。
length (可选)必须大于 CVS 文件内最长的一行。在 PHP 5 中该参数是可选的。如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率。
delimiter (可选)设置字段分界符(只允许一个字符),默认值为逗号。
enclosure (可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在 PHP 4.3.0 中添加的。 和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组。
fgetcsv() 出错时返回 FALSE,包括碰到文件结束时。
注意: CSV 文件中的空行将被返回为一个包含有单个 null 字段的数组,不会被当成错误。
例
代码如下 |
复制代码 |
<?php
$row = 1;
$handle = fopen("test.csv","r");
while ($data = fgetcsv($handle, 1000, ",")) {
$num = count($data);
echo "
$num fields in line $row:n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "n";
}
}
fclose($handle);
?>
|
例2
在百度统计和站长工具使用过程中会涉及到很多csv文件,比如我们下载百度站长工具的404统计数据,直接可以使用以下php脚本来读取csv文件然后更新提交。
php读取excel文件(.csv)参考代码:
代码如下 |
复制代码 |
<?php
function getCSVdata($filename)
{
$row = 1;//第一行开始
if(($handle = fopen($filename, "r")) !== false)
{
while(($dataSrc = fgetcsv($handle)) !== false)
{
$num = count($dataSrc);
for ($c=0; $c < $num; $c++)//列 column
{
if($row === 1)//第一行作为字段
{
$dataName[] = $dataSrc[$c];//字段名称
}
else
{
foreach ($dataName as $k=>$v)
{
if($k == $c)//对应的字段
{
$data[$v] = $dataSrc[$c];
}
}
}
}
if(!empty($data))
{
$dataRtn[] = $data;
unset($data);
}
$row++;
}
fclose($handle);
return $dataRtn;
}
}
$aData = getCSVdata('all_www.111cn.net .csv');
foreach ($aData as $k=>$v ){
echo "http://".$v['a']."<br>";
}
?> |
PHP自定义类
优点:跨平台。某些类支持写操作。支持.xls二进制文件
常用的类有phpExcelReader、PHPExcel。其中后者支持读写,但是需要php5.2以上版本。
phpExcelReader是专门用来读取文件的。返回一个数组,包含表格的所有内容。
该 class 使用的方法可以参考网站下载回来的压缩档中的 example.php。
例3.php数据导入导出之excel
上传cvs并导入到数据库中,测试成功(部分代码不规范,如PHP_SELF那里要改写成
代码如下 |
复制代码 |
$_SERVER["PHP_SELF"] )
PHP代码
<?php
$fname = $_FILES['MyFile']['name'];
$do = copy($_FILES['MyFile']['tmp_name'],$fname);
if ($do)
{
echo"导入数据成功
";
} else {
echo "";
}
?>
<form ENCTYPE="multipart/form-data" ACTION="<?php echo"".$PHP_SELF.""; ?>" METHOD="POST">
导入CVS数据 <input NAME="MyFile" TYPE="file"> <input VALUE="提交" TYPE="submit">
</form>
<?
error_reporting(0);
//导入CSV格式的文件
$connect=mysql_connect("localhost","a0530093319","123456") or die("could not connect to database");
mysql_select_db("a0530093319",$connect) or die (mysql_error());
$fname = $_FILES['MyFile']['name'];
$handle=fopen("$fname","r");
while($data=fgetcsv($handle,10000,","))
{
$q="insert into test (code,name,date) values ('$data[0]','$data[1]','$data[2]')";
mysql_query($q) or die (mysql_error());
}
fclose($handle);
?>
|
用php将数据库导出成excel,测试完全成功
PHP代码
代码如下 |
复制代码 |
<?php
$DB_Server = www.111cn.net;//这里是你的数据连接
$DB_Username = "a0530093319";
$DB_Password = "123456";
$DB_DBName = "a0530093319";
$DB_TBLName = "member";
$savename = date("YmjHis");
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password)
or die("Couldn't connect.");
mysql_query("Set Names 'gb2312'");
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=".$savename.".$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
$now_date = date("Y-m-j H:i:s");
$title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";
$sql = "Select * from $DB_TBLName";
$ALT_Db = @mysql_select_db($DB_DBName, $Connect)
or die("Couldn't select database");
$result = @mysql_query($sql,$Connect)
or die(mysql_error());
echo("$title ");
$sep = " ";
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . " ";
}
print(" ");
$i = 0;
while($row = mysql_fetch_row($result)) {
$schema_insert = "";
for($j=0; $j<mysql_num_fields($result);$j++) {
if(!isset($row[$j]))
$schema_insert .= "NULL".$sep;
elseif ($row[$j] != "")
$schema_insert .= "$row[$j]".$sep;
else
$schema_insert .= "".$sep;
}
$schema_insert = str_replace($sep."$", "", $schema_insert);
$schema_insert .= " ";
print(trim($schema_insert));
print " ";
$i++;
}
return (true);
?>
|
在网上看了很多教程都是只讲到了一部份,如果连接数据库就只写了连接数据或查询只有查询,下面这文章从php 配置mysql连接然后到查询数据实例。
下面讲一下PHP链接MYSQL数据库
PHP与mysql链接和查询全过程
1、配制:
php.ini 加载mysql组件:
extension=php_mysql.dll 前的; 去掉
extension_dir = ” “ 路径是否正确
2、PHP语法
PHP链接mysql函数
mysql_connect: 开启MySQL 链接
mysql_select_db: 打开一个数据库
@ 和 or die 隐藏错误 和 条件显示
用法: mysql_connect(“主机“, “用户名“, “密码“)
mysql_select_db(“打开数据库“,连接标识符);
( 如果不特别声明连接标识符,则默认为是上一次打开的连接。)
3、如何去执行一个SQL语句
mysql_query (SQL语句 ,连接标识符);
说明:mysql_query用来根据连接标识符向该数据库服务器的当前数据库发送查询, 如果连接标识符默认,则默认为是上一次打开的连接。
返回值:成功后返回一个结果标识符,失败时返回false。
4、 两种查询函数array / row区别
格式:mysql_fetch_row(result);
说明:mysql_fetch_row用来查询结果的一行保存至数组,该数组下标从0开始,每一个数组元素对应 一个域。通过循环,可以将查询结果全部获得。
格式:mysql_fetch_array(result);
说明:mysql_fetch_array和mysql_fetch_row功能基本相同,只不过它除了可以用从0开始的偏移量作 索引,还可以用域名作索引。 值返回下一行的所有域值,并将其保存至一个数组中,没有行时返回false。
5、乱码问题
代码如下 |
复制代码 |
mysql_query(“set names ‘GBK’”); 解决中文乱码 |
6、实例:
代码如下 |
复制代码 |
//A、链接数据库
$conn = @ mysql_connect(“localhost”, “数据库用户名”, “数据库密码”) or die(“数据库链接错误”);
mysql_select_db(“数据库名”, $conn);
mysql_query(“set names ‘utf-8′”); //使用utf-8中文编码;
// B、查询数据库测试一下
$SQL=”SELECT * FROM `表名` order by 以某字段排序名 desc”;
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
print_r($row );
}
|
本源码入教程为本人原创,只供学习,如用至违法用途与作者无关。
CSV是(逗号分隔值)的英文缩写,通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也可以直接使用excel打开,和excel文件一样。
php生成excel文件(csv)参考代码如下:
代码如下 |
复制代码 |
<?php
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename= www.111cn.net test_data.xls");
//输出内容如下:
echo "姓名"."t";
echo "年龄"."t";
echo "学历"."t";
echo "n";
echo "张三"."t";
echo "25"."t";
echo "本www.111Cn.net科"."t";
?>
|
下面这种方法是从一个项目中摘取的(只支持1997-2003) t是Tab
代码如下 |
复制代码 |
<?php
/**
* 导出 Excel 表格
*
*/
public function excel(){
// 表示输出的是excel文件
header("Content-type:application/vnd.ms-excel;");
// 表示输出的文件名为lamp_dtype.xls
header("Content-Disposition:filename=lamp_dtype.xls");
$exc .= "类型名称t宿舍类别t宿舍面积t容纳人数t月租/人t备注tn";
$dtype = D('dtype');
// 查询数据库内的信息
$datas = $dtype->select();
// 循环输出每条信息
foreach($datas as $data){
$exc .="{$data['name']}t{$data['type']}t{$data['area']}t{$data['capacity']}t{$data['rent']}t{$data['remark']}tn";
}
// UTF-8 转换成 GB2312
$exc =iconv("UTF-8","GB2312",$exc);
echo $exc;
// 避免输出下面的内容
exit();
}
?>
|
=================================================
生成csv: 逗号是Tab
本文章来给大家介绍一个php+mysql文章浏览次数统计及发布时间实例,如果你对此有需要不防进入参考一下吧。
一个网页能显示出“文件上传时间”和“浏览人数”,不仅是文章历史的纪录,也能反映出该文章的受众欢迎度。“文件上传时间”和“浏览人数”记录方法肯定很多,笔者根据自己的理解用php+mysql写了一个,不知代码够不够优化,但使用起来感觉不错,没有问题,今写出来和大家一起分享。
思路
1、文章上传时先在数据库中写入“网页地址”、“上传时间time()”和“计数起点0”。
2、当用户打开网页时,先通过$_SESSION["article"]判断是否在线。如果不在线,则打开数据库,取出原有的计数,并加 1 ,再更新数据库。防止在线用户“刷新”,虚增计数。
3、打开并取出最后更新的计数,显示在网页上。
举例
在<html>前面写下:
代码如下 |
复制代码 |
<?php
session_start();
$stsfile = "10001.php";
$nowtime = time();
date_default_timezone_set("Asia/Chongqing");//设置时间标准
If (!isset($_SESSION['article']) || $_SESSION['article'] != $stsfile ) //判断用户是否在线
{
$link = mysql_connect("localhost","库名","密码") or die ("打开数据库失败");
mysql_select_db("库名",$link); //连接数据库
mysql_query("set names 'utf8'"); //设置存取编码
//查询$stsfile的记录是否已经存在,如果不存在就插入时间及计数基数0,如果存在,则+1,更新计数。
$sql = "SELECT * FROM statistics WHERE `StsFile`= '$stsfile'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
If (empty($row['StsID']))
{
mysql_query("INSERT INTO `statistics`(`StsFile`,`StsTime`,`StsNumb`) VALUES ('$stsfile','$nowtime','0')");
session_start();
$_SESSION['article'] = $stsfile;
}
Else
{
$numb = $row['StsNumb']+1;
mysql_query("UPDATE `statistics` SET `StsNumb` = '$numb' WHERE `StsFile` = '$stsfile'");
session_start();
$_SESSION['article'] = $stsfile; //写下$_SESSION[]
}
}
?>
|
网页显示部分即<html>后面部分:
代码如下 |
复制代码 |
<?php
$link = mysql_connect("localhost","库名","密码") or die ("打开数据库失败");
mysql_select_db("库名",$link); //连接数据库
mysql_query("set names 'utf8'"); //设置存取编码
$sql = "SELECT * FROM statistics WHERE `StsFile`= '$stsfile'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
echo "上传时间:".date("Y-m-d H:i:s",$row['StsTime'])." 浏览数:".$row['StsNumb'];
?>
|
在php中生成csv文件的方法很是简单,这里我来介绍一下自己用到的一个实例,把数组直接转换成csv文件输出,有需要了解的朋友可参考。
例
代码如下 |
复制代码 |
<?php
$data = array(
array( 'row_1_col_1', 'row_1_col_2', 'row_1_col_3' ),
array( 'row_2_col_1', 'row_2_col_2', 'row_2_col_3' ),
array( 'row_3_col_1', 'row_3_col_2', 'row_3_col_3' ),
);
$filename = "example";
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$filename}.csv");
header("Pragma: no-cache");
header("Expires: 0");
outputCSV($data);
function outputCSV($data) {
$outputBuffer = fopen("php://output", 'w');
foreach($data as $val) {
foreach ($val as $key => $val2) {
$val[$key] = iconv('utf-8', 'gbk', $val2);// CSV的Excel支持GBK编码,一定要转换,否则乱码
}
fputcsv($outputBuffer, $val);
}
fclose($outputBuffer);
}
?>
|
例2
看一个读取csv文件的实例
读取cvs,使用fgetcsv()文件指针中读入一行并解析 CSV 字段
比如说我要读取如下csv文件
代码如下 |
复制代码 |
<?php
/** by www.111cn.net */
$row = 1;
$handle = fopen("file.csv","r");
//fgetcsv() 解析读入的行并找出 CSV格式的字段然后返回一个包含这些字段的数组。
while ($data = fgetcsv($handle, 1000, ",")) {
$num = count($data);
echo "<p> $num fields in line $row: <br>n";
$row++;
for ($c=0; $c < $num; $c++) {
//注意中文乱码问题
$data[$c]=iconv("gbk", "utf-8//IGNORE",$data[$c]);
echo $data[$c] . "<br>n";
}
}
fclose($handle);
?>
|
标签:[!--infotagslink--]