Jtti广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php导出excel出现500错误怎么办
  • 286
分享到

php导出excel出现500错误怎么办

phpexcel500 2018-06-06 22:06:34 286人浏览 才女
摘要

本文操作环境:windows10系统、PHP 7、thinkpad t480电脑。想必很多小伙伴都遇到过导出excel的问题,也许我们平时在使用phpexcel类时觉得很方便。但是你会发现在导出大量数据的时候可就没那么简单了,往往会导出时会

本文操作环境:windows10系统、PHP 7、thinkpad t480电脑。

想必很多小伙伴都遇到过导出excel的问题,也许我们平时在使用phpexcel类时觉得很方便。但是你会发现在导出大量数据的时候可就没那么简单了,往往会导出时会伴随着一些超时或者内存溢出的问题。下面我们就来一起看看解决方法。

PHPExcel是一个很强大的处理Excel的PHP开源类,但是很大的一个问题就是它占用内存太大,从1.7.3开始,它支持设置cell的缓存方式,但是推荐使用目前稳定的版本1.7.6,因为之前的版本都会不同程度的存在bug。

PHPExcel 平均下来使用1k/单元格的内存,因此大的文档会导致内存消耗的也很快。单元格缓存机制能够允许PHPExcel将内存中的小的单元格对象缓存在磁盘或者 APC,memcache或者Wincache中,尽管会在读取数据上消耗一些时间,但是能够帮助你降低内存的消耗。

默认情况下,PHPExcel依然将单元格对象保存在内存中,但是你可以自定义。你可以使用PHPExcel_Settings::setCacheStorageMethod()方法,将缓存方式作为参数传递给这个方法来设置缓存的方式。

Php代码:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

setCacheStorageMethod()方法会返回一个BOOL型变量用于表示是否成功设置(比如,如果APC不能使用的时候,你设置使用APC缓存,将会返回false)

每一个worksheet都会有一个独立的缓存,当一个worksheet实例化时,就会根据设置或配置的缓存方式来自动创建。一旦你开始读取一个文件或者你已经创建了第一个worksheet,就不能在改变缓存的方式了。

目前,有以下几种缓存方式可以使用:

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_in_memory;

默认情况下,如果你不初始化任何缓存方式,PHPExcel将使用内存缓存的方式。

===============================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;

使用这种缓存方式,单元格会以序列化的方式保存在内存中,这是降低内存使用率性能比较高的一种方案。

===============================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

与序列化的方式类似,这种方法在序列化之后,又进行gzip压缩之后再放入内存中,这会更进一步降低内存的使用,但是读取和写入时会有一些慢。

===========================================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;

当使用cache_to_discISAM这种方式时,所有的单元格将会保存在一个临时的磁盘文件中,只把他们的在文件中的位置保存在PHP的内存中,这会比任何一种缓存在内存中的方式都慢,但是能显著的降低内存的使用。临时磁盘文件在脚本运行结束是会自动删除。

===========================================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;

类 似cache_to_discISAM这种方式,使用cache_to_phpTemp时,所有的单元格会还存在php://temp I/O流中,只把 他们的位置保存在PHP的内存中。PHP的php://memory包裹器将数据保存在内存中,php://temp的行为类似,但是当存储的数据大小超 过内存限制时,会将数据保存在临时文件中,默认的大小是1MB,但是你可以在初始化时修改它:

Php代码:

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array(’memoryCacheSize’ => ’8MB’ );
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
php://temp文件在脚本结束是会自动删除。

===========================================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_to_apc;

当使用cach_to_apc时,单元格保存在APC中,只在内存中保存索引。APC缓存默认超时时间时600秒,对绝大多数应用是足够了,当然你也可以在初始化时进行修改:

Php代码:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_APC;
$cacheSettings = array(’cacheTime’ => 600 );
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

当脚本运行结束时,所有的数据都会从APC中清除(忽略缓存时间),不能使用此机制作为持久缓存。

===========================================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

使 用cache_to_memory时,单元格对象保存在memcache中,只在内存中保存索引。默认情况下,PHPExcel会在localhost和 端口11211寻找memcache服务,超时时间600秒,如果你在其他服务器或其他端口运行memcache服务,可以在初始化时进行修改:

Php代码:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;
$cacheSettings = array( ’memcacheServer’  => ’localhost’,
‘memcachePort’    => 11211,
‘cacheTime’       => 600
);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

从初始化设置的形式上看,MS还不支持多台memcache服务器轮询的方式,比较遗憾。

当脚本结束时,所有的数据都会从memcache清空(忽略缓存时间),不能使用该机制进行持久存储。

===========================================================

Php代码:

PHPExcel_CachedObjectStorageFactory::cache_to_wincache;

使用cache_towincache方式,单元格对象会保存在Wincache中,只在内存中保存索引,默认情况下Wincache过期时间为600秒,对绝大多数应用是足够了,当然也可以在初始化时修改:

Php代码:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_wincache;
$cacheSettings = array(’cacheTime’ => 600);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

PHPExcel还是比较强大的,最大的问题就是内存占用的问题,PHPExcel啥时候能出一个轻量级的版本,不需要那么多花哨的功能,只需要导出最普通的数据的版本就好了!

