8768 sujets

Développement web côté serveur, CMS

Bonjour
J'ai un bout de code PHP qui me pose problème, j'aimerais avoir votre avis:

function save($data) {
			echo "/* dateTime=", date('Y/m/d H:i:s', $this -> dateTime), " (", $this -> dateTime, ") */\n";
			file_put_contents($this -> savePath, $data);
			$saveTime = filemtime($this -> savePath);
			echo "/* dateTime=", date('Y/m/d H:i:s', $saveTime), " ($saveTime) */\n";
			touch($this -> savePath, $this -> dateTime);
			$modTime = filemtime($this -> savePath);
			echo "/* modTime=", date('Y/m/d H:i:s', $saveTime), " ($modTime) */\n";
		}

Explication:
Il s'agit d'une méthode dans une classe PHP.
Ce que je veux faire:
1) écrire la chaîne de caractères $data dans un fichier ($this -> savePath)
2) remettre la date de modification du fichier à sa valeur initiale ($this -> dateTime)

Pour voir ce qui se passe, j'ai mis des commandes "echo" dans le code pour tracer l'évolution de la date du fichier.

Ce que je constate:
tout se passe comme prévu, sauf que les traces me donnent 3 fois la même valeur, ce qui n'est pas ce que j'escomptais. "Normalement", la deuxième trace devrait donner une date différente.

Tout se passe comme si la fonction filemtime ne prenait pas en compte le fait que le fichier vient d'être modifié à la ligne précédente.

Votre avis sur la question me serait fort utile!
Bonjour.

Je ne suis pas sûre de tout suivre, ces deux lignes ne devraient-elles pas être interverties :
file_put_contents($this -> savePath, $data);
$saveTime = filemtime($this -> savePath);


Ensuite, le temps d'exécution d'un script PHP peut être très rapide, moins d'une seconde... Il y a tellement de données dans $data ?

Smiley smile
Zelena a écrit :

Je ne suis pas sûre de tout suivre, ces deux lignes ne devraient-elles pas être interverties :
file_put_contents($this -> savePath, $data);
$saveTime = filemtime($this -> savePath);


Non: c'est "je sauve et je regarde la date qu'il vient de donner au fichier après sauvegarde

Zelena a écrit :
Ensuite, le temps d'exécution d'un script PHP peut être très rapide, moins d'une seconde... Il y a tellement de données dans $data ?

Il n'y a pas grand chose dans $data, mais ce n'est pas non plus ça:
J'ai sauvé mon fichier il y a une heure, disons à 16h
Normalement si j'exécute le programme, je dois avoir d'abord 16h, puis 17h (heure de sauvegarde) puis de nouveau 16h (heure modifiée)
Or ce que j'ai dans ce cas là c'est 3 fois 16h...
Et après avoir lancer ton php, le fichier physiquement à été modifier ? tu vois la date de modif dans la liste des fichiers en détail ?
Meilleure solution
JENCAL a écrit :
Après il est possible que la date de modif soit en cache, donc peut être devrais-tu mettre à jour ce cache :

clearstatcache()

Bingo!
J'ignorais l'existence de cette fonction.
Merci pour ton aide.
JENCAL a écrit :
Et après avoir lancer ton php, le fichier physiquement à été modifier ? tu vois la date de modif dans la liste des fichiers en détail ?

oui, tout baigne