OVH Community, votre nouvel espace communautaire.

Fichier php modifié, pas de changement


cassiopee
12/07/2012, 22h46
En fait, puisqu'il n'y a pas de chemin indiqué explicitement (*),
le "require" va vérifier :

1) dans le "include_path" d'abord.

2) s'il ne trouve rien dans le "include_path", il va vérifier
dans le répertoire du script appelant, qui ici est "index.php"
et non "tousmesinclude.php", donc il vérifie d'abord dans la racine
et non dans "lesincludes".

3) s'il ne trouve rien dans la racine, il ira vérifier dans "lesincludes".

C'est pour ça qu'il ne râle pas maintenant que tu as supprimé le fichier
à la racine : parce qu'il le trouve quand même dans "lesincludes".


(*) ici on n'est ni en mode "chemin absolu" ni en mode "chemin relatif",
on pourrait appeler ça "chemin implicite".

Iridescence
12/07/2012, 21h01
Bon bon bon,
ben merci bien Cassiopee,
c'est l'histoire d'un mec qui retrouve son fichier maudit dans le répertoire parent, le supprime, et voit que les modifications sont désormais prises en compte...


Par contre je ne comprends pas de quel droit il va me prendre le fichier à la racine alors que j'ai spécifié le require sur le fichier contenu dans tel répertoire (enfin oui je me doute que c'est pas lui qui commet une erreur mais moi). Ca revient à dire qu'une adresse peut désigner deux endroits.
Effectivement comme tu le dis les require sont en relatif.


Mini schéma simplifié
index.php qui contient le code require('lesincludes/tousmesinclude.php')
lesincludes/tousmesinclude.php qui contient le code require('classe_maudite.php')
On est donc bien en train d'inclure (en deux temps) lesincludes/classe_maudite.php dans index.php non ?
S'il me prenait le fichier classe_maudite.php qui est à la racine, maintenant que je l'ai supprimé, il devrait râler (comme il aurait du depuis le début).


Merci en tout cas, demain je cherche ces histoires de chemins relatifs et pourquoi il a réagit comme ça.

cassiopee
12/07/2012, 20h40
Une idée : plusieurs versions de ce fichier, dans différents répertoires ?

(y compris par accident, suite à un upload à problème, suite à une copie
de sauvegarde du fichier faite automatiquement par un éditeur de texte, etc.)

Tu ne modifies/supprimes un exemplaire mais c'est un autre exemplaire qui est
pris en compte par le site.

Autre idée : le fichier n'est pas accessible (pas mis au bon endroit, les include
ou require sont relatifs et ne pointent pas au bon endroit, les droits Unix sur
le fichier ne sont pas bons, une coquille dans le nom du fichier, etc.)
ce qui provoque une erreur 404 "silencieuse" en temps normal, ce qui fait
que tu as beau le modifier/supprimer cela ne change rien puisque ce fichier
n'est pas pris en compte.

Iridescence
12/07/2012, 20h09
Bonsoir,

je travaille sur un site "à la main" depuis quelques mois, tout allait bien, puis hier, quelque chose d'étrange, je modifie un fichier php important (450ko), celui sur lequel je travaille habituellement, et les modifications ne se font pas sur le site.

J'ai bien sûr vidé mon cache navigateur, même si ça ne peut pas venir de là, testé sur 2 navigateurs * 2 ordis, même comportement.
Reboot du vps, reboot d'apache, rien n'y fait.


C'est un fichier de classe, qui est inclu dans toutes les pages du site, il est appelé en require_once (avec d'autres classes et des configs) dans un fichier qui est lui même inclu en require_once dans le début des pages.


Alors mes tests :
- modification du fichier php :
pas de changement sur le site

- insertion d'un texte bidon en plein milieu du code pour provoquer une erreur fatale (Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION...) :
le site se charge sans problème...
si j'accède à la classe directement par l'url, la page m'affiche effectivement l'erreur fatale

- suppression pure et simple du fichier sur le ftp (ou renommage) :
le site se charge sans problème...
si j'accède à la classe directement par l'url, la page m'affiche bien une 404

- page vs ajax
une page se sert de la classe pour générer une partie de son contenu, aucun soucis,
à un clic utilisateur je fais appel par ajax à un script php qui requiert mon fichier de classe fantôme et me retourne une erreur (firebug pour la voir), par exemple le parse error si j'ai mis mon texte pour faire planter volontairement, ou bien m'indique qu'il ne trouve pas le fichier si je l'ai supprimé.

- autres classes
si je reproduis mes tests (erreur, suppression, modification) dans une quelconque autre classe ou fichier php du site, elles sont prises en compte.


J'ai appris qu'il n'y avait pas de cache php, je m'orientais sur ça...
VPS de base, release gentoo d'ovh, j'ai rien installé en plus, j'ai rien trifouillé, c'est apparu d'un coup.

Voila voila, avez-vous une idée avant que je réinstall tout ? (ce qui n'empêchera pas de se reproduire, et le client va râler si c'est après lancement).