Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2008 Teil von März

SELFHTML Forumsarchiv
Problemlösung Seite blockieren

Informationsseite
  1. Seite (PHP) Problemlösung Seite blockieren von Elli, 31. 03. 2008, 02:25
nach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Elli, 31. 03. 2008, 02:25

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


nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Felix Riesterer, 31. 03. 2008, 07:08

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:)

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Chris©, 31. 03. 2008, 08:23

»» 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©

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Felix Riesterer, 31. 03. 2008, 16:05

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:)

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Patrick Andrieu, 01. 04. 2008, 14:05

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?

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Elli, 31. 03. 2008, 11:48


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

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: suit, 31. 03. 2008, 14:09

»» 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

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Auge, 31. 03. 2008, 16:43

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

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: suit, 31. 03. 2008, 17:36

»» 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 ;)

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: ChrisB, 31. 03. 2008, 21:14

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

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: suit, 01. 04. 2008, 09:51

»» 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?

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: ChrisB, 01. 04. 2008, 10:09

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

nach obennach unten

Problemlösung Seite blockieren

Die folgende Nachricht zum Thema stammt von: Felix Riesterer, 31. 03. 2008, 16:08

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:)

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2008 Teil von März

© 1998-2006 Seite Impressum, Software: Classic Forum