Elli: Problemlösung Seite blockieren

Hi,

ich habe eine Funktion geschrieben die ein Script sperrt, sobald gewisse Faktoren eintreten. Aber diese Funktion muss auch weiterhin aktiv bleiben, weil es in einer Seite eingebunden ist und es sonst zu Komplikatonen kommt, da die Funktion Teil einer Klasse ist.

Das Problem daran ist, das die eigentliche Sperrfunktion aktiv ist, sobald die Regeln zutreffen, will sagen die Prüfroutinen und Berechnungen müssen nach einer Sperrung auch weiterhin Ihr Werk verrichten.

Dabei wäre am Anfang der Funktion ein kleiner Hinweis hilfreich.

zb. if(bereitsgesperrt){lass_den_anderen_quatsch_und_fuehre_sofort_die sperrfunktion_aus();}

Nur woher nehme ich die Info ob bereits ein vorheriger Durchlauf die Sperrung aktiviert hat?

Folgende Lösungen dachte ich mir:

  • Beim ersten Sperren leere  Datei erstellen. zb BLOCKED.txt

Nachteil:

1. Dann muss die Sperrfunktion jedesmal(meisstens unnötig) nachfragen ob die Datei vorhanden ist.

2. Es wird eine externe Datei erzeugt, das auch noch Schreibrechte vom Script verlangt.(nicht immer unbedingt gewollt)

  • Komplette Seite sperren (zb. htaccess)
    Geht nicht, Class wird eingebunden in Seiten, die unbedingt aktiv bleiben müssen.

Wenn euch nichts Besseres einfällt werde ich die erste Lösung wählen (die mir aber nicht unbedingt zusagt). Nur finde ich, sollte eine Funktion nicht in Anhängigkeiten mit seperaten Dateien geraten.

