|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Bonjour,
Il m'arrive de devoir faire appel 2 fois (successivement) à une fonction PHP qui modifie un fichier XML pour mise à jour. Code :
$xml->load() --traitements-- $xml->save() Mais dans la pratique, je me demande, suite à une charge serveur ou autre, si on ne pourrait pas se trouver dans ce cas et que le deuxième traitement ne puisse aboutir. Les rares discussions trouvées sur Internet ne parlent que de problèmes liés à l'upload de fichiers mais pour mon cas tout se passe en local sur le serveur. Il existe bien la fonction flock() mais elle ne répond pas à mes besoins et a des limitations quand au système de fichiers FAT (l'appli tourne aussi sur clé USB). A noter que le fichier XML est personnel à chaque utilisateur. Je désire donc savoir si il est nécessaire de sécuriser ce traitement ou si PHP ne permettra pas ce genre de problème. Si il faut sécuriser ce traitement, avez-vous des pistes à me fournir (on peut par exemple créer un fichier au début de la fonction, le supprimer à la fin et ne la lancer que si ce fichier est absent). Merci d'avance. |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 126 ![]() |
créer un fichier .lock
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Tout d'abord merci stealth35 pour ta réponse.
Apparemment, il s'agit d'émuler la fonction flock() de PHP en utilisant un fichier (un peu comme je le sous-entendais). Je ne sais pas si les fichiers .flock ont des méthodes spécifiques qui les gèrent (je sais qu'Apache les utilise mais PHP ?) mais j'ai déniché celà sur la toile : comment-utiliser-les-locks-avec-des-taches-cron-en-php Me conseilles-tu de partir dans cette direction ? Merci |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 126 ![]() |
un file_put_contents suffit, c'est un méthode toute simple
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Oui sauf qu'il ne s'agit pas d'une fonction atomique.
Il faudrait plutôt voir vers l'utilisation de rename(), quoique je ne suis pas certain de la conservation de cette propriété sous Windows. Mais peut être suis-je en train de me prendre la tête pour un fichier qui, après tout, n'est accessible que par son utilisateur attitré. Un simple fopen() en début de fonction suivi d'un fclose() et d'un unlink() en final devrait suffire pour ce cas. |
|
|
00
|
|
|
#6 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 126 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Ok, je suis peut-être un peu parano sur ce coup là. Je vais donc faire simple pour ce cas personnel. Mais je serais curieux de dénicher une solution universelle car, bien que rarement abordé, le sujet peut vite devenir épineux. En tout cas merci pour ton aide. |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : septembre 2010 Messages : 7 126 ![]() |
le sujet date
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Solution adoptée :
Un fichier A.TXT sera présent dans le dossier de l'utilisateur. Au début de la fonction on teste si B.TXT existe. Si il n'existe pas, on renomme A.TXT en B.TXT, on effectue les traitements et à la fin de la fonction on renomme B.TXT en A.TXT. Si il existe, la fonction prévient le script (renvoit d'une valeur). On temporise avant de la relancer. Pour éviter de boucler (au cas ou) on peut utiliser un compteur qui arrêtera l'appel au bout de n fois. |
|
|
00
|
|
|
#10 | |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 |
![]() ![]() Inscription : septembre 2010 Messages : 7 126 ![]() |
résolu par un flock, d'ailleurs pourquoi tu ne veut pas faire un flock ?
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
Premièrement flock() me fait peur car son utilisation implique certaines connaissances que je ne maîtrise pas ex :
Citation:
Deuxièmement, et toujours d'après la doc. officielle : Citation:
Je n'ose donc pas tenter le diable |
||
|
|
00
|
|
|
#13 |
![]() ![]() Inscription : septembre 2010 Messages : 7 126 ![]() |
je vois
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : septembre 2002 Messages : 25 ![]() |
En tout cas merci encore
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com