fputcsv没有';不要在CSV文件中写入任何数据


fputcsv doesn't write any data in a CSV file

在我的网站上,我正在从mysql数据创建一个表,然后现在我想在表的底部添加一个导出按钮,这样用户就可以将数据下载为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文件,但它是空的!数据可能是错误的,所以不会有任何东西,但至少我应该有标题名称。

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

谢谢。

首先,更改

$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);
    }
}

如果这还不能解决问题,那么你的代码中有一个拼写错误,对我来说并不明显

这对我来说很好:

$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);

你上面的脚本在fclose之前停止了,所以它窃听了你的文件。。。您应该在启用E_ALL E_STRICT的情况下进行开发!

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