PHP导出txt文本的方法大全

984 阅读1分钟

方法一: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!