Maison > Questions et réponses > le corps du texte
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
PHPz2017-05-16 16:50:23
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.
曾经蜡笔没有小新2017-05-16 16:50:23
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.
巴扎黑2017-05-16 16:50:23
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) {
}