--结束END--

本文标题: php导出excel出现500错误怎么办

本文链接: https://www.lsjlt.com/news/205.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql导出excel失败怎么办
    mysql中导出excel失败的解决方法方法一:使用select * into方法对Excel进行导出首先,在命令行中启动MySQL服务;service mysql startMySQL服务启动后,在命令行中输入mysql用户名和...
    255
    2023-10-01
    excel mysql
  • mysql出现1045错误怎么办
    这篇文章给大家分享的是有关mysql出现1045错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 --mysql5.6,安装好后进行登录出现 [root@mytest_...
    488
    2023-10-01
    mysql 1045错误
  • PHPSpreadsheet导出Excel超过26列怎么办
    小编给大家分享一下PHPSpreadsheet导出Excel超过26列怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!excel 行列表示方式xexcel 的列的表示规则从 A,B,C 一直到 Z,当超过 26 个字母...
    938
    2023-10-01
  • expdp导出数据时候出现报错怎么办
    这篇文章将为大家详细讲解有关expdp导出数据时候出现报错怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。    ex...
    395
    2023-10-01
    expdp
  • MySQL中出现2059错误怎么办
    这篇文章给大家分享的是有关MySQL中出现2059错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。alter user root@localhost identified...
    498
    2023-10-01
    mysql 2059错误
  • mysql出现服务1067错误怎么办
    这篇文章将为大家详细讲解有关mysql出现服务1067错误怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 mysql服务1067错误的解...
    902
    2023-10-01
    mysql 1067错误
  • apache中出现403错误怎么办
    小编给大家分享一下apache中出现403错误怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Apache,版本2.2.8,安装完成后,进行相关测试;配置了下...
    501
    2023-10-01
  • php出现500错误的原因是什么
    本文小编为大家详细介绍“php出现500错误的原因是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“php出现500错误的原因是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php出现500错误的原因:1...
    931
    2023-10-01
  • DedeCMS因php低版本出现500错误怎么解决
    随着时代的不断进步,我们的网站应用也在不断升级,但有时会出现一些技术难题。其中之一就是,如果你经常使用 DedeCMS 或其他基于PHP的网站开发框架,那么你很可能会遇到这样的问题:使用较低版本的 PHP(5.6 或更早版本),在网站上运行...
    391
    2023-10-01
    php dedecms
  • 出现错误无法登录phpmyadmin怎么办
    这篇文章主要介绍出现错误无法登录phpmyadmin怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!出现错误无法登录phpmyadmin的解决方法:找到config.inc.ph...
    112
    2023-10-01
    phpmyadmin mi %d
  • WAMP打开phpMyAdmin出现错误怎么办
    本篇内容介绍了“WAMP打开phpMyAdmin出现错误怎么办”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    699
    2023-10-01
    phpmyadmin
  • MySQL中出现复制1594错误怎么办
    小编给大家分享一下MySQL中出现复制1594错误怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    295
    2023-10-01
    mysql 1594错误
  • mysql出现ERROR 1130错误问题怎么办
    这篇文章给大家分享的是有关mysql出现ERROR 1130错误问题怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一直使用本机的mysql, 将迁移到服务器上,报错:...
    456
    2023-10-01
    mysql
  • mysql导入出现错误怎么办
    mysql导入出现错误怎么办建一个同名的数据库;2、选择navicat中连接服务器的数据库;3、在弹出的窗口,点击右下角的全选,再点击开始按钮,按照流程点击确定再点击关闭即可。具体操作如下:在本地建一个与数据库同名的数据库选择navicat...
    514
    2023-10-01
    mysql
  • php中xls导出乱码怎么办
    本教程操作环境:Windows7系统、PHP8.1版、Dell G3电脑。php中xls导出乱码怎么办?采用phpmyadmin的处理方式 <php header("Content-type:application/vnd...
    283
    2023-10-01
    乱码 xls php
  • php laravel 505错误怎么办
    php laravel 505错误的解决办法:1、在windows环境的dos中输入命令“type .env.example > .env”来生成.env文件 ;2、通过“php artisan key:generate”获取密码即可...
    175
    2023-10-01
    Laravel php
  • navicat连接mysql出现错误1045怎么办
    这篇文章主要介绍了navicat连接mysql出现错误1045怎么办,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Navicat连接mysql出...
    1029
    2023-10-01
    navicat mysql 1045错误
  • centos中MySQL登录出现1045错误怎么办
    这篇文章给大家分享的是有关centos中MySQL登录出现1045错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。由于需要在centos下部署整个应用,自然少不了对数据库...
    837
    2023-10-01
    centos mysql 1045错误
  • mysqldump中出现error1066错误怎么办
    这篇文章将为大家详细讲解有关mysqldump中出现error1066错误怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysqldump导出数据库报错mysqld...
    432
    2023-10-01
    mysqldump error1066
  • oracle中出现ORA-09817错误怎么办
    这篇文章主要为大家展示了“oracle中出现ORA-09817错误怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“oracle中出现ORA-09817错误怎...
    601
    2023-10-01
    ora-09817 oracle
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作