在我的网站上我正在从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文件,但它是空的! 数据可能是错误的,所以没有任何东西,但至少我应该有标题名称。
你能帮我解决这个问题吗?
感谢。
答案 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 :(得分:1)
这对我有好处:
$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的情况下进行开发!
答案 2 :(得分:0)
它没有发布任何内容,因为它提交页面,以便在页面刷新时,我的所有数组都变空。