PHP에서 Excel을 내보낼 때 500 오류에 대한 해결 방법: [PHPExcel_Settings::setCacheStorageMethod()] 메서드를 사용하여 캐시 메서드를 메서드에 매개 변수로 전달하여 캐시를 설정합니다.
이 기사의 운영 환경: windows10 시스템, php 7, thinkpad t480 컴퓨터.
아마도 우리는 phpexcel 클래스를 사용할 때 편리하다고 생각하는 친구들이 많을 것 같습니다. 그러나 많은 양의 데이터를 내보낼 때는 그다지 간단하지 않다는 것을 알게 될 것입니다. 내보내기에는 시간 초과 또는 메모리 오버플로 문제가 동반되는 경우가 많습니다. 아래에서 해결 방법을 살펴보겠습니다.
PHPExcel은 엑셀 처리를 위한 매우 강력한 PHP 오픈소스 클래스인데 메모리를 너무 많이 차지한다는 점이 큰 문제입니다. 1.7.3부터 셀 캐시 방식 설정을 지원하지만 현재는 사용을 권장합니다. 안정 버전 1.7 .6. 이전 버전에는 다양한 정도의 버그가 있었기 때문입니다.
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가 반환됩니다.)
각 워크시트 워크시트가 인스턴스화되면 캐시 모드 설정 또는 구성에 따라 자동으로 생성됩니다. 파일 읽기를 시작하거나 첫 번째 워크시트를 만든 후에는 캐싱 방법을 변경할 수 없습니다.
현재 다음과 같은 캐싱 방법을 사용할 수 있습니다.
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과 유사합니다. 캐시_to_phpTemp를 사용할 때 모든 셀은 여전히 php://temp I/O 스트림에 존재하며, 해당 셀만 넣습니다. 위치는 PHP의 메모리에 저장됩니다. PHP의 php://memory 래퍼는 데이터를 메모리에 저장합니다. php://temp도 비슷하게 동작하지만, 저장된 데이터의 크기가 메모리 제한을 초과하면 데이터가 임시 파일에 저장됩니다. 하지만 초기화 중에 수정할 수 있습니다:
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은 600초의 시간 초과로 로컬 호스트 및 포트 11211에서 Memcache 서비스를 찾습니다. 다른 서버나 다른 포트에서 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啥时候能出一个轻量级的版本,不需要那么多花哨的功能,只需要导出最普通的数据的版本就好了!
推荐学习:php培训
위 내용은 PHP에서 Excel을 내보낼 때 500 오류가 발생하면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!