NewbieContest

Programmation => Langages Web => Discussion démarrée par: #Z@tox# le 11 Octobre 2018 à 10:52:46



Titre: [Résolu] requete SQL qui entrainne erreur 500
Posté par: #Z@tox# le 11 Octobre 2018 à 10:52:46
Hello les amis,

j'ai un problème sur un projet je détaille ci-dessous:

J'ai une base de données accessible via une interface utilisateurs sur mon site web

Cette base comporte énormément (plusieurs dizaines de milliers) d'informations sur les clients :

nom, prénom, numéros de factures, montant des factures,  adresses ...

Ces données se chargent parfaitement à l'écran lorsque je me log sur mon interface utilisateur.

J'ai créé une option pour exporter les données qui s'affichent à l'écran dans un tableau .xls

Je ne rencontrait pas de problèmes particuliers jusqu'au jour ou... la base est devenue trop grosse, et lorsque je souhaite exporter les données dans le tableau excel, l’exécution de la requete devient trop longue et le serveur renvoie une erreur 500.

Comment puis-je augmenter la durée maximale de réponse tolérée par le serveur? Pour info la base est hébergée chez 1and1 j'ai cherché dans les options du compte client 1and1 mais j'ai pas trouvé.

faut il chercher un truc du style
Code:
CommandTimeout = XXXXX;

Merci par avance pour votre aide.



Titre: Re : requete SQL qui entrainne erreur 500
Posté par: the lsd le 11 Octobre 2018 à 11:34:01
Erreur 500 ? timeout ? Are U sure ?

Si c'est un vrai timeout, t'as pas de 500, juste un "connection timeout" par le client. Tu es sûr que les données de ta BDD sont correctes et ne font pas foirer un parsing quelconque, ce qui aboutirait à un 500 ?

Enjoy

The lsd


Titre: Re : requete SQL qui entrainne erreur 500
Posté par: #Z@tox# le 11 Octobre 2018 à 11:45:02
Hello,

oui, les données sont bonnes puisque je n'avais pas de problème particulier.

j'ai pourtant remarqué qu'au fur et à mesure que la base grossissait, le tableau excel mettait de plus en plus de temps à se générer, ce qui est normal,

jusqu'au jour ou il ne se générait plus du tout, car le serveur coupe la requete.

voici le message qui s'affiche a l'écran :

Citation
Error 500 - Internal server error

Un problème inattendu est survenu.
Veuillez réessayer ultérieurement.


Titre: Re : requete SQL qui entrainne erreur 500
Posté par: the lsd le 11 Octobre 2018 à 11:53:24
hmmm, dans ce cas, il faut savoir quel partie de ta requête coupe la connexion :
 - le serveur web ? j'y crois moyen, pour moi il ne réagit pas sur une requête trop longue. Après, je connais pas ton code
 - ton code applicatif ? PHP, autre ? possible.
 - la BDD ? J'y crois moyen aussi, elle n'a pas à interagir directement avec le serv web, elle est normalement agnostique

Pour éliminer les problèmes un par un, fais des tests sur chaque partie. Mais imho, penche toi sur le code applicatif, je pense que ça se situe ici
Malheureusement, si tu veux plus d'aide, il va falloir nous donner plus d'infos  :)

Enjoy

The lsd


Titre: Re : requete SQL qui entrainne erreur 500
Posté par: flob le 11 Octobre 2018 à 12:07:36
Salut,

Il est possible que ce soit la génération du XLS qui pose problème, les lib existantes sont assez lourdes je trouve.

Tu peux essayer de remplacer l'export XLS par un export CSV en utilisant les fonctions fournies par Php (fopen, fputcsv ...). Tu peux faire un $fd = fopen('php://output', 'w'); fputcsv($fd, ....); pour écrire le CSV directement dans le buffer de sortie et ainsi éviter d'utiliser un fichier temporaire (à combiner avec quelques header qui vont bien évidemment).

Edit : Il aussi possible que tu dépasses la mémoire autorisée, si c'est le cas il faudra donc optimiser la récupération et le traitement des données (c'est comme quand tu veux lire un très gros fichier, si t'ouvres tout le fichier d'un coup c'est mort ^^)


Titre: Re : requete SQL qui entrainne erreur 500
Posté par: #Z@tox# le 11 Octobre 2018 à 12:52:27
Merci à tous les 2 pour vos réponses,

La réponse de Flob me met la puce a l'oreille, je vais commencer par essayer de générer le tableau en .csv et pas en .xls,

cela devrait alléger la génération de celui-ci et optiiser le temps.

Si cela ne change rien au problème, je me pencherai sur la partie PHP pure et dure.



Titre: Re : requete SQL qui entrainne erreur 500
Posté par: lugdanum le 11 Octobre 2018 à 18:10:55
Hello

Regarde aussi peut être comme tu le penses du côté de max_execution_time :

https://assistance.1and1.fr/hebergement-c65619/programmation-c65626/php-c65653/quels-sont-les-parametres-php-modifiables--a793719.html

https://assistance.1and1.fr/hebergement-c65619/programmation-c65626/php-c65653/limites-des-scripts-php-dans-les-contrats-d-hebergement-1and1-a793736.html

https://help.1and1.com/hosting-c37630/scripts-and-programming-languages-c85099/php-c37728/change-php-directives-a660257.html


Titre: Re : requete SQL qui entrainne erreur 500
Posté par: #Z@tox# le 12 Octobre 2018 à 09:55:13
Hello,

@ lugdanum,

le changement de format en .csv n'a rien donné, je vais parcourir tes liens ,

Merci


Titre: Re : requete SQL qui entrainne erreur 500
Posté par: #Z@tox# le 12 Octobre 2018 à 10:01:18
Merci Lugdanum,

je viens d'obtenir grace a toi l'info dont j'avais besoin,

sur les serveurs mutualisés de chez 1and1  le MAX_EXECUTION_TIME  est bridé à 60secondes et ce quelque soit l'abonnement choisi.

Seule solution à priori, basculer sur un serveur dédié 25X plus cher que le mutualisé  :? je vais donc couper ma BDD en plusieurs morceaux et lancer plusieurs requetes inférieures à 60s pour contourner le problème.

Ca va demander un peu de dev, mais au moins mon client n'y verra que du feu...


Merci à tous de vous etre penchés sur la question.