很多站长朋友们都不太清楚php数据写入csv,今天小编就来给大家整理php数据写入csv,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 PHP导出100万数据到excel 2、 php 如何从数据里选择所需要信息然后生成csv文件自动保存在指定的路径?(不提示保存,自动) 3、 php中如何导入导出CSV格式的文件 4、 php如何读取CSV大文件并且将其导入数据库示例 5、 php 写入数据到csv中,不覆盖原有数据,以新增行插入如何实现? 6、 php 生成 csv文件 PHP导出100万数据到excelphp导出数据excel有专门的库,当导出少量数据的时候速度很快,但是当数据量大的时候就会存在服务器内存不够之类的。
所以在导出大量数据的时候就应该分页查询数据,避免服务器宕机。正好PHP提供了fputcsv函数可以将数据写入到csv文件中。
这样我们就可以使用PHP对数据进行分页查询,再写入到csv文件中。
php 如何从数据里选择所需要信息然后生成csv文件自动保存在指定的路径?(不提示保存,自动)命令行模式下,或者web模式下保存的路径在服务器中,可以达到你的要求(有该路径的权限即可)
如果是在web模式下,不提示直接保存到访客的电脑中的某个位置,是不可以的。
web模式保存到客户端,只能通过下载,由用户指定,或保存到默认的下载目录。
以下是代码示例:
$dsn?=?'mysql:dbname=testdb;host=127.0.0.1';
$user?=?'dbuser';
$password?=?'dbpass';
//连接数据库?pdo
try?{
????$dbh?=?new?PDO($dsn,?$user,?$password,?array(PDO::MYSQL_ATTR_INIT_COMMAND?=>?"SET?NAMES?'UTF8'"));
}?catch?(PDOException?$e)?{
????echo?'Connection?failed:?'?.?$e->getMessage();exit;
}
//读取数据,?具体sql你根据情况修改
$stat?=?$dbh->prepare('SELECT?*?FROM?`table`?WHERE?`id`>0?LIMIT?100;');
$stat->execute();
$result?=?$stat->fetchAll(PDO::FETCH_ASSOC);
//创建csv文件并打开文件指针
$filepath='file.csv';
$fp?=?fopen($filepath,?'w');
//写入数据
foreach($result?as?$i=>$row){
????//写入标题行
????if($i==0){
????????fputcsv($fp,?array_keys($row));
????}
????fputcsv($fp,?$row);
}
//关闭文件指针
fclose($fp);
//把文件输出到下载
$file?=?fopen($filepath,"r");?//?打开文件
$size=filesize($filepath);
Header("Content-type:?application/octet-stream");
Header("Accept-Ranges:?bytes");
Header("Accept-Length:?".$size);
Header("Content-Disposition:?attachment;?filename=download.csv");
echo?fread($file,$size);
fclose($file);
相关知识点:
PHP: fputcsv
PHP:PDO
数据库查询的时候只返回列名,防止列出现重复,csv里会有重复的数据
php中如何导入导出CSV格式的文件php导入CSV文件:
$line_number = 0;
$handle = fopen("1.xls","r");
while ($data = fgetcsv ($handle, 100000, ",")) {
if($line_number == 0){
$line_number++;
continue;
}
//z这样就可以去掉表头的那一行
for ($i = 0; $i < count($data); $i++) {
$ziduan = $data[$i];
}
}
2.php导出CSV文件
header( "Cache-Control: public" );
? ? header( "Pragma: public" );
header("Content-type:application/vnd.ms-excel");
? ? header("Content-Disposition:attachment;filename=txxx.csv");
? ? header('Content-Type:APPLICATION/OCTET-STREAM');
ob_start();
$header_str = ?iconv("utf-8",'gbk',"信息id,标题,名称,电话,QQ,Email,内容,时间\n");
$file_str="";
$mysqli= new mysqli('localhost','root','','test');
if (mysqli_connect_errno()) {
? ? printf("Connect failed: %s\n", mysqli_connect_error());
? ? exit();
}
$sql='select * ?from messages';
$mysqli->query("set names utf8 ;");
$result=$mysqli->query($sql);
if($result){
while ($row = mysqli_fetch_assoc($result)){
$file_str.= $row['id'].','.$row['title'].','.$row['name'].','."'{$row['telephone']}'".','.$row['qq'].','.$row['email'].','.str_ireplace(',',',',$row['content']).','.$row['retime']."\n";
}
}else{
echo "nonono!!!";
}
$file_str= ?iconv("utf-8",'gbk',$file_str);
ob_end_clean();
echo $header_str;
echo $file_str;
?>
php如何读取CSV大文件并且将其导入数据库示例思路:
读取csv文件,每读取一行数据,就插入数据库
示例
文件夹结构
/
?file.csv????//csv大文件,这里只模拟三行数据,不考虑运行效率(PS:csv文件格式很简单,文件一般较小,解析很快,运行效率的瓶颈主要在写入数据库操作)
?index.php????//php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
?*?读取csv文件,每读取一行数据,就插入数据库
?*/
//获取数据库实例
$dsn?=?'mysql:dbname=test;host=127.0.0.1';
$user?=?'root';
$password?=?'';
try?{
????$db?=?new?PDO($dsn,?$user,?$password);
}?catch?(PDOException?$e)?{
????echo?'Connection?failed:?'?.?$e->getMessage();
}
//读取file.csv文件
if?(($handle?=?fopen("file.csv",?"r"))?!==?FALSE)?{
????while?(($row?=?fgetcsv($handle,?1000,?","))?!==?FALSE)?{
????????//写入数据库
????????$sth?=?$db->prepare('insert?into?test?set?name=:name,age=:age');
????????$sth->bindParam(':name',$row[0],PDO::PARAM_STR,255);
????????$sth->bindParam(':age',$row[1],PDO::PARAM_INT);
????????$sth->execute();
????}
????fclose($handle);
}
数据表
CREATE?TABLE?`test`?(
`id`?INT(10)?UNSIGNED?NOT?NULL?AUTO_INCREMENT,
`name`?VARCHAR(255)?NULL?DEFAULT?''?COLLATE?'utf8mb4_bin',
`age`?INT(10)?NULL?DEFAULT?'0',
PRIMARY?KEY?(`id`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;
运行结束后,数据库中会插入csv中的三行数据
php 写入数据到csv中,不覆盖原有数据,以新增行插入如何实现?这个跟fputcsv无关,而主要的关键在于你打开文件的模式,你需要使用 a 或是 a+ 模式打开文件。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
$fp = fopen('file.csv', 'a+');
foreach($stu as $data);
{
fputcsv($fp,$data); //每次写入一组数据到csv文件中的一行
}
php 生成 csv文件<?php
/**
?*?Created?by?PhpStorm.
?*?User:?chenyanphp@qq测试数据
?*?Date:?2016/12/21?0021
?*?Time:?下午?12:08
?*/
//?头部标题
$csv_header?=?['名称','性别','年龄'];
//?内容
$csv_body?=?[
?['张三','男','13'],
?['李四','女','13'],
?['王五','男','13'],
?['赵六','未知','13']
];
/**
?*?开始生成
?*?1.?首先将数组拆分成以逗号(注意需要英文)分割的字符串
?*?2.?然后加上每行的换行符号,这里建议直接使用PHP的预定义
?*?常量PHP_EOL
?*?3.?最后写入文件
?*/
//?打开文件资源,不存在则创建
$fp?=?fopen('test.csv','a');
//?处理头部标题
$header?=?implode(',',?$csv_header)?.?PHP_EOL;
//?处理内容
$content?=?'';
foreach?($csv_body?as?$k?=>?$v)?{
?$content?.=?implode(',',?$v)?.?PHP_EOL;
}
//?拼接
$csv?=?$header.$content;
//?写入并关闭资源
fwrite($fp,?$csv);
fclose($fp);
关于php数据写入csv的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php数据写入csv php写入数组的详细内容...