8722 sujets

Développement web côté serveur, CMS

Bonjour à tous
Hier après midi, pendant plusieurs heures certaines pages de mon site s'affichaient vides.
Il s'agissait de pages générées à partir de requêtes SQL, j'en déduis que la liaison entre le serveur web et le serveur de base de données ne fonctionnait plus, d'autant plus que la base elle même était accessible sans problème depuis phpMyAdmin.

Mon programme comprend une classe Database avec une fonction connect qui effectue la connexion:

function connect() {
    try {
        $this -> pdo = 
            new PDO("mysql:host={$this -> host};dbname={$this ->   dbname};charset=utf8", 
                $this -> dbuser,  $this -> dbpw);
    }
	catch(Exception $e) {
	    stop("Erreur dans l'ouverture de la base de données:", 
                    $e -> getMessage, 
                    $e -> getCode());
        }
}

la fonction "stop" affiche le nom du fichier php, le numéro de la ligne et les infos passées en aavant de terminer par die();

Si le programme avait détecté une erreur au moment de la connexion, on aurait donc dû avoir un message, ce qui ne s'est pas produit.
J'en déduis que
- soit il y a une erreur dans le code ci-dessus
- soit la fonction connect n'a pas répondu, sans doute faute d'un timeout dans l'implémentation du serveur web (???)

Qu'il y ait des incidents techniques, cela est malheureusement inévitable, mais que les utilisateurs n'aient aucune information à ce sujet et se retrouvent devant une page blanche est à proscrire.

Je cherche donc un moyen de contourner le problème et d'alerter les utilisateurs.

Vos avis sont fortement souhaités!
Salut,

le mieux est encore de tester ton new PDO dans un var_dump pour voir vraiment ce qu'il en ressort. et même de tester tes $this -> host etc..

var_dump(new PDO("mysql:host={$this -> host};dbname={$this ->   dbname};charset=utf8", 
                $this -> dbuser,  $this -> dbpw)); die;

Modifié par JENCAL (14 Jun 2021 - 11:33)
Merci de ta réponse
Le site est reparti tout seul comme un grand sans que j’aie changé quoi que ce soit au code ou aux données. Ça marche d’habitude sans problème depuis deux ans.
Je ne peux pas mettre des var_dump dans du code en exploitation.
Quand je faisais du développement système dans des cas similaires je lançais un timeout de 30 secondes ou 1 mn pour vérifier que cette f… opération était terminée mais je ne crois pas qu’on puisse faire ça en php
Ah oui c'est c'était du code en production, je n'avais pas compris Smiley smile

ok tant mieux si tout est bien repartie (tant mieux ou pas, car du coup tu n'es pas à l'abri quel cela recommence)...
On n’est jamais à l’abri d’une panne, mais on devrait pouvoir alerter l’utilisateur.
L’utilisateur comprend que le site soit hors service mais là c’est seulement certaines pages…
Je n’aurais peut-être pas dû changer mon design et introduire une database au lieu de mes bons vieux fichier xml Smiley cligne