Sémaphore en php ? Comment regler ma Fatal Error ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Baltyre, 22 Février 2006.

  1. Baltyre
    Baltyre Nouveau WRInaute
    Inscrit:
    10 Décembre 2005
    Messages:
    14
    J'aime reçus:
    0
    J'ai tenté de faire un petit code pour banir les aspirateurs de site via le htaccess (j'aimerai si possible utiliser le moins possible ma bdd)

    Donc, pour gerer les acces simmultané en écriture au fichier, j'aimerai ajouté des sémaphores.
    J'ai essayé ca :

    <?
    $nowait = 0; /* initialisation */
    $id = sem_get(0xF00);
    sem_acquire($id); /* on bloque */
    $htaccess="\nDeny from ".$_SERVER["REMOTE_ADDR"];
    $fp = fopen(".htaccess","a");
    fputs($fp,$htaccess);
    fclose($fp);
    sem_release($id); /* on relache */
    ?>

    Mais visiblement ca ne marche pas, j'ai un :
    Fatal error: Call to undefined function: sem_get()

    Quelqu'un a une idée de la maniere dont je peut résoudre ce probleme ?
     
  2. Baltyre
    Baltyre Nouveau WRInaute
    Inscrit:
    10 Décembre 2005
    Messages:
    14
    J'aime reçus:
    0
    Arf, j'ai compris, pour activer le support des sémaphores il faut compiler PHP avec l'option --enable-sysvsem.
    Mouais bon ... y a pas un autre moyen de faire ?
     
  3. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 645
    J'aime reçus:
    38
    Bonsoir

    en PHP, la fonction flock($fp, $param), permet de faire un verrou de différents types, suivant la valeur de $param.

    Celà peut être un verrou en écritue ou en lecture, bloquant ou non bloquant, etc... sur le fichier dont le handle donné par fopen($filename, $rights), est: $fp

    Avec ça, tu peux, en associant un fichier réel d'enclenchement de la tâche ( s'il n'existe pas ) dont tu testes l'existence après avoir posé le verrou en mode bloquant sur un autre fichier verrou, dont le nom sera caractérisitique de la tâche à effectuer...

    Au global, donc, tu as:

    - $filename Un fichier dont tu connais le nom, d'après la tâche à effectuer ou ne pas effectuer,
    - $verrou Un fichier de verrouillage, dont le nom est déduit automatiquement de la tâche à effectuer ou ne pas effectuer.

    Voici l'algorithme:

    // Tache à effectuer ou non ?
    if(!file_exists($filename))
    { // Fichier n'existe pas, pose du verrou mode bloquant.
    if(!($fp_verrou = @fopen($verrou, "a"))
    { // Verrou apparemment posé.
    // Il faut attendre que le fichier $verrou
    // n'existe plus.
    while(file_exists($verrou))
    { sleep(2);
    }
    }
    else
    { // Pose du verrou.
    $param_bloquant = // Mode bloquant en écriture, voir PHP Manual...
    if([email protected]($fp_verrou, $param_bloquant))
    { // Verrou apparemment déjà posé,
    // Il faut attendre que le fichier verrou
    // n'existe plus.
    while(files_exists($verrou))
    { sleep(2);
    }
    }
    else
    { // Le verrou est posé correctement,
    // exécution de la tâche.
    //
    // Traitement de la tâche...
    // Au cours de cette tâche, le fichier
    // $filename est créé et alimenté
    // Eventuellement d'autres traitements
    // peuvent être faits.
    //
    // Fin de tâche, déverrouillage
    // du fichier verrou,
    // puis effacement du fichier verrou
    $param_debloquant = // ... Mode débloquant, Voir PHP Manual...
    @flock($fp_verrou, $param_debloquant);
    @flclose($fp_verrou);
    // Effacement du fichier verrou.
    @unlink($verrou);
    }
    }
    }
    else
    { // La tâche a déjà été effectuée entièrement,
    // Traitement complémentaire éventuel.
    }
    // ... Suite du script,
    // ou saut vers un autre script.


    J'ai mis au point un algorithme quasi équivalent à celui-là sur mon propre site, pour éviter les accès concurrentiels en écriture, lors de la mise à jour de la liste des Courses en début d'après-midi, ou lors de l'écriture de mes fichiers temporaires des résultats passés des Courses, pour chaque Courses consultées...

    L'algorithme ci-dessus, ne fonctionne que si la tâche à effecuer, est suffisament courte.

    Dans le cas contraire, il faut tester l'existence simultanée de $filename et $verrou, ou l'un ou l'autre, et faire les traitements ad hoc, tout en débloquant systématiquement $verrou après avoir créé $filename lors de l'entrée dans la tâche...

    Bien à toi.

    Jean-François
     
  4. Baltyre
    Baltyre Nouveau WRInaute
    Inscrit:
    10 Décembre 2005
    Messages:
    14
    J'aime reçus:
    0
    merci beaucoup.
     
Chargement...
Similar Threads - Sémaphore php regler Forum Date
En PHP : enregistrer un id de page/user variable. Développement d'un site Web ou d'une appli mobile Hier à 13:45
Indent en mode PHP ? Développement d'un site Web ou d'une appli mobile 9 Juin 2022
Arborescence de classes PHP et séquentialité. Développement d'un site Web ou d'une appli mobile 16 Mai 2022
Afficher des infos depuis plusieurs page en PHP Développement d'un site Web ou d'une appli mobile 23 Mars 2022
Sites de scripts PHP, jQuery, Ajax, etc. Le café de WebRankInfo 20 Mars 2022
Détecter arrêt user d'un script PHP ? Développement d'un site Web ou d'une appli mobile 28 Décembre 2021
sessions PHP sans cookies ? Développement d'un site Web ou d'une appli mobile 26 Décembre 2021
Afficher la dernière version d'un fichier php ? Développement d'un site Web ou d'une appli mobile 8 Novembre 2021
PHP / CURL : interrogation page tiers ne fonctionne plus Développement d'un site Web ou d'une appli mobile 2 Octobre 2021
Actualiser un script php toutes les 10 secondes Développement d'un site Web ou d'une appli mobile 6 Septembre 2021
PHP : problème de comparaison égalité dans boucle FOR avec incrément décimal de 0.1 Développement d'un site Web ou d'une appli mobile 26 Août 2021
Cache Etag nginx et PHP ? Administration d'un site Web 7 Août 2021
Fichier avec ou sans extension php pour le référencement Crawl et indexation Google, sitemaps 3 Août 2021
mon code ne fonctionne pas pour masquer les .php URL Rewriting et .htaccess 31 Juillet 2021
Malware S.Susp.PHP.gen... Administration d'un site Web 15 Juillet 2021
La fonction mail (PHP) ne passe pas ! Demandes d'avis et de conseils sur vos sites 28 Juin 2021
Fonction récursive PHP. Développement d'un site Web ou d'une appli mobile 24 Avril 2021
Redirections .htm en .php URL Rewriting et .htaccess 16 Mars 2021
URL avec et sans .php Développement d'un site Web ou d'une appli mobile 14 Mars 2021
Astuce [PHP] Récolter ville, pays du visiteur Développement d'un site Web ou d'une appli mobile 9 Mars 2021