Lors de l'importation de fichiers Excel dans Laravel, la quantité de données est trop importante et le serveur reçoit souvent 500 requêtes. Que dois-je faire ?
我想大声告诉你
我想大声告诉你 2017-05-16 16:48:23
0
3
746

Grâce à l'extension Laravel Excel, comment importer rapidement plus de 10 000 données Excel sans modifier la configuration du serveur sans signaler 500 erreurs, merci

我想大声告诉你
我想大声告诉你

répondre à tous(3)
PHPzhong

Cette situation se produit généralement lorsque l'utilisation de la mémoire dépasse la configuration maximale autorisée de PHP ou que le temps d'exécution est trop long et expire. Si vous utilisez directement l'extension Excel Laravel et importez en fonction du téléchargement Web, le délai d'attente expirera définitivement et dépassera la limite de taille de la mémoire.

La solution consiste à utiliser les tâches planifiées ou les files d'attente de tâches de Laravel.

  • Tâches chronométrées

    上传文件后,定时任务去检查是否有新上传的文件,如果有就执行导入处理。
    
  • File d'attente des tâches

    上传文件后,发布一个异步事件,由任务listener去异步处理excel内容的导入。
    

    Une fois l'importation finale terminée, écrivez les résultats de l'importation dans la base de données ou dans d'autres méthodes de stockage, afin que l'importation de données asynchrone ne provoque pas d'erreurs dues à la mémoire ou au délai d'attente.

曾经蜡笔没有小新

C'est normal. Rencontrez-le souvent. J'ai donc développé une extension.
https://git.oschina.net/xavie...
https://github.com/xavieryang...

Le problème avec l'importation de xls par PHP est très grave, car xlsx est un package compressé plus XML, il est meilleur que xls. Xls est un fichier binaire qui doit être complètement chargé avant de pouvoir être analysé, et l'analyse est relativement compliquée. Le PHPEXCEL actuellement populaire est très lent dans le traitement des xls, et il échoue souvent lors de l'importation de xls.

巴扎黑

Vous n'avez pas besoin de lire les éléments 1W dans la mémoire à la fois. Lisez-les un par un et enregistrez-les un par un

.
function getRows($file)
{
    $handle = fopen($file, 'rb');
    if (!$handle) {
        throw new Exception();
    }
    while (!feof($handle)) {
        yield fgetcsv($handle);
    }
    fclose($handle);
}


foreach (getRows('data.csv') as $k) {

}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal