>  기사  >  백엔드 개발  >  PHP에서 Excel을 내보낼 때 500 오류가 발생하면 어떻게 해야 합니까?

PHP에서 Excel을 내보낼 때 500 오류가 발생하면 어떻게 해야 합니까?

王林
王林원래의
2021-09-27 15:16:083529검색

PHP에서 Excel을 내보낼 때 500 오류에 대한 해결 방법: [PHPExcel_Settings::setCacheStorageMethod()] 메서드를 사용하여 캐시 메서드를 메서드에 매개 변수로 전달하여 캐시를 설정합니다.

PHP에서 Excel을 내보낼 때 500 오류가 발생하면 어떻게 해야 합니까?

이 기사의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.