[PHP5] Accès concurrents et DOM - Les accès concurrents en XML avec DOM

Salut les clubiciens et clubiciennes,

Je voulais connaitre votre avis sur la meilleur façon de gérer les accès concurrents dans les fichiers XML qu’on accède / modifie avec DOM de PHP 5 !

En faite c’est pour un forum que j’ai créé avec xml et DOM au début pour m’entrainer, et maintenant je trouve que c’est une bonne idée de forum “pret à l’emploi”, c-à-d on télécharge, on copie et ça marche, je trouve que c’est un bon concept pour les novices qui veulent un forum sans rien avoir a configurer !!

Comme j’ai jamais trop reflechis à la façon d’aborder les accès concurrents en PHP, je vous demande votre avis :wink:

MERCI

ps : gardez à l’esprit que c’est pour un forum “pret a l’emploi” et donc les solutions trop spécifique ou qui demande des notions spéciales à l’utilisateur sont pas top, une solution en PHP serait mieux

quand tu parle d’accès concurrents, tu entends quoi par là?

Lecture de fichier XML ? Pas de problèmes si ces fichiers sont constants (pas de modification, etc).

Par contre, je le dis tout de suite : DOM c’est pas le plus rapide.

oui, lecture aucun problème, mais quand deux processus PHP écrivent dans le meme fichier ca pose probleme :

dom charge le document xml
je modifie le document xml “dans la mémoire”
j’écris le fichier xml (ecrasement)

maintenant, si entre le moment ou je charge et ou j’écris, un autre processus PHP vient modifier le meme fichier xml, bah la y va y avoir des pertes d’informations.

DOM pas rapide oui mais SAX est pas disponible en natif dans PHP5. Y a que simpleXML, peut etre est-il plus rapide ?

Je vois ton problème, et je doute de sa solvabilité (pas moyen de poser un verrou, puis aussi DOM n’est peut-être pas trop accès concurrent?). As tu envisagé les bases de données? (qui font ça en fait)

Sinon l’idée serait de poser un verrou dés lors que tu as ouvert le fichier en écriture, et attendre que ce verrou soit levé.

Avec des threads poxid, cela donnerait un truc du genre :

pthread_mutex_lock(&file_mutex);
// charge le fichier
// fait mumuse avec
// fin
pthread_mutex_unlock(&file_mutex);

Une thread serait dans ton cas un client.

Bien sûr, php ne dispose pas de verrou, et encore moins de mise en attente (c’est pas non plus un langage multi threadé).

Tu peux éventuellement tenter des trucs genre :

// pose du verrou
while (file_exists('lock')) sleep(100); 
touch('lock');
// truc XML
// unlock
unlink('lock');

C’est pas garanti être mieux ceci dit.

oui j’ai lu une solution similaire, mais je croyais que PHP disposais de plus d’outil pour gérer ce genre de problème

la solution que j’ai lu, si ca peut aider

merci pour ton aide ^^

Je pense qu’une BDD serait mieux que DOM, mais ce n’est que mon avis (parser un document XML à chaque fois? ça va flinguer le serveur)

c’est vraiment plus rapide une base de données que d’utiliser des fonctions de php ? :frowning:

y a pas de test de dom pour me faire une idée ?

Une BDD est prévue pour ce genre de cas :slight_smile: c’est extérieur à php, et surtout DOM recharge tout le fichier XML, pour y faire une ou deux modifications. Plus ton fichier XML est gros, plus il mettra du temps à le charger, et le modifier.

A contrario, ajouter dans une base de données, c’est quasi linéaire.

oui j’avais deja pris conscience du problème ^^

je m’etais dis qu’en créant un fichier xml tout les 10 topics par exemples ca limitait les chargements en mémoire :stuck_out_tongue:

c’est quoi l’interet de DOM PHP5 si c’est aussi limité ? a faire une configuration d’application en xml au lieu d’une série de variable dans un .php ?

Pour travailler sur des fichiers XML :slight_smile:

Mais si tu dois modifier le fichier ç chaque fois, voilà quoi…

Tout ce bordel dépend de ce que tu vas faire avec.

ok merci