mayans005 2020-09-26 21:31 采纳率: 0%
浏览 83
已结题

PHP导出MySQL到CSV文件的问题

<?php
set_time_limit(0);
ini_set('memory_limit', '128M');

$fileName = date('YmdHis', time());

if(isset($_GET['mode'])){
    $mode = $_GET['mode'];
}else{
    $mode = 'down';
}
if($mode == 'down'){
    header('Content-Encoding: UTF-8');
    header("Content-type:application/vnd.ms-excel;charset=UTF-8");
    header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
    $fp = fopen('php://output', 'a');//流输出 
}else{
    $fp = fopen($fileName . '.csv', 'a');//保存到文件
}

$dbhost = '';
$dbuser = '';
$dbpwd = '';
$con = mysqli_connect($dbhost, $dbuser, $dbpwd);
if (mysqli_connect_errno()) {
   die('connect error');
}
$database = '';
mysqli_select_db($con, $database);
mysqli_query($con, "set names UTF8");

$sql = "SELECT count(id) as total FROM `zywd` where 1=1";
$result = mysqli_query($con,$sql);
$rs = mysqli_fetch_array($result);
$count = $rs['total'];
mysqli_free_result($result);

$nums = 500;//每次查询得记录数
$step = $count / $nums;
$step = ceil($step);//查询次数

for($s = 1; $s <= $step; $s++) {
    $start = ($s - 1) * $nums;
    $result = mysqli_query($con,"SELECT * FROM `zywd` where 1=1 ORDER BY `id` LIMIT {$start},{$nums}");
    if($result) {
        while($row = mysqli_fetch_assoc($result)) {
            fputcsv($fp, $row);
        }
        mysqli_free_result($result); 

        ob_flush();
        flush();
    }
}

mysqli_close($con);
fclose($fp);

使用上面的PHP代码,导出MySQL表中的15万条数据到CSV文件。
在Win10+apache+php7环境下执行,可以以流文件方式下载下来,但是保存到服务器文件会出现500错误。
在centos+nginx+php7环境下,流文件下载出现“失败 - 网络错误”,保存到服务器文件出现502错误,每次文件大小停留在12.84M。
测试导出少量数据没有问题。应该如何排查解决问题?

  • 写回答

2条回答 默认 最新

  • HDdgut 2020-09-27 09:35
    关注

    试一下把执行时间延长 ini_set("max_execution_time", "3600");

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月8日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置