MySQLi导出到csv

时间:2015-03-09 10:26:53

标签: php mysqli

我有一个可行的脚本,但我似乎无法调整或找到输出文件。 我希望文件在生成时转到特定目录 - 此时它保存我认为是test1.csv,但我实际上无法找到这个文件的位置,所以不是100%确定它正在生成。

理想情况下,在我的情况下,它会转到像/ var / www / html / administration / csvs这样的目录

include  ('/var/www/html/administration/connections/connection.php');
$query = "CALL report_c05($system_id,$entity_id, $client_idx, '$start_date',    '$end_date')";
$result = $con->query($query);
if (!$result) die('Couldn\'t fetch records');
$headers = $result->fetch_fields();
foreach($headers as $header) {
    $head[] = $header->name;
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="test1.csv"');
header('Pragma: no-cache');
header('Expires: 0');
fputcsv($fp, array_values($head)); 
while ($row = $result->fetch_array(MYSQLI_NUM)) {
    fputcsv($fp, array_values($row));
}
die;
}

请知道。

第二个问题是 - 它作为一个cron作业运行 - 而cron日志现在包含了这个查询的所有输出 - 不是很有用 - 我可以对此做些什么吗?

感谢

谢谢Luigi: 我的问题的下一个人的完整工作代码:

include  ('/var/www/html/administration/connections/connection.php');
$query = "CALL report_c05($system_id,$entity_id, $client_idx, '$start_date',     '$end_date')";
$result = $con->query($query);
if (!$result) die('Couldn\'t fetch records');
$headers = $result->fetch_fields();
foreach($headers as $header) {
$head[] = $header->name;
}
$fp = fopen('/var/www/html/administration/test1.csv', 'x');
if ($fp && $result) {
fputcsv($fp, array_values($head)); 
while ($row = $result->fetch_array(MYSQLI_NUM)) {
    fputcsv($fp, array_values($row));
}
die;
}

1 个答案:

答案 0 :(得分:2)

您正在写信给php://output。请参阅PHP manual on I/O streams。由于您在cronjob中运行脚本,php://output将写入标准输出,cron守护程序将很好地在其日志中显示,具体取决于其配置。

此外,发送HTTP标头没有意义,因为您没有使用HTTP。

您应该只需fopen()您想要的输出文件,并fputcsv()您的数据。