Menu

Comment construire plus efficacement des fichiers csv ?

leonardh
8 juillet 2020
Répondre
MP
I have a php website run on a php container and a nginx container. One function in the site is to build a downloadable csv file of all members of an ldap group selected by the user. On smaller groups (less than ~5000) The csv has enough time to generate with a timeout of 180 seconds but the larger groups timeout.

I thought of pre building csvs for every group and if the user asks for a group i could compare the number of enteries in the pre-built csv and the ldap query output and fill in the rest but that would require a lot of spreadsheets to be held in the container and im not actually sure it would be any quicker.

Is their a better way to build these spreadsheets anyone can suggest? I thought of trying to build them in chunks but i dont even know if thats possible let alone where to start with it.

Edit: After reading comments it seems clear the issue is with the ldap query that builds the array, this is a long query to execute. This changes the issue to being able to run the ldap query (and by extension the csv generation) into the background. Or perhaps on page load run the query and when its done give the user a option to download the file
Emmanuel
8 juillet 2020
Répondre
MP
Je ne vois pas d'autre solution que de réaliser une boucle sur les données avec la fonction fputcsv : https://www.php.net/manual/fr/function.fputcsv.php
Cette fonction est capable de traiter plusieurs centaines de milliers de lignes en quelques secondes, par contre il faut dissocier la génération du fichier CSV de son download du serveur.
Le problème vient peut-être de la structure des données LDAP, je ne l'ai jamais utilisée je ne sais donc pas si c'est rapide ou lent. Il faudrait peut-être tester la vitesse en générant un fichier txt simple. Si c'est toujours trop lent c'est que le problème vient du temps d'accès aux datas.

Partager