Elli

  1. Liebe(r) Elli,

    zb. if(bereitsgesperrt){lass_den_anderen_quatsch_und_fuehre_sofort_die sperrfunktion_aus();}

    definiere doch eine globale Variable über das superglobale Array $GLOBALS!

    // irgendwo passiert dieses:  
    $GLOBALS['gesperrt'] = true;  
      
    // Prüfung auf Sperrung  
    if ($GLOBALS['gesperrt']) {lass_den_anderen_quatsch_und_fuehre_sofort_die sperrfunktion_aus();}
    

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Liebe(r) Felix,  *gg*

      // Prüfung auf Sperrung
      if ($GLOBALS['gesperrt']) {lass_den_anderen_quatsch_und_fuehre_sofort_die sperrfunktion_aus();}[/code]

      sollte das dann nicht besser

      if ( isset ( $GLOBALS['gesperrt'] ) and $GLOBALS['gesperrt'] )

      heißen?
      Man muss doch keine Notices erzwingen, wenn man sie gar nicht haben will.

      LG
      Chris©

      1. Lieber Chris©,

        Liebe(r) Felix,  *gg*

        LOL! Aber bei "Elli" kann es nun wirklich beiderlei Geschlecht ("Elias", "Elisabeth") sein...

        sollte das dann nicht besser

        if ( isset ( $GLOBALS['gesperrt'] ) and $GLOBALS['gesperrt'] )

        heißen?
        Man muss doch keine Notices erzwingen, wenn man sie gar nicht haben will.

        Das kommt ganz darauf an, ob diese Variable (besser: dieser Index) zuvor korrekt initialisiert worden ist. Wer "schlampig" schreibt, der sollte unbedingt Deine Version benutzen - da hast Du absolut Recht!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Hallo Felix!

          Lieber Chris©,

          Liebe(r) Felix,  *gg*

          LOL! Aber bei "Elli" kann es nun wirklich beiderlei Geschlecht ("Elias", "Elisabeth") sein...

          Chris könnte auch Christine oder Christiane sein... ;)

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --

          _ - jenseits vom delirium - _
          [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          Nichts ist unmöglich? Doch!
          Heute schon gegökt?
    2. Hi Felix,

      definiere doch eine globale Variable über das superglobale Array $GLOBALS!

      Nein, dann würde auch eine normale Variable reichen. Aber es geht darum,ähnlich wie bei einem Counter, dass die nächsten Zugriffe auf dieses Script, egal von wem blockiert werden. Un das wollte ich möglichst ohne Extra-Datei lösen.

      Gruss
      Elli

      1. Nein, dann würde auch eine normale Variable reichen. Aber es geht darum,ähnlich wie bei einem Counter, dass die nächsten Zugriffe auf dieses Script, egal von wem blockiert werden. Un das wollte ich möglichst ohne Extra-Datei lösen.

        bei einem aufruf von egal von wem hilft dir eine "normale" variable nicht weiter da diese eben NICHT global ist - wenn das script 2x läuft hast du schon ein problem damit - genau dafür sind globals da

        einfach runterscrollen zum global keyword
        http://www.php.net/manual/en/language.variables.scope.php

        zur verständis, das enspricht etwa den application() objekt in asp/vb und ist GENAU für diesen zweck gedacht

        1. Hallo

          ... Aber es geht darum,ähnlich wie bei einem Counter, dass die nächsten Zugriffe auf dieses Script, egal von wem blockiert werden. ...

          bei einem aufruf von egal von wem hilft dir eine "normale" variable nicht weiter da diese eben NICHT global ist - wenn das script 2x läuft hast du schon ein problem damit - genau dafür sind globals da

          Du meinst, eine im Skriptlauf 1 generierte superglobale Variable ist im Skriptlauf 2 noch vorhanden?

          einfach runterscrollen zum global keyword
          http://www.php.net/manual/en/language.variables.scope.php

          zur verständis, das enspricht etwa den application() objekt in asp/vb und ist GENAU für diesen zweck gedacht

          Es (global) ist dazu gedacht, eine Variable für den _gegenwärtigen_Skriptlauf_ zu globalisieren.

          Wenn ein Wert in einem anderen Skriptlauf zur Verfügung stehen soll, muss er auf dem Server gespeichert werden. Soll dies dauerhaft geschehen, bieten sich Dateien oder Datenbanken an, soll der Wert nur in dieser Sitzung zur Verfügung stehen, benutze man eine Session. Letzteres gilt auch, wenn der einzelne Benutzer bei erneuten Seitenaufrufen wiedererkannt werden soll.

          Tschö, Auge

          --
          Die deutschen Interessen werden am Liechtenstein verteidigt.
          Veranstaltungsdatenbank Vdb 0.2
          1. Du meinst, eine im Skriptlauf 1 generierte superglobale Variable ist im Skriptlauf 2 noch vorhanden?

            nein, ist sie natürlich nicht - hab leider einen satz und einen link verschluckt ;)

            http://www.leosingleton.com/projects/code/phpapp/
            hier wird beschrieben, wir man applikationsvariablen mit php simuliert

            Es (global) ist dazu gedacht, eine Variable für den _gegenwärtigen_Skriptlauf_ zu globalisieren.

            ist mir klar, siehe oben ;)

            1. Hi,

              http://www.leosingleton.com/projects/code/phpapp/
              hier wird beschrieben, wir man applikationsvariablen mit php simuliert

              Da schreibt jemand froehlich von diversen Scriptinstanzen in Dateien, ohne sich im geringsten Gedanken um (F)Locking zu machen ...

              MfG ChrisB

              1. Hi,

                http://www.leosingleton.com/projects/code/phpapp/
                hier wird beschrieben, wir man applikationsvariablen mit php simuliert

                Da schreibt jemand froehlich von diversen Scriptinstanzen in Dateien, ohne sich im geringsten Gedanken um (F)Locking zu machen ...

                MfG ChrisB

                da kann ich dir nicht ganz folgen - im genannten beispiel wird ja nicht die datei selbst zum sperren des scripts verwendet sondern die darin abgelegten werden - welchen sinn sollte es also haben, dass ein script eine variable da drinnen erstellt und ein anderes script, welches wissen möchte ob sie gesetzt ist oder nicht (oder eine andere instanz des scripts) nicht darauf zugreifen darf?

                1. Hi,

                  http://www.leosingleton.com/projects/code/phpapp/
                  hier wird beschrieben, wir man applikationsvariablen mit php simuliert

                  Da schreibt jemand froehlich von diversen Scriptinstanzen in Dateien, ohne sich im geringsten Gedanken um (F)Locking zu machen ...

                  da kann ich dir nicht ganz folgen - im genannten beispiel wird ja nicht die datei selbst zum sperren des scripts verwendet sondern die darin abgelegten werden

                  Hu?

                  Es geht mir hier nicht um den konkreten Fall, "Sperren" der Webseite - sondern darum, dass da sowas wie Sessions versucht wird nachzubasteln, nur mit nur einer "Session" fuer alle Scriptinstanzen und Clients -

                  welchen sinn sollte es also haben, dass ein script eine variable da drinnen erstellt und ein anderes script, welches wissen möchte ob sie gesetzt ist oder nicht (oder eine andere instanz des scripts) nicht darauf zugreifen darf?

                  D'oh!

                  Ich meine nicht sperren im Sinne von nicht lesen duerfen - sondern von nicht (neue/geaenderte) Daten *schreiben* duerfen, so lange noch eine andere Scriptinstanz die Speicherungsdatei benutzt.

                  Eben genau das Szenario, wegen welchem man normalerweise flock einsetzt - wenn man es nicht, wie hier, vergisst.

                  MfG ChrisB

      2. Liebe(r) Elli,

        da Chris sich über das (r) bereits amüsiert hat, soll ich nach wie vor dabei bleiben?

        ähnlich wie bei einem Counter, dass die nächsten Zugriffe auf dieses Script, egal von wem blockiert werden.

        Das geht tatsächlich nur mit einem Eintrag in etwas "bleibendem", wie etwa einer Datei, oder einer Datenbank. Der Einfachheit halber kannst Du natürlich zu diesem Zweck auf das Vorhandensein einer bestimmten Datei prüfen, oder aber in einer anderen Datei einen entsprechenden Eintrag vornehmen. Oder eben eine Datenbank benutzen, wenn Du ohnehin bereits eine nutzt.

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)