php下載csv
『壹』 php 生成csv文件並提示保存
<?php
//文件名
$filename="test.csv";
//數據(具體的根據需要做處理,如果是從資料庫查詢,原理與此類似,只需設置好寫入格式和數據即可。
$data="測試csv";
//設置header
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');header('Pragma:public');
echo$data;
?>
『貳』 求源碼!PHP導出數據到csv文件
<?php
$DB_Server = "localhost";
$DB_Username = "root";
$DB_Password = "";
$DB_DBName = "DBName";
$DB_TBLName = "DB_TBLName";
$savename = date("YmjHis");
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect.");
mysql_query("Set Names 'gbk'");
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type;charset=gbk");
header("Content-Disposition: attachment; filename=".$savename.".$file_ending");
//header("Pragma: no-cache");
$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\n");
$sep = "\t";
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . "\t";
}
print("\n");
$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 .= "\t";
print(trim($schema_insert));
print "\n";
$i++;
}
return (true);
?>
『叄』 PHP怎麼在導出csv的時候加雙引號
使用默認的雙引號做包圍符 ... 但是強制所有元素觸發 ...
foreach($linesas&$line){
foreach($lineas&$column){
$column=$column.'';
}
}
產生的結果大概會類似於下面這樣 ...
"CA","12","Y"
"MU","13","Y"
"MU","12","N"
2.我們去研究手冊 ... 手冊上關於這個函數的說明是這樣的 ...
intfputcsv(resource$handle,array$fields[,string$delimiter=','[,string$enclosure='"']])
你可以看到這個函數支持自定義包圍符 ... 也就是第四個參數 $enclosure ...
於是我們可以手動在所有元素的兩側加上雙引號 ... 並修改默認的包圍符為空 ...
foreach($old['lines']as$line){
fputcsv($new,$line,',','');
}
這種方式可以讓你的例子返回完美的結果 ...
以上是兩種方法。
『肆』 php導出csv文件時,只能在瀏覽器上顯示文件內容,沒有下載提示,更沒有下載的csv文件,幫忙指點啊!
據我的理解,export_csv這個函數的功能就是顯示csv內容。
按照你的說明猜測,你應該是先將資料庫的內容輸出到csv文件里,然後再給出一個指向該文件的下載鏈接就可以了。
export_csv這個函數可以設計成直接用 file 操作函數寫入內容就可以了,因為csv本身是純文本文件,沒有什麼特殊的文件格式。
『伍』 PHP導出CSV格式文件因為導出數據中有英文逗號導致分列錯誤怎麼處理
CSV文件的格式本身就是以英文逗號分列,然後回車分行的文本類型!所以,你的問題,如果某一列中包含英文逗號的話將這一列用引號引起來!比如:
a,"b,c",d
這樣就會是三列,而不是四列
『陸』 utf8編碼的php導出CSV亂碼怎麼解決
解決亂碼的方法:首先使用iconv函數將utf8編碼轉碼為GBK,語法為「$str = iconv('utf-8' 'GBK//IGNORE' $str));」。其次,在輸出內容前先輸出BOM頭,這樣Excel可自動識別到是UTF-8。其實需求是將數據導出到Excel,PHPExcel庫雖然強大,但在內存使用上較為昂貴,對於超過10萬的數據處理在web請求中較為困難。因此,使用原生PHP導出輕量的csv仍然是有需求的。
通常情況下,將UTF-8編碼的內容導出到csv中,使用Excel打開會顯示亂碼,尤其是非主流字元或emoji表情。這是因為windows系統默認的Excel使用GBK編碼解析。現今,編碼通常都是使用UTF-8,除非是大公司知名產品為了節省流量而出有GBK等其他編碼的版本。
解決亂碼問題,通常使用PHP中的iconv函數進行轉碼為GBK,這樣默認的Excel打開就不會有問題。但對於emoji表情等主流字元,GBK並不能顯示,轉碼失敗直接為空。可以添加//IGNORE標記進行忽略,這樣只是忽略了它們,其他正常字元仍然能保留。
$str = iconv('utf-8' 'GBK//IGNORE' $str));
這可以說是一種折中方案。能否不轉碼直接輸出UTF-8?Excel是否能自動識別UTF-8並使用UTF-8來解碼顯示?答案是可以的,只是需要一個BOM頭(非windows系統中沒有這個東西),有BOM頭它就能識別到是UTF-8,否則會用默認的GBK處理,導致亂碼。正確的輸出BOM頭如下:
$fp = fopen('/test_csv.csv' 'a');fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF)); //輸出BOM頭fputcsv($fp, ['標題']);fputcsv($fp, ['解決亂碼']);fclose($fp);
以上測試結果證實,這種方法可以解決亂碼問題,並正常顯示emoji表情等非主流字元。