Questions sur file_put_contents()

Mammouth du PHP | 531 Messages

07 mars 2010, 23:40

Bonjour,

Je me pose une question sur la fonction file_put_contents() et particulièrement dans le cas d'un échec.

Imaginons que l'écriture échoue pour une raison x au moment de l'écriture, je me demande juste si les données qui étaient présentent avant l'exécution de la fonction seront perdues ou non ?
Dans ce cas il faut peut être prévoir de faire une copie avant l'opération ?

Une autre question me viens, imaginons que ce fichier soit appelé en lecture au moment ou ils mis a jour, que se passera t'il ?

ViPHP
ViPHP | 1996 Messages

08 mars 2010, 00:00

Des copies c'est mieux d'en faire.
Pour la dernière question, si le fichier est entrain d'être utilisé avec fopen par exemple, je crois que cela reste impossible.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Mammouth du PHP | 531 Messages

08 mars 2010, 00:03

Des copies c'est mieux d'en faire.
Pour la dernière question, si le fichier est entrain d'être utilisé avec fopen par exemple, je crois que cela reste impossible.
Dans mon cas, il serait plutôt utilisé avec file_get_contents()
C'est peut être plus sur de faire une copie en effet, mais je me demande bien comment est géré le cas ou il y a plantage quand même...

Mammouth du PHP | 985 Messages

08 mars 2010, 00:16

D'après le manuel:
Revient à appeler les fonctions fopen(), fwrite() et fclose() successivement.
Flag: FILE_APPEND:
Si le fichier filename existe déjà, cette option permet d'ajouter les données au fichier au lieu de l'écraser. Cette option est mutuellement exclusive avec LOCK_EX car les ajouts sont atomiques, et qu'il n'y a pas de raison de poser de verrou.
Donc il devrait se comporter comme fwrite.
Si erreur -> il n'écrit rien et le fichier reste à son état initial en utilisant le flag FILE_APPEND.

Enfin d'après moi, mais sans avoir testé :wink:

Autrement je suppose que si tu mets le contenu d'un file_get_contents() dans une variable juste avant un file_put_contents().
Ta variable devient ta sauvegarde en cas d'erreur d'écriture par la suite...
Modifié en dernier par Dr@ke le 08 mars 2010, 00:23, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 531 Messages

08 mars 2010, 00:23

Merci =)
Difficile de tester en même temps ^^

Mammouth du PHP | 985 Messages

08 mars 2010, 00:24

Je ne fais que supposer là, je ne suis sur de rien :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 2287 Messages

08 mars 2010, 00:48

Une autre question me viens, imaginons que ce fichier soit appelé en lecture au moment ou ils mis a jour, que se passera t'il ?
Ca dépend directement de ton OS. le mieux est encore que tu fasses le test sur ton système pour en avoir le coeur net :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________