【问题标题】:PHP can't write big data to csv filePHP 无法将大数据写入 csv 文件
【发布时间】:2020-05-29 05:37:06
【问题描述】:

我正在使用 PHP 代码将数据从表(数据库)导出到 CSV 文件

但不幸的是,它只写了 98000 行,而我在表中总共有 198000 行。

我认为表格中的总数据高达 34mb。

第二件事,一旦文件写入完成,我如何自动下载。任何人都可以帮助谢谢。

$que = "SELECT * FROM campaign";
$query = mysqli_query($connection,$que);
$number_rows = mysqli_num_rows($query);

if ($number_rows >= 1)
{
    $filename = "exported_db_" . date("m-d-Y_hia") . ".csv"; // filenme with date appended
    $fp = fopen($filename, "w"); // open file

    $row = mysqli_fetch_assoc($query);

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

    foreach ($row as $name => $value)
    {
        $seperator .= $comma . $name; // write first value without a comma
        $comma = ","; // add comma in front of each following value
    }
    $seperator .= "\n";

    echo "Database has been exported to $filename";

    fputs($fp, $seperator);

    mysqli_data_seek($query, 0); // use previous query leaving out first row

    while($row = mysqli_fetch_assoc($query))
    {
        $seperator = "";
        $comma = "";

        foreach ($row as $name => $value)
        {
            $seperator .= $comma . $value; // write first value without a comma
            $comma = ","; // add comma in front of each following value 
        }

        $seperator .= "\n";

        fputs($fp, $seperator);
    } 

    fclose($fp);

}
else {
    echo "There are no records in the database to export.";
}

【问题讨论】:

  • 可能是超时。尝试从控制台运行此脚本。
  • 查看'fputcsv()` 以写入数据,而不是为每一行使用循环。
  • @odan 我已经在 SSH 中尝试了 mysql 代码,我得到了正确和完整的记录,但我应该在 php 中需要,我在管理面板中使用它。
  • @NigelRen 是的,我已经尝试过,但仍然存在同样的问题,只有一半数据写入文件。 $que = "SELECT * FROM campaign"; $query = mysqli_query($connection,$que); $number_rows = mysqli_num_rows($query); if ($number_rows >= 1) { $filename = "exported_db_" . date("m-d-Y_hia") . ".csv"; $fp = fopen($filename, 'w'); $placed_header = false; while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { if(!$placed_header) { fputcsv($fp, array_keys($row)); $placed_header = true; } fputcsv($fp, array_values($row)); } fclose($fp); }
  • 服务器速度也不错。我正在使用 VPS 服务器和 70GB SSD,很多东西都是无限的。

标签: php export-to-csv


【解决方案1】:

当我将这两行代码放在文件顶部时,我得到了正确的结果。
我认为这些代码会增加 caches_memory 的大小和执行时间。
感谢大家的评论和讨论。


ini_set('memory_limit', '512M');
ini_set('max_execution_time', '180'); 

【讨论】:

  • 这适用于小型数据集,如果您的数据集是 1,000,000,000 条记录怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
相关资源
最近更新 更多