Notice: iconv_strlen() [function.iconv-strlen]: Detected an illegal character in input string in E:\test\PHPnow-1.5.6\vhosts\127.0.0.18\inc\PHPExcel\PHPExcel\Shared\String.php on line 554Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16 bytes) in E:\test\PHPnow-1.5.6\vhosts\127.0.0.18\inc\PHPExcel\PHPExcel\Cell.php on line 840本地调试的时候出现的,请问该怎么解决呢? phpexcel默认导出的编码是什么呢?数据库的编码是GBK的。
源代码有500多行(菜鸟PHPER)就不贴了。
针对第二个问题在网上找了下,加了这两句还是没用
set_time_limit(900);
//设置最大内存为128M
@ini_set('memory_limit','128M');在这里先谢谢大家了
源代码有500多行(菜鸟PHPER)就不贴了。
针对第二个问题在网上找了下,加了这两句还是没用
set_time_limit(900);
//设置最大内存为128M
@ini_set('memory_limit','128M');在这里先谢谢大家了
Mb_convert_encoding($html,'UTF8','BIG5'); //將big5轉為utf8
或iconv(gb2312,UTF-8,$要转的string);問題2:
你的內存不足,需要修改PHP.ini中允許使用的內存量,改完重啟apache
但第二问题依然还在,我在测试的时候用了@ini_set('memory_limit', '-1');还是出现
Fatal error: Out of memory (allocated 1602748416) (tried to allocate 134217728 bytes) in E:\test\PHPnow-1.5.6\vhosts\127.0.0.18\inc\PHPExcel\PHPExcel\Cell.php on line 839
但是我本地的内存已经用满了,虾米那是我的代码
<?php
session_start();
include("inc/func.php");
$conn=mysql_connect('localhost','root','123456');
mysql_select_db('gzlgl',$conn);
mysql_query("set names UTF8");
//导入类库
require_once 'inc/PHPExcel/PHPExcel.php';
require_once 'inc/PHPExcel/PHPExcel/IOFactory.php';
//require_once '../inc/PHPExcel/PHPExcel/Reader/Excel5.php';
require_once 'inc/PHPExcel/PHPExcel/Writer/Excel2007.php';
//设置最大执行时间
set_time_limit(0);
//设置最大内存为128M
@ini_set('memory_limit', '-1');
/*
初始化
*/
$arr_sem=array();
$sql="select * from semester";//读入学期周数
$record=mysql_query($sql,$conn) or die(mysql_error());
$row=mysql_fetch_row($record);
do{
$arr_sem["$row[0]"]=$row[1];//arr_sem['学期']=学期周数
}while($row=mysql_fetch_row($record));
$arr_theory=array();//理论课工作量数组
//$arr_total_theory=array();//理论课工作量数组
$arr_lab=array();//实验课工作量数组
//$arr_total_lab=array();//实验课工作量数组
$arr_add=array();//附加工作量数组
//$arr_total_add=array();//附加工作量数组
$arr_total=array();//全部工作量数组
//导出为excel,考虑到兼容问题,导出为xls文件
// 创建一个处理对象实例
$objExcel = new PHPExcel();
// 创建文件格式写入对象实例
//$objWriter = new PHPExcel_Writer_Excel5($objExcel);
$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式
$objWriter->setOffice2003Compatibility(true);
//设置文档基本属性
$objProps = $objExcel->getProperties();
$objProps->setCreator("Tao Hu");
$objProps->setLastModifiedBy("ddd");
$objProps->setTitle(iconv('gbk', 'utf-8', '所选时间内的工作量详情'));
$objProps->setSubject("dd");
$objProps->setDescription("ss");
$objProps->setKeywords("s");
$objProps->setCategory("ss");
//设置当前的sheet索引,用于后续的内容操作。
//一般只有在使用多个sheet的时候才需要显示调用。
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
$objExcel->setActiveSheetIndex(0);
$objActSheet = $objExcel->getActiveSheet();
//设置当前活动sheet的名称
$objActSheet->setTitle('ddd');
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array( ' memoryCacheSize ' => '8MB'
);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
//合并单元格
$i=1;//行号
$j='A';//列号
//合并单元格
$objActSheet->mergeCells("'A'.$i.':L'.$i");
$objActSheet->setCellValue("'A'.$i", '理论课工作量');
$i++;
//各项标题
$objActSheet->setCellValue("'A'.$i", '工作量编号');
$objActSheet->setCellValue("'B'.$i", '学期');
$objActSheet->setCellValue("'C'.$i", '课程名称');
$objActSheet->setCellValue("'D'.$i", '教师名称');
$objActSheet->setCellValue("'E'.$i", 'K1');
$objActSheet->setCellValue("'F'.$i", 'K2');
$objActSheet->setCellValue("'G'.$i", 'K3');
$objActSheet->setCellValue("'H'.$i", '学生数');
$objActSheet->setCellValue("'I'.$i", 'we');
$objActSheet->setCellValue("'J'.$i", 'we');
$objActSheet->setCellValue("'K'.$i", 'fds');
$objActSheet->setCellValue("'L'.$i", 'fwe');
$i++;
$objActSheet->setCellValue("'A'.$i", "dfd");
$objActSheet->setCellValue("'B'.$i", "dfd");
$objActSheet->setCellValue("'C'.$i", "dfd");
$objActSheet->setCellValue("'D'.$i", "dfd");
$objActSheet->setCellValue("'E'.$i", "dfd");
$objActSheet->setCellValue("'F'.$i", "dfd");
$objActSheet->setCellValue("'G'.$i", "dfd");
$objActSheet->setCellValue("'H'.$i", "dfd");
$objActSheet->setCellValue("'I'.$i", "dfd");
$objActSheet->setCellValue("'J'.$i", "dfd");
$objActSheet->setCellValue("'K'.$i", $has_exam);
$objActSheet->setCellValue("'L'.$i", $sum_thoery);
$i++;
//输出内容
$outputFileName = "output.xls";
$objWriter->save($outputFileName);
?>
解决办法一:
可以通过以下两个方法修改php运行时的内存限制.
在php.ini文件里设置memory_limit = 12M(推荐使用,如果拥有这个权限的话)
◦在sites/default/settings.php文件里设置ini_set('memory_limit','12M');
解决办法二:
// 设置缓存方式,减少对内存的占用
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array (
'cacheTime' => 300
);
PHPExcel_Settings::setCacheStorageMethod ( $cacheMethod, $cacheSettings );
在我本机,load一个5MB左右的excel文件,消耗了188 MB内容,而且页面用了二十秒。
http://bbs.csdn.net/topics/390312724
加上之后出现
589704
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 35 bytes) in E:\test\PHPnow-1.5.6\vhosts\127.0.0.18\inc\PHPExcel\PHPExcel\Cell.php on line 839
phpExcel大数据量情况下内存溢出解决
....
select * from 表 where id>{$i} order by id asc limit 0,1
....
Header('Location:?i='.$i);
弱弱的问一句,正确的表示方法是?