ホームページ >バックエンド開発 >PHPチュートリアル >phpExcel による Excel のエクスポートに関する 2 つの問題
注意: iconv_strlen() [function.iconv-strlen]: E:testPHPnow-1.5.6vhosts127.0.0.18incPHPExcelPHPExcelSharedString.php の 554 行目で入力文字列に不正な文字が検出されました
致命的なエラー: 許可されたメモリ サイズは 13 4217728 バイトですE:testPHPnow-1.5.6vhosts127.0.0.18incPHPExcelPHPExcelCell.php の 840 行目で使い果たされました (16 バイトを割り当てようとしました)
これはローカル デバッグ中に発生します。 phpexcel によってエクスポートされるデフォルトのエンコーディングは何ですか?データベースのエンコードは GBK です。
ソースコードは500行以上あるので(PHPER初心者)、投稿しません。
2 番目の質問をオンラインで検索しましたが、これらの 2 つの文を追加してもまだ機能しません
set_time_limit(900);
//最大メモリを 128M に設定します
@ini_set('memory_limit','128M');
よろしくお願いします
Mb_convert_encoding($html,'UTF8','BIG5') //?big5??utf8
または iconv(gb2312) ,UTF- 8,$変換される文字列);
??2:
PHP.ini で許可されているメモリを変更する必要があります。
Mb_convert_encoding ($ html,'UTF8','BIG5'); //?big5??utf8
または iconv(gb2312,UTF-8,$string to be Converted);
ストレージが不足しているため、 PHP.ini で許可されているストレージを変更したら、Apache を再インストールしてください
こんにちは、最初の問題は解決されました
しかし、2 番目の問題はまだ残っています @ini_set('memory_limit', ' -1');
致命的なエラー: E:testPHPnow-1.5.6vhosts127.0.0.18incPHPExcelPHPExcelCell.php の 839 行目で、メモリ不足 (1602748416 が割り当てられています) (134217728 バイトを割り当てようとしました)
しかし、ローカル メモリが使用されています いっぱいです、Xiami、それは私のものですコード
<?phpsession_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.ini ファイルでmemory_limit = 12M を設定します (この権限がある場合に推奨)。 )
? sites/default/settings.php ファイルに ini_set('memory_limit','12M') を設定します
解決策 2:
// メモリ使用量を減らすためにキャッシュ メソッドを設定します
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; $cacheSettings = array (
'cacheTime' => 300
);
PHPExcel_Settings::setCacheStorageMethod ( $cacheMethod, $cacheSettings );
2 番目の質問: メモリの超過
解決策 1:
のメモリ制限を変更できます。次の 2 つの方法で php ランタイムを設定します。
? sites/default/ で、設定で ini_set('memory_limit','12M'); .php ファイル;
解決策 2:
//メモリ使用量を減らすためにキャッシュ方法を設定します...
1024M に設定されていますが、依然としてこのエラーが表示されます
それを使用すると、コンピューターのメモリ使用量が非常に多くなり、コンピューターがフリーズします
これは正常です。ページのメモリ使用量を出力してみるとわかります。私のローカル マシンでは、約 5MB の Excel ファイルをロードし、188 MB のコンテンツを消費しました。ページの表示には 20 秒かかりました。
http://bbs.csdn.net/topics/390312724
解決策1:
次の2つの方法でPHPランタイムのメモリ制限を変更できます
php.ini ファイルで、memory_limit = 12M を設定します (この権限がある場合に推奨)
4階のhu5487さんからの返信を引用: 3階のwodecuoshi230さんからの返信を引用: 2つ目の問題: メモリ超過
解決策その1:
以下の2つの方法でPHPランタイムのメモリ制限を変更できます
設定します。 php.ini ファイル内で、memory_limit = 12M (この権限がある場合に推奨)
?sites/default/settings.php ファイル内で、ini_set('memo... を設定します...
すべて再起動されました
追加後
589704
致命的なエラー: E:testPHPnow-1.5.6vhosts127.0.0.18incPHPExcelPHPExcelCell.php の 839 行目で、許容メモリ サイズ 536870912 バイトが使い果たされました (35 バイトを割り当てようとしました)
引用 6 階 wodecuoshi230 の返信: 引用 4フロア hu5487 返信: 3階のwodecuoshi230さんからの回答を引用 :2番目の質問: メモリが超過しました
解決策 1:
以下の 2 つの方法で php 実行中のメモリ制限を変更できます
php.ini ファイルでmemory_limit = 12M を設定します (推奨)。この権限がある場合)
?sites/default/setti... ?サイズを大きくしてください
中にエンコード設定があるようです。私が使用するときは、エンコードを設定するだけです。 utf-8.
phpExcellarge データ量が多い時のメモリオーバーフローの解決策
7階 hu5487さんからの引用:6階 hu5487さんからの返信:4階 hu5487さんからの返信:wodecuoshi230さんからの返信3 階: 2 番目の問題: メモリ超過
解決策 1:
次の 2 つの方法で php の実行中にメモリ制限を変更できます
php.ini ファイルでmemory_limit = 12M を設定します (この権限がある場合に推奨)。
では...
2G に追加しても機能しません
軽量なものはありますか? 3 つのループしか必要ありません
データ量が十分ではありません。 phpExcelが遅すぎる メモリオーバーフロー解決策
方法を使っても解決できません
8階 sibangさんの返信より引用: 7階 hu5487さんの返信より引用: 6階 wodecuoshi230さんの返信より引用: 4階 hu5487さんの返信より引用: 3 階 wodecuoshi230 さんの回答より: 2 番目の問題: メモリ超過
解決策 1:
以下の 2 つの方法で php の実行中にメモリ制限を変更できます
php.ini ファイルでmemory_limit = 12M を設定します (使用することをお勧めします)。 ... PHP コードをサイクルします) URL ループ メソッドに変更します。例:
$i=(!isset($_GET['i']) ? 0 : $_GET['i'];
select * from table where id> {$i} order by id asc limit 0,1
....
Header('Location:?i='.$i); での hu5487 からの返信の引用11階: sibangさんからの返信引用 8階: 7階 hu5487さんからの引用: 6階 wodecuoshi230さんからの引用: 4階 hu5487さんからの引用: 3階 wodecuoshi230さんからの返信: 第二問: 記憶を超えました
解決策 1:
次の 2 つの方法で PHP の操作を変更できます
php.ini ファイルに mem を設定します...
13階 sibangさんの返信より引用 : 11階 hu5487さんの返信より引用 : 8階 sibangさんの返信より引用 : 7階 hu5487さんの返信より引用 : 6階 wodecuoshi230さんの返信より引用 : 4階 hu5487さんの返信より引用 : 3階から引用wodecuoshi230 さんの返信: 2 番目の問題: メモリ超過
解決策 1:
次の 2 つの方法で PHP ランタイムのメモリ制限を変更できます... おめでとうございます???
11階 hu5487さんの返信より引用: 8階 sibangさんの返信より引用: 7階 hu5487さんの返信より引用: 6階 wodecuoshi230さんの返信より引用: 4階 hu5487さんの返信より引用: 3階 wodecuoshi230さんの返信より引用: 2 番目の質問: メモリの超過
解決策 1:
次の 2 つの方法で php ランタイムのメモリ制限を変更できます
php.ini ファイルに mem を設定します...
長い間勉強した後、ついに問題が解決しました。 $objActSheet->mergeCells("'A'.$i.':L'.$i"); など、いくつかの A 形式が間違って使用されています。間違っていると全く動きません
そこで聞きたいのですが、どう表現するのが正しいのでしょうか?