2012-07-18 84 views
1

在我的网站,我从mysql数据创建一个表,然后现在我想添加一个表的导出按钮buttom,以便用户将能够将数据下载为CSV文件。fputcsv不写入CSV文件中的任何数据

要做到这一点,我写的虚拟形式:

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post"> 
    <input type="submit" name="submit" value="Click Me"> 
</form> 

,并在PHP文件的顶部,我有:

if(isset($_POST['submit'])) { 
    export(); 
} 

在我的导出功能,我有一些MySQL的东西,我创建一个数组并向其中推入数据,然后:

$header = array('name', 'date', 'total', 'success', 'opens', 'clicks', 'success_rate', 'open_rate', 'CTO', 'CTR') 
$fp = fopen('exportme2.csv', 'w'); 
fputcsv($fp, $header); 

foreach ($data as $lines) { 
     fputcsv($fp, $lines); 
} 
fclose($fp); 

当我点击导出按钮后,我将exportme2.csv文件,然而它是空的! 数据可能是错误的,这样就不会有任何东西,但至少我应该有标题名称。

你能帮我解决这个问题吗?

谢谢。

+0

标题行是否存在于数据文件中,还是整个文件为空? – 2012-07-18 20:10:34

+0

你检查过'fputcsv'的返回值吗? – jeroen 2012-07-18 20:13:35

+0

你是否检查文件是否打开?失败时'$ fp'将会布尔错误。 – 2012-07-18 20:15:23

回答

0

它没有发布任何内容,因为它提交页面,所以当页面刷新时,我的所有数组都变为空的。

1

首先,改变

$fp = fopen('exportme2.csv', 'w'); 

$fp = fopen('exportme2.csv', 'a'); 

'w'截断的文件,其中'a'创建或追加该文件。

那么你应该使用flock(),以确保两个不同的用户(线程)不要试图在同一时间写入文件:

if (!flock($fp, LOCK_EX)) { 
    error_log('Cannot get lock!'); 
} else { 
    fputcsv($fp, $header); 

    foreach ($data as $lines) { 
     fputcsv($fp, $lines); 
    } 
} 

如果不解决的事情,那么你有在你的代码中有一个对我来说不明显的错字。

1

这是运行好我:FCLOSE前

$header = array('name', 'date', 'total', 'success', 'opens', 'clicks', 'success_rate', 'open_rate', 'CTO', 'CTR'); 
$fp = fopen('exportme2.csv', 'w'); 
fputcsv($fp, $header); 

/*foreach ($data as $lines) { 
    fputcsv($fp, $lines); 
}*/ 
fclose($fp); 

你上面的脚本停止,所以窃听你的文件... 您应该启用E_ALL E_STRICT发展!