Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn beim Excel-Export von PHP ein 500-Fehler auftritt?

Was soll ich tun, wenn beim Excel-Export von PHP ein 500-Fehler auftritt?

王林
王林Original
2021-09-27 15:16:083497Durchsuche

Lösung für den 500-Fehler beim Excel-Export in PHP: Verwenden Sie die Methode [PHPExcel_Settings::setCacheStorageMethod()], um den Cache festzulegen, indem Sie die Cache-Methode als Parameter an die Methode übergeben.

Was soll ich tun, wenn beim Excel-Export von PHP ein 500-Fehler auftritt?

Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP 7, Thinkpad T480-Computer.

Ich glaube, viele Freunde sind auf das Problem des Excel-Exports gestoßen. Vielleicht finden wir es normalerweise praktisch, wenn wir die PHPExcel-Klasse verwenden. Sie werden jedoch feststellen, dass dies nicht so einfach ist, wenn Sie große Datenmengen exportieren. Der Export geht häufig mit Zeitüberschreitungen oder Speicherüberlaufproblemen einher. Schauen wir uns die Lösung unten an.

PHPExcel ist eine sehr leistungsstarke PHP-Open-Source-Klasse für die Verarbeitung von Excel, aber ein großes Problem besteht darin, dass sie zu viel Speicher beansprucht. Ab 1.7.3 unterstützt sie das Festlegen der Zellen-Cache-Methode, es wird jedoch empfohlen, die aktuelle zu verwenden stabile Version 1.7 .6, da frühere Versionen in unterschiedlichem Ausmaß Fehler aufwiesen.

PHPExcel benötigt im Durchschnitt 1 KB/Zelle Speicher, daher verbrauchen große Dokumente sehr schnell Speicher. Der Zell-Caching-Mechanismus ermöglicht es PHPExcel, kleine Zellobjekte im Speicher auf der Festplatte oder im APC, Memcache oder Wincache zwischenzuspeichern. Das Lesen der Daten dauert zwar einige Zeit, kann aber dabei helfen, den Speicherverbrauch zu reduzieren.

Standardmäßig speichert PHPExcel weiterhin Zellobjekte im Speicher, Sie können dies jedoch anpassen. Sie können die Methode PHPExcel_Settings::setCacheStorageMethod() verwenden und die Caching-Methode als Parameter an diese Methode übergeben, um die Caching-Methode festzulegen.

PHP-Code:

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

setCacheStorageMethod()-Methode gibt eine BOOL-Variable zurück, um anzuzeigen, ob die Einstellung erfolgreich ist (wenn beispielsweise APC nicht verwendet werden kann und Sie die Verwendung des APC-Cache eingestellt haben, wird „false“ zurückgegeben)

Jedes Arbeitsblatt Es gibt einen unabhängigen Cache. Wenn ein Arbeitsblatt instanziiert wird, wird es automatisch entsprechend dem eingestellten oder konfigurierten Cache-Modus erstellt. Sobald Sie mit dem Lesen einer Datei beginnen oder Ihr erstes Arbeitsblatt erstellt haben, können Sie die Caching-Methode nicht mehr ändern.

Derzeit sind die folgenden Caching-Methoden verfügbar:

PHP-Code:

PHPExcel_CachedObjectStorageFactory::cache_in_memory;

Wenn Sie keine Caching-Methode initialisieren, verwendet PHPExcel standardmäßig die Speicher-Cache-Methode.

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

PHP-Code:

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;

Mit dieser Caching-Methode werden Zellen serialisiert im Speicher gespeichert. Dies ist eine relativ leistungsstarke Lösung zur Reduzierung der Speichernutzung.

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

Php-Code:

PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

Ähnlich wie die Serialisierungsmethode führt diese Methode nach der Serialisierung eine GZIP-Komprimierung durch und legt sie dann im Speicher ab. Dadurch wird die Speichernutzung weiter reduziert, aber beim Lesen und Schreiben erhöht sich die Geschwindigkeit .

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

PHP-Code:

PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;

Bei Verwendung von cache_to_discISAM werden alle Zellen in einer temporären Festplattendatei gespeichert und nur ihr Inhalt in der Datei wird gespeichert im Speicher von PHP gespeichert, was langsamer ist als jede Methode zum Zwischenspeichern im Speicher, aber die Speichernutzung erheblich reduzieren kann. Die temporäre Festplattendatei wird automatisch gelöscht, wenn das Skript endet.

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

Php-Code:

PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;

Ähnlich wie bei Cache_to_discISAM sind bei Verwendung von Cache_to_phpTemp alle Zellen weiterhin im E/A-Stream php://temp vorhanden, nur werden sie eingefügt Der Standort wird im Speicher von PHP gespeichert. Der php://memory-Wrapper von PHP verhält sich ähnlich, aber wenn die Größe der gespeicherten Daten das Speicherlimit überschreitet, werden die Daten in einer temporären Datei gespeichert. aber Sie können es während der Initialisierung ändern:

PHP-Code:

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

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

PHP-Code:

PHPExcel_CachedObjectStorageFactory::cache_to_apc;

Bei Verwendung von cach_to_apc werden Zellen in APC gespeichert, nur im Speicher Index in . Das Standard-APC-Cache-Timeout beträgt 600 Sekunden, was für die meisten Anwendungen ausreicht. Natürlich können Sie es auch während der Initialisierung ändern:

Php-Code:

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

Wenn das Skript endet, werden alle Daten aus APC gelöscht (Cache ignoriert). Zeit), können Sie diesen Mechanismus nicht als persistenten Cache verwenden.

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

PHP-Code:

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

Bei Verwendung von „cache_to_memory“ wird das Zellobjekt im Memcache gespeichert und nur der Index im Speicher. Standardmäßig sucht PHPExcel nach dem Memcache-Dienst auf localhost und Port 11211, mit einer Zeitüberschreitung von 600 Sekunden. Wenn Sie den Memcache-Dienst auf anderen Servern oder anderen Ports ausführen, können Sie ihn während der Initialisierung ändern:

Php-Code:

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

Ab Initialisierung festlegen Aus formaler Sicht unterstützt MS die Polling-Methode mehrerer Memcache-Server noch nicht, was schade ist.

Wenn das Skript endet, werden alle Daten aus dem Memcache gelöscht (die Cache-Zeit wird ignoriert), und dieser Mechanismus kann nicht für die dauerhafte Speicherung verwendet werden.

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

PHP-Code:

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培训

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn beim Excel-Export von PHP ein 500-Fehler auftritt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn