我刚才写了一个程序就是 导出EXECL文件!但是由于数据太大?老是报错“Allowed memory size of 20971520 bytes exhausted (tried to allocate 48 bytes)”
就是用掉20971520内存 还有 48 bytes内存申请不到!
我是先把数据库从数据库找出来,变成数组!然后在导成EXECL。
有没人其他办法 就是换个思路解决 这个导成EXECL的问题!如果不清楚的可以继续问!我可能说的不清楚
就是用掉20971520内存 还有 48 bytes内存申请不到!
我是先把数据库从数据库找出来,变成数组!然后在导成EXECL。
有没人其他办法 就是换个思路解决 这个导成EXECL的问题!如果不清楚的可以继续问!我可能说的不清楚
{
$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");//调用类方法
}
这个方法太差了!
<?php
set_time_limit( 0 );
//your codes here
?>
页面执行限用的内存量就是那么多,你不放开设置,不可能绕过去,mysql可以直接表数据导成excel文件的,当然加重mysql服务器负担也不好,或许你可以考虑把数据分成几个小点的excel存储,不过下次倒入要一一导入。
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>";
?>
你现在问题出在数组存储,那么你就从PHP取一条数据然后往EXCEL里写入一条,注意添加set_time_limit( 0 );
mysql_query("select * into outfile 'e:/www/maininfo.xls' from main_info ".$where);
你也可以像#10楼那样直接echo html,省却Excel类的操作.
如果有超时提示,注意加上set_time_limit( 0 );
ini_set(memory_limit, -1); // 放在代码第一行
CPU 100% 内存100% 死机!!!!!!!!!!
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(); 这样不就可以了。为何非要放数组里面?
这样生成速度快,而且简单,只是复杂的操作做不了
但对于要求不高的情况一般用这方法是最简便的