OVH Community, votre nouvel espace communautaire.

Page PHP accédée mais non exécutée


Fraise
02/09/2016, 22h06
Non, pas de blocage au niveau du code et aucune erreur dans les logs apache. Bon merci quand-même d'avoir essayé de m'aider, pas facile tout ça, je vais tenter un flock au cas où...

cassiopee
02/09/2016, 20h06
Citation Envoyé par Fraise
Je pensais que le fopen de script2 renvoyait plutôt FALSE, ce n'est pas le cas ? Car dans ce cas je zappe l'écriture.
De mémoire, c'est juste un warning, donc c'est pour cela que je te demandais comment tu gères les conflits.

Mais ce qui me gêne c'est que lorsque script2 n'écrit rien dans le fichier, il n'exécute pas le reste qui met à jour la BDD, c'est d'ailleurs ça qui a attiré mon attention en premier.
C'est difficile de rentrer dans davantage de détails sans avoir le code sous les yeux.

Peut-être que si ton fopen() échoue, cela bloque le reste de l'exécution (question d'imbrication de if() else() ) ?

Fraise
02/09/2016, 17h40
Je pensais que le fopen de script2 renvoyait plutôt FALSE, ce n'est pas le cas ? Car dans ce cas je zappe l'écriture.
Mais ce qui me gêne c'est que lorsque script2 n'écrit rien dans le fichier, il n'exécute pas le reste qui met à jour la BDD, c'est d'ailleurs ça qui a attiré mon attention en premier.

cassiopee
02/09/2016, 16h25
Si tu ne gères pas les conflits, voici ce qui peut se passer dans l'ordre chronologique :

- script1 est appelé, il ouvre le fichier, puis pour une raison quelconque, le reste de son exécution est interrompue un bref instant
(ici on compte en dixièmes ou en centièmes de secondes)

- script2 est appelé (une deuxième instance de script1, c'est le même script bien sûr), il ouvre le fichier, y stocke ce qu'il a
à y stocker, il referme le fichier.

- script1 poursuit son travail, il stocke ce qu'il a à stocker dans le fichier et referme le fichier.

Résultat des courses : tout ce qu'a pu écrire script2 dans le fichier de logs est perdu
et seules les traces de script1 vont apparaître dans le fichier de logs.

Dans les logs Apache, script2 a bien été appellé, il a renvoyé un statut 200, de son seul point de vue,
tout s'est bien déroulé normalement.

Fraise
02/09/2016, 11h15
Je ne gère pas les conflits d'écriture, juste un fopen php classique, mais au départ j'ai parlé de ce fichier pour simplifier, mais quand le souci survient tout ce qui suit n'est pas exécuté non plus... Dans les faits, il n'y a jamais d'accès simultané à la milliseconde près de ce script, par contre l'exécution peut parfois durer plusieurs secondes et il se peut qu'il tourne en parallèle mais comme très souvent sur un site web en fait.
Enfin bon, pour ce cas précis je vais stocker les requêtes en base de données et les traiter à la file pour éviter les traitement simultanés malgré tout car c'est quelque chose d'assez critique dans l'application. Même si ça arrive moins d'une fois sur 100, c'est beaucoup trop.

cassiopee
26/08/2016, 19h03
Comment gères-tu les conflits d'accès en écriture dans le fichier de trace ? (là où tu stockes la date et heure d'appel du script)

buddy
26/08/2016, 18h24
Tu as munin pour tout longuer.

On parle bien d un dédié ?

Fraise
26/08/2016, 18h11
Le fichier est bien fermé aussitôt oui.
Dans ces moments là il y a souvent pas mal d'activité sur le serveur mais je me demande si il existe un module ou quelque chose qui permet de logger la charge serveur et le nombre de connexions simultanées sur chaque requête, ça pourrait me permettre d'y voir plus clair. Et si apache ferme la connexion avant d'exécuter le script, il renverrait tout de même un code 200 ?

buddy
26/08/2016, 14h21
Tu n'aurais pas des exécutions trop rapprochées voire simultanées quand ça ne marche pas ?
Tu fermes bien le fichier des que tu as fini d'écrire dedans ?

Fraise
26/08/2016, 14h06
oui, tout fonctionne dans plus de 99% du temps et le script ne fait pas qu'écrire dans un fichier, il y a du code qui suit et qui n'est pas exécuté non plus dans ces 1% de cas et c'est d'ailleurs ça qui m'a mis la puce à l'oreille.
Le code qui suit pourrait être éventuellement buggé mais même si c'était le cas il devrait y avoir au moins la mise à jour de ce fichier...

buddy
26/08/2016, 13h54
Ton fichier est quand même modifié de temps en temps ? Ce n'est pas un problème de droits d'écriture dans le fichier ?

Fraise
26/08/2016, 13h51
Bonjour,

J'essaye de résoudre une énigme : j'ai une page php qui est parfois appelée, je le sais car j'ai bien l'accès dans les logs apache, mais qui n'est pas exécutée.
Cette page débute par un fwrite du jour et heure dans un fichier en plus d'autres données, donc à chaque appel j'ai une trace sauf quelques exceptions où j'ai bien une trace de l'appel dans les logs apache avec un renvoi du code 200 mais rien dans ce fichier, donc le script n'est pas exécuté.

Rien dans les logs erreur.
PHP s'exécute en tant que module apache 2.

Avez-vous une idée de ce qui peut provoquer ça ? Est-ce qu'une surcharge du serveur à ce moment précis ou bien trop d'accès simultanés pourraient causer ce genre de problème ? Mais dans ce cas est-ce normal qu'apache renvoie un code 200 ?