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> |
用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); ?> |