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

本文操作环境: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

猜你喜欢

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

    php导出excel出现500错误的解决方法:使用【PHPExcel_Settings::setCacheStorageMethod()】方法将缓存方式作为参数传递给该方法来设置缓存即可。
    阅读数:286 php excel 500
  • php出现500错误的原因有哪些

    php出现500错误的原因:1、PHP程序有语法错误,只要把报错信息暴露出来,再根据信息解决问题即可;2、磁盘空间不足,没有足够空间读写数据而导致500报错。
    阅读数:458 php 500错误
  • php 编译 iconv错误怎么办

    php编译iconv错误的解决办法:1、在make时用“make ZEND_EXTRA_LIBS='-liconv'”代替;2、添加“EXTRA_LIBS = ..... -lcrypt-liconv”即可。
    阅读数:666 php iconv
  • php导出csv中文乱码怎么办

    php导出csv中文乱码的解决办法:1、设置header编码修改为UTF-8;2、在输出内容前先输出BOM头;3、把UTF-8转GB2312即可。
    阅读数:827 php csv
  • php中xls导出乱码怎么办

    php中xls导出乱码的解决办法:1、打开相应的PHP文件;2、在产生乱码的文件中,添加“header("Content-type:application/vnd.ms-excel;charset=UTF-8");”语句即可。
    阅读数:280 乱码 xls php
  • php phpinfo 不能出现php信息怎么办

    php phpinfo不能出现php信息的解决办法:1、找到并打开php.ini文件;2、将其中的short_open_tags打开;3、重新加载php.ini服务即可。
    阅读数:250 php phpinfo
  • php files上传错误怎么办

    php files上传错误的解决办法:1、打开php.ini文件;2、将“upload_tmp_dir”项前面的分号去掉,并在后面添加好路径为“upload_tmp_dir ="C:/windows/temp"”;3、设置“upload_max_filesize”选项限制的值即可。
    阅读数:122 php
  • 遇到一个php错误怎么办

    遇到一个php错误的解决办法:1、检查语法格式;2、查看函数名;3、转换数据类型;4、查看变量或函数是否命名正确;5、修改SQL语句;6、检查变量的定义;7、检查是不是数组键名拼写错误或未定义;8、声明字符集。
    阅读数:109 php
  • php合成图片出现乱码怎么办

    php合成图片出现乱码的解决办法:1、打开相应的PHP生成图片的代码;2、通过添加“ob_end_clean()”在header函数前清空缓存数据即可。
    阅读数:954 php 乱码
  • php执行时出现乱码怎么办

    php执行时出现乱码的解决办法:1、打开phpStudy,切换版本为php7.0以上的Apache;2、在编辑器代码中补充“<meta charset='UTF-8'>”;3、执行“header("Content-Type :text/html charset=utf-8)"”语句即可。
    阅读数:858 php
  • php.ini 不显示错误怎么办

    php.ini不显示错误的设置方法:1、找到并打开php.ini文件;2、通过设置“display_errors = Off”来屏蔽错误即可。
    阅读数:384 php.ini
  • php下载大文件时错误怎么办

    php下载大文件时错误的解决办法:1、在服务器上查看nginx日志;2、 查看到fpm运行身份;3、编辑nginx配置设置身份;4、通过“chown -R daemon /aichenk/soft/nginx/fastcgi_temp/”更改路径即可。
    阅读数:874 php
  • 安装php网站出现空白页怎么办

    安装php网站出现空白页的解决办法:1、找到并打开“php.ini”文件;2、更改内容为“short_open_tag=On”;3、通过“phpinfo();”查看服务器配置信息即可。
    阅读数:744 php
  • 如何解决php500错误问题

    php 500错误的解决办法:1、检查PHP脚本并修改;2、捕获异常并记录异常到日志;3、分析日志并处理即可。
    阅读数:204 php 500错误
  • php png 失真怎么办

    php png失真的解决办法:1、创建一个PHP示例文件;2、创建一个和背景图片一样大小的真彩色画布;3、复制背景图片;4、通过“imagecreatefrompng”合成png图片即可。
    阅读数:136 php png
  • php查询失败怎么办

    php查询失败的解决办法:1、使用函数“mysql_select_db('demo');”选择查询数据库;2、给mysql_query添加一个数据库资源连接符。
    阅读数:582 php
  • php include不行怎么办

    php include不行的解决办法:1、用ftp修改整个目录的权限;2、修改编码;3、将“include("xxxx")”改为匹配的大小写即可。
    阅读数:309 php include
  • php htmlentities 乱码怎么办

    php htmlentities乱码的解决办法:1、使用“htmlentities($str,ENT_COMPAT,"GB2312")”;2、输出“htmlspecialchars($str)”。
    阅读数:150 php htmlentities
  • php use报错怎么办

    php use报错的解决办法:1、打开相应的代码文件;2、使用require引入文件;3、使用use引入命名空间文件即可。
    阅读数:363 php use
  • PHP出错 warning怎么办

    PHP出错warning的解决办法:1、在警告的页面中添加“error_reporting(E_ALL ^ E_DEPRECATED);”;2、修改php.ini文件屏蔽出错。
    阅读数:807 PHP warning