方法一:header+echo输出
<?php
//文件名
$filename = "白名单".date('Y-m-d', time()).".txt";
//对文件名的编码,避免中文文件名乱码
$filename = iconv("UTF-8", "GBK", $filename);
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-Disposition:attachment; filename=" . $filename);
header("Expires:0");
header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
header("Pragma:public");
//$datas是从数据库中查询出来的数组,$datas[$k]['ip']是想要取出的值
foreach($datas $k=>$d){
//用iconv转换字符集,//IGNORE的意义是用来忽略转义字符集时忽略错误,继续执行。
echo iconv('UTF-8', 'GB2312//IGNORE', .$datas[$k]['ip']."\r\n");
}
方法二:file_put_contents()
<?php
$filename = "白名单".date('Y-m-d').".txt";
//对文件名的编码,避免中文文件名乱码
$filename = iconv("UTF-8", "GBK", $filename);
//txt文件全路径
$filepath="D://".$filename;
try {
$datas = Db::name('table_ip')->field('ip')->select();
$content="";
//$datas是从数据库中查询出来的数组,$datas[$k]['ip']是想要取出的值
foreach($datas $k=>$d) {
$content .= $result[$k]['ip']."\r\n";
}
@file_put_contents($filepath,$content,FILE_APPEND);
}
catch (\Exception $e) {
$this->error('导出失败,Error:'.$e);
}
$this->success('导出成功');
方法三:fopen()
<?php
$filename = "白名单".date('Y-m-d').".txt";
//对文件名的编码,避免中文文件名乱码
$filename = iconv("UTF-8", "GBK", $filename);
//txt文件全路径
$filepath="D://".$filename;
try {
/** 1.打开文件流
* fopen第二个参数可以是以下四个:
* "w" 写入方式打开,将文件指针指向文件头并将文件大小截为零,如果文件不存在则尝试创建之
* "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零,如果文件不存在则尝试创建之
* "a" 写入方式打开,将文件指针指向文件末尾,如果文件不存在则尝试创建之
* "a+" 读写方式打开,将文件指针指向文件末尾,如果文件不存在则尝试创建之
*/
$file = @fopen($filepath, "w") or die("打开文件失败,文件路径:".$filepath);
$datas = Db::name('table_ip')->field('ip')->select();
$content="";
//$datas是从数据库中查询出来的数组,$datas[$k]['ip']是想要取出的值
foreach($datas $k=>$d) {
$content .= $result[$k]['ip']."\r\n";
}
/2.写入内容(可以写多次,也可以拼接好字符串,然后一次性写入)
//@fwrite($file, $content);
//3.关闭文件流
//@fclose($file);
}
catch (\Exception $e) {
$this->error('导出失败,Error:'.$e);
}
$this->success('导出成功');
注明:file_put_contents()实际上是对fopen()的封装
遇到过的问题:
之前尝试用fopen()和file_put_contents()都提示打开文件失败,最后找到了原因,原来是因为文件名里包含中文 ,最后用iconv()对文件名进行转码,完美over!