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');在这里先谢谢大家了

解决方案 »

  1.   

    問題1:
    Mb_convert_encoding($html,'UTF8','BIG5'); //將big5轉為utf8
    或iconv(gb2312,UTF-8,$要转的string);問題2:
    你的內存不足,需要修改PHP.ini中允許使用的內存量,改完重啟apache
      

  2.   

    你好,第一个问题解决了
    但第二问题依然还在,我在测试的时候用了@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); 
    ?>
      

  3.   

    第二个问题: 内存超出 
    解决办法一:
    可以通过以下两个方法修改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 );

      

  4.   

    很正常,尝试输出页面占用内存情况,你就会懂得  echo memory_get_usage ();
    在我本机,load一个5MB左右的excel文件,消耗了188 MB内容,而且页面用了二十秒。
    http://bbs.csdn.net/topics/390312724
      

  5.   

    更改php.ini内存限制之后,要重启apache
      

  6.   

    都重启了
    加上之后出现
    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
      

  7.   

    好像里面有一个设置编码的吧,我用的时候就是把编码设置成utf-8就可以了
      

  8.   


    phpExcel大数据量情况下内存溢出解决
      

  9.   

    把你的php代碼循環方式修改成url循环方式,示例:$i=(!isset($_GET['i'])) ? 0 : $_GET['i'];
    ....
    select * from 表 where id>{$i} order by id asc limit 0,1
    ....
    Header('Location:?i='.$i);
      

  10.   

    研究了半天问题终于解决了,是我的代码的问题,有几个格式用错了,比如 $objActSheet->mergeCells("'A'.$i.':L'.$i");错了导致根本过不去
      

  11.   

    研究了半天问题终于解决了,是我的代码的问题,有几个格式用错了,比如 $objActSheet->mergeCells("'A'.$i.':L'.$i");错了导致根本过不去
    弱弱的问一句,正确的表示方法是?