IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Synchronisation en php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 46
    Par défaut Synchronisation en php
    Bonjour,

    Je suis actuellement en train de développer un site internet. J'ai mon fichier html dans lequel je charge un fichier javascript.
    Lorsque je clique sur un bouton sur ma page, le javascript envoie les données d'un formulaire à un script php qui est chargé de faire plusieurs choses avec.
    J'aimerais que, si le script php n'est pas déjà exécuté par quelqu'un d'autre, celui-ci puisse se lancer immédiatement. Mais s'il est déjà exécuté par quelqu'un d'autre, j'aimerais que le script attende avant de s'exécuter.
    J'ai donc pensé le faire avec un sémaphore, mais ce n'est pas la bonne idée car il est utilisé dans un même processus PHP et rien n'empêche un autre processus de se lancer pour exécuter à nouveau le script.
    Auriez vous une idée pour résoudre mon problème ?

    Cordialement

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Je suis curieux : qu'est-ce qui fait que tu doives programmer cela ? Une page web est prévue pour être multi-utilisateurs et du côté serveur, logiquement, chaque exécution d'un script PHP devrait être isolé (le script exécuté par l'utilisateur A ne devrait pas impacter l'exécution du même script par l'utilisateur B). Je me demande donc pourquoi tu as ce besoin qui aura un impact immédiat sur la vitesse de ton application : tous les utilisateurs seront bloqués tant que le script de l'utilisateur A n'est pas terminé. Ensuite, comment vois-tu la chose ? Les autres utilisateurs vont devoir reposter le formulaire et le premier qui passe bloque les autres ???

    Si j'avais ton besoin, ce que je ferais, c'est de créer un fichier sur mon site, p.ex. "/tmp/is_running". A l'exécution de mon script je vérifierai la présence du fichier. S'il est là, je ferais un die('Sorry already busy'). A la fin de l'exécution du script, je ferais un unlink('/tmp/is_running'). Mais tu l'auras compris, à priori, je ne ferais pas du tout cela parce que l'impact sur mon application sera désastreux en terme de concurrence et de rapidité d'exécution.

    Bonne soirée.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Expert Middleware
    Inscrit en
    Septembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Expert Middleware

    Informations forums :
    Inscription : Septembre 2006
    Messages : 75
    Par défaut
    Bonjour,

    effectivement avec un tel système j'espère qu'il n'y aura pas beaucoup d'utilisateur sinon ton système ne tiendra pas longtemps.

    Je serais également curieux de savoir quel est la raison qui te pousse a faire ça. Par contre, pour résoudre ton problème, tu peux soit passer par des fichiers que tu traites de manière asynchrone ou encore mieux par files de message comme activeMQ ou rabbitMQ.

    Syberi@

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 46
    Par défaut
    Bonjour,

    En fait j'ai une page web sur laquelle il y a une zone. Les utilisateurs peuvent déposer un carré dans cette zone. Une fois le carré placé à l'endroit désirer, l'utilisateur valide le formulaire. Une requête est envoyée en Ajax au serveur pour sauvegarder les coordonnées du carré dans la base de donnée.
    Cependant, les coordonnées du carré sont sauvegardées seulement s'il n'y a pas déjà un carré qui est placé au même endroit que le carré de l'utilisateur.
    (Il y a une vérification des coordonnées des carrés avant sauvegarde des coordonnées du nouveau carré)
    Mais cela pose un problème quand 2 formulaires sont envoyés en même temps => il y a empiétement entre les 2 carrés.
    C'est ce problème d’empiétement que j'aimerais supprimer.

    Je ne sais pas trop comment gérer ce problème. Auriez vous une idée ?

    Cordialement

  5. #5
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonsoir

    La première chose qui me vient à l'esprit : avant de lancer la sauvegarde, tu fais d'abord une requête Ajax "Est-ce que quelqu'un a déjà sauvé le carré ?"

    Si la réponse est Non, la requête Ajax va retourner un "Super, vous pouvez sauvegarder"
    Si la réponse est Oui, la requête Ajax se termine avec un "Oups, désolé, quelqu'un vous a devancé".

    A dire vrai, si le contrôle retourne Non (personne n'a encore sauvé); du coup, tu peux même sauver dans le même temps.

    Tu as donc

    1. une requête Ajax pour la sauvegarde
    2. un contrôle php; côté serveur donc, qui vérifie d'abord si la sauvegarde peut être faite
    3. la réponse de la requête ajax qui sera "Super" ou "Oups".

    Est-ce que cela te parle ? J'ai l'impression que cela répond à ton besoin; du moins de ce que j'en ai compris.

    Bonne soirée.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 46
    Par défaut
    Bonsoir,
    Oui cela me parle très bien car c'est exactement ce que j'ai fait. Cependant, si je lance mes 2 formulaires en même temps, les 2 carrés arrivent à être sauvegardés quand même.
    Auriez vous une autre idée ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2008, 22h02
  2. [MySQL] Synchronisation entre Outlook et agenda PHP / MySQL
    Par joss91 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/06/2008, 14h31
  3. [MySQL] Synchroniser php et MySQL sans rafraichissement de la page
    Par Khleo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/01/2008, 08h10
  4. [MySQL] Synchronisation de base de données MySQL en PHP
    Par takepaf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/07/2007, 11h23
  5. Synchronisation en PHP
    Par LordBob dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2005, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo