Maison >développement back-end >Problème PHP >Que dois-je faire si une erreur 500 se produit lors des exportations php vers Excel ?

Que dois-je faire si une erreur 500 se produit lors des exportations php vers Excel ?

王林
王林original
2021-09-27 15:16:083565parcourir

Solution à l'erreur 500 lors de l'export d'Excel en PHP : Utilisez la méthode [PHPExcel_Settings::setCacheStorageMethod()] pour définir le cache en passant la méthode cache en paramètre à la méthode.

Que dois-je faire si une erreur 500 se produit lors des exportations php vers Excel ?

L'environnement d'exploitation de cet article : système windows10, php 7, ordinateur thinkpad t480.

Je pense que de nombreux amis ont rencontré le problème de l'exportation d'Excel. Peut-être que nous trouvons généralement cela pratique lorsque nous utilisons la classe phpexcel. Mais vous constaterez que ce n’est pas si simple lors de l’exportation d’une grande quantité de données. L’exportation s’accompagne souvent de problèmes de délai d’attente ou de dépassement de mémoire. Jetons un coup d'œil à la solution ci-dessous.

PHPExcel est une classe open source PHP très puissante pour le traitement d'Excel, mais un gros problème est qu'elle prend trop de mémoire. À partir de la version 1.7.3, elle prend en charge la définition de la méthode de cache de cellules, mais il est recommandé d'utiliser celle actuellement. version stable 1.7 .6, car les versions précédentes comportaient des bugs à des degrés divers.

PHPExcel utilise en moyenne 1 ko/cellule de mémoire, les documents volumineux consommeront donc de la mémoire très rapidement. Le mécanisme de mise en cache des cellules permet à PHPExcel de mettre en cache les petits objets cellulaires en mémoire sur disque ou dans APC, memcache ou Wincache. Bien que la lecture des données prenne un certain temps, cela peut vous aider à réduire la consommation de mémoire.

Par défaut, PHPExcel enregistre toujours les objets de cellule en mémoire, mais vous pouvez le personnaliser. Vous pouvez utiliser la méthode PHPExcel_Settings::setCacheStorageMethod() et transmettre la méthode de mise en cache en tant que paramètre à cette méthode pour définir la méthode de mise en cache.

Code Php :

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

La méthode setCacheStorageMethod() renverra une variable BOOL pour indiquer si le paramètre est réussi (par exemple, si APC ne peut pas être utilisé et que vous définissez l'utilisation du cache APC, false sera renvoyé)

Chaque feuille de calcul Il y aura un cache indépendant Lorsqu'une feuille de calcul est instanciée, elle sera automatiquement créée en fonction du mode de cache défini ou configuré. Une fois que vous commencez à lire un fichier ou que vous avez créé votre première feuille de calcul, vous ne pouvez pas modifier la méthode de mise en cache.

Actuellement, les méthodes de mise en cache suivantes sont disponibles :

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_in_memory;

Par défaut, si vous n'initialisez aucune méthode de mise en cache, PHPExcel utilisera la méthode du cache mémoire.

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

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;

En utilisant cette méthode de mise en cache, les cellules seront stockées en mémoire de manière sérialisée, ce qui est une solution haute performance pour réduire l'utilisation de la mémoire.

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

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

Semblable à la méthode de sérialisation, cette méthode effectue une compression gzip après la sérialisation, puis la met en mémoire. Cela réduira encore l'utilisation de la mémoire, mais elle augmentera lors de la lecture et de l'écriture. .

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

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;

Lors de l'utilisation de cache_to_discISAM, toutes les cellules seront enregistrées dans un fichier de disque temporaire, et seul leur contenu dans le fichier sera enregistré. stocké dans la mémoire de PHP, ce qui est plus lent que n'importe quelle méthode de mise en cache en mémoire, mais peut réduire considérablement l'utilisation de la mémoire. Le fichier disque temporaire sera automatiquement supprimé à la fin du script.

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

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;

Similaire à cache_to_discISAM, lors de l'utilisation de cache_to_phpTemp, toutes les cellules existeront toujours dans le flux d'E/S php://temp, mettez-les uniquement l'emplacement est enregistré dans la mémoire de PHP. Le wrapper php://memory de PHP enregistre les données en mémoire. php://temp se comporte de la même manière, mais lorsque la taille des données stockées dépasse la limite de mémoire, les données seront enregistrées dans un fichier temporaire. La taille par défaut est de 1 Mo. mais vous pouvez le modifier lors de l'initialisation :

Code Php :

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

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

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_to_apc;

Lors de l'utilisation de cach_to_apc, les cellules sont enregistrées dans APC, uniquement en mémoire. Enregistrez le indexer dans . Le délai d'expiration du cache APC par défaut est de 600 secondes, ce qui est suffisant pour la plupart des applications. Bien sûr, vous pouvez également le modifier lors de l'initialisation :

Code Php :

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

À la fin du script, toutes les données seront effacées d'APC (en ignorant le cache). temps), vous ne pouvez pas utiliser ce mécanisme comme cache persistant.

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

Code Php :

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

Lors de l'utilisation de cache_to_memory, l'objet cellule est enregistré dans memcache et seul l'index est enregistré en mémoire. Par défaut, PHPExcel recherchera le service memcache sur localhost et le port 11211, avec un timeout de 600 secondes. Si vous exécutez le service memcache sur d'autres serveurs ou d'autres ports, vous pouvez le modifier lors de l'initialisation :

Code PHP :

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

Défini dès l'initialisation D'un point de vue formel, MS ne supporte pas encore la méthode de polling de plusieurs serveurs memcache, ce qui est dommage.

Une fois le script terminé, toutes les données seront effacées du cache mémoire (en ignorant le temps de cache), et ce mécanisme ne peut pas être utilisé pour le stockage persistant.

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn