Nous avons tellement appris sur PHP en PHP. Je ne sais pas dans quelle mesure vous maîtrisez les compétences nécessaires pour utiliser PHP. Je pense qu'un grand nombre de personnes comprendront mais n'utiliseront pas le PHP. connaissances, alors ne vous précipitez pas. Cet article a pour but d'amener tout le monde à utiliser PHP plus en profondeur.
Analyse
Tout d'abord, clarifiez la quantité. nous devons exporter 50W+. Deuxièmement, nous savons tous que le nombre maximum de lignes dans la version Excel 2003 est de 65 535 lignes. Le nombre de lignes dans la version Excel 2007 (1 048 576 lignes) peut répondre à nos exigences, donc la version d'Excel que nous utilisons. vous devez utiliser la version 2007 ou supérieure.
Actuellement, la bibliothèque de classes la plus couramment utilisée par PHP pour traiter Excel est PHPExcel (exporté 1w de données après des tests d'exemple, ainsi que divers jugements de données Cela m'a pris 5 à 8 minutes pour le traiter) ; j'ai également trouvé un produit appelé PHPOffice sur Internet (je ne l'ai jamais utilisé, vous pouvez l'essayer, on dit qu'il est plus efficace que PHPExcel, j'écrirai un article de blog sur présentez-le la prochaine fois) ; il existe également fputcsv(), qui exporte un fichier au format csv et peut également être ouvert avec un fichier Excel.
C'est direct, la demande expire. Les supermarchés sont très courants lors du traitement d'autant de demandes de données. À ce stade, nous devons modifier la configuration PHP : set_time_limit(0).
Nous retirons toutes les données de la base de données et les remplissons dans la mémoire en même temps. Non seulement le stockage en mémoire est insuffisant, mais aussi si la configuration du processeur du serveur est insuffisante. pas élevé, le taux d'utilisation peut être atteint 100%, ce qui entraînera une charge sur la carte serveur. Concernant le débordement, il faut également modifier la configuration PHP : ini_set('memory_limit', '1024M').
Utiliser cette solution pour exporter plus de 500 000 données à la fois est une solution très expérience désagréable. Eh bien, après tests, c'est faisable et peut également être exporté sur le serveur, mais le temps sera plus lent et il sera toujours téléchargé. Si vous utilisez la bibliothèque de classes php, il est recommandé de mettre à niveau php vers la dernière version de php7 pour économiser de la mémoire et avoir une vitesse de calcul plus rapide
Si vous n'utilisez pas de bibliothèque de classes PHP, alors fputcsv() est le meilleur moyen, ce qui est bien meilleur que PHPExcel car le fichier csv est plus petit, la quantité de données pouvant être stockée dans le fichier csv peut être grande ou petite ; , et la génération csv ne prend pas beaucoup de temps et de processeur, tandis que le temps de génération d'Excel augmente à mesure que la quantité de données de fichier augmente.
Divisez les données selon certaines conditions pour réduire la quantité de données exportées. Par exemple, exporter selon la date, qui peut être exportée. une fois par semaine ou un jour, la segmentation des données est définitivement une étape nécessaire pour éviter les débordements de mémoire et les délais d'exécution
Effectuer une optimisation des algorithmes pour réduire les boucles imbriquées lorsque les données sont en boucle et lors de la génération de données CSV ou Excel ; objets, il peut être formé en une seule fois pour réduire le nombre de requêtes de base de données. Si vous devez utiliser d'autres données, veuillez générer la structure de données correspondante à l'avance.
Transmettez les exigences à l'exploitation et à la maintenance, et exécutez directement l'instruction SQL pour exporter :
SELECT * FROM table_name INTO OUTFILE 'F:/test.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
Exécuter ceci L'instruction peut apparaître comme suit Erreur :
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Cela est dû au problème d'autorisation de configuration de Mysql. Vous pouvez exécuter SHOW VARIABLES LIKE '%secure%' ; . NULL signifie que l'exportation est interdite, elle doit donc être définie une seule fois. Dans le fichier my.ini sous le chemin d'installation de Mysql, modifiez et définissez le chemin. Sinon, ajoutez cette configuration :
secure_file_priv=F:/
Vous constaterez que 50w+ données seront exportées. rapidement. . Vous pouvez également écrire cette instruction pour connaître le chemin de ce fichier sur le serveur et le conditionner pour le téléchargement.
Partage de vidéos d'apprentissage associées : Tutoriel vidéo 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!