2012-12-09 26 views
0

经过大量的搜索和修改后,我设法将表格导出为.csv文件,但现在我想通过浏览器启动下载,而不是自动存储在文件夹中。php导出为csv用户/浏览器下载

这里是我的代码:

<?php 
$server = 'localhost'; 
$user = 'root'; 
$pass = 'pass'; 
$db = 'test'; 

$db = mysqli_connect($server, $user, $pass, $db); 

mysqli_set_charset($db, "utf8"); 

$filename = 'uploads/'.strtotime('now').'.csv'; 

$fp = fopen($filename,"w"); 

$query = "SELECT id,product,status,created,summary FROM product_table"; 

$result = mysqli_query($db,$query) or die("My query ($query) generated an error: ".mysql_error()); 

$row = mysqli_fetch_assoc($result); 

$seperator = ""; 
$comma = ""; 

foreach ($row as $name => $value){ 
    $seperator.= $comma. ''.str_replace('','""',$name); 
    $comma=","; 

} 
$seperator .= "\n"; 

echo $seperator; 

//putting the heading into the csv file 
fputs($fp,$seperator); 


mysqli_data_seek($result,0); 

while ($row = mysqli_fetch_assoc($result)){ 


$seperator = ""; 
$comma = ""; 

foreach ($row as $name => $value){ 

    if (strcmp($name,'summary') == 0){ 


      $value = str_replace(array("\r" , "\n", "\r\n", "\n\r") ,'' , $value); 
      $value = str_replace('</b><br>','',$value); 
      $value = str_replace('<b>','',$value); 
      $value = str_replace('<br>','',$value); 
      $value = str_replace('<br />','',$value); 
    } 

    $seperator.= $comma. ''.str_replace('','""',$value); 
    $comma=","; 

    } 
$seperator .= "\n"; 


//putting the heading into the csv file 
fputs($fp,$seperator); 


} 

fclose($fp); 



?> 

运行上面的脚本存储.csv文件的文件夹上传。为了使用户能够通过浏览器运行脚本并下载.csv文件,需要进行哪些更改才能启用浏览器下载?谢谢!

编辑: 此外,如果要禁用保存到文件夹并只启用用户/浏览器下载,我必须做什么修改?谢谢。

+0

您似乎忘记了添加标签[tag:homework]。 – Christian

+0

@Christian:尽管没有提到它,但我尝试了不同的方法让它工作,但失败了。另一方面,这是一个有期限的工作项目。我需要得到必须完成的工作,然后找出原因。 – greenpool

+0

在我看来,我会拒绝我不知道该如何执行的工作...... – Christian

回答

4

尝试这样的:

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename=your_file.csv'); 
header('Pragma: no-cache'); 
readfile($filename); 
+0

太棒了!这似乎工作。但它似乎添加表格标题两次 - 任何想法为什么?谢谢。 – greenpool

+0

很奇怪,不要以为这跟下载有什么关系。你确定原来的'$ filename'看起来应该是这样吗? –

+0

好耶考虑到数据是存在的。?它只是被添加两次的标题.. – greenpool

1

肯定是表格标题中出现两次,因为这条线在不同的地方的代码中出现两次:

//putting the heading into the csv file 
fputs($fp,$seperator); 
0

我认为以下两行足以迫使浏览器自动下载csv文件

header('Content-Type:text/csv'); header('Content-Disposition:attachment; filename =“dishes.csv”');

其中文件名 - 给名称名称csv文件名