我刚才写了一个程序就是 导出EXECL文件!但是由于数据太大?老是报错“Allowed memory size of 20971520 bytes exhausted (tried to allocate 48 bytes)”
就是用掉20971520内存 还有 48 bytes内存申请不到!
我是先把数据库从数据库找出来,变成数组!然后在导成EXECL。
有没人其他办法 就是换个思路解决 这个导成EXECL的问题!如果不清楚的可以继续问!我可能说的不清楚

解决方案 »

  1.   

    我直接从数据库里面读出来的!if(isset($_GET["copy"]))//点击COPY按钮
                 {

    $ip=$_SG['db']->fetch_all("select * from main_info".$where);//从数据里面选择 变成数组
    require_once ('./include/class.excel.php');//载入excel类
    $xls = new Excel;//实例化下
    $xls->addArray($ip);//调用类方法
    $xls->generateXML ("mytest");//调用类方法
    }
      

  2.   

    excel类是没问题的! 关键问题是 我把20M的数据变成数组! 这个数据太大了 内存掉不懂!
    这个方法太差了!
      

  3.   

    1.php.ini把memory_limit改大点2.
    <?php
      set_time_limit( 0 );
      //your codes here
    ?>
      

  4.   

    抱歉,我的意思1 & 2是结合起来的。
    页面执行限用的内存量就是那么多,你不放开设置,不可能绕过去,mysql可以直接表数据导成excel文件的,当然加重mysql服务器负担也不好,或许你可以考虑把数据分成几个小点的excel存储,不过下次倒入要一一导入。
      

  5.   

    做下参考,循环输出所有数据即可<?PHP
    header("Content-type:application/octet-stream;charset=gbk");   
    header("Accept-Ranges:bytes");   
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:attachment;filename=data.xls");echo "<table>
    <tr><td>id</td><td>name</td></tr>
    <tr><td>1</td><td>张三</td></tr>
    </table>";
    ?>
      

  6.   


    你现在问题出在数组存储,那么你就从PHP取一条数据然后往EXCEL里写入一条,注意添加set_time_limit( 0 );
      

  7.   

    你用的phpexcel吧,我这里也出现了这样的问题,这个最主要还是优化你的代码,把代码中不再需要的一些耗费内存的变量unset掉,如果人很懒(比如我)而且页面访问次数不多,就将在php.ini中把memory_limit改大点 比如128M.....同时将过期时间设置大点set_time_limit(0)
      

  8.   

    很难理解?因为不了解你的实际需求,只是提供一些建议而已,你自己可以试试啊。
    mysql_query("select * into outfile 'e:/www/maininfo.xls' from main_info ".$where);
    你也可以像#10楼那样直接echo html,省却Excel类的操作.
    如果有超时提示,注意加上set_time_limit( 0 ); 
      

  9.   

    我没有你的 Excel 类,自然也提不出建设性意见
      

  10.   


    ini_set(memory_limit, -1);      // 放在代码第一行
      

  11.   


    CPU 100% 内存100% 死机!!!!!!!!!!
      

  12.   

    不可能的吧,这种现像除非你程序死循环了.今天上午我刚把100多万条数据存到数组,然后导入到MYSQL.文件大约20M左右.
      

  13.   

    你就是设置内存! 我把它弄成300M都死 ini_set(memory_limit, 300M);      分步导入 怎么写的?
      

  14.   


    xlsBOF();
    $data_i=1;
    $query = "select * from tb_dmuserinfo";
    $db->query($query);   
    if($db->nf()){
    while($db->next_record())
    {

    xlsWriteLabel($data_i,0,$db->f(fd_dmuser_id));
    xlsWriteLabel($data_i,1,$db->f(fd_dmuser_username));
           $data_i++;
     
    }
    }xlsEOF(); 这样不就可以了。为何非要放数组里面?
      

  15.   

    边读取数据库边导出到excel 。
      

  16.   

    怎么楼主不尝试用FWRITE生成TXT文件的方法生成后缀名为XLS的文件呢
    这样生成速度快,而且简单,只是复杂的操作做不了
    但对于要求不高的情况一般用这方法是最简便的