base
portal
Suche:
Forum
Start
Neue Seite erstellen
Titel:
Mit denselben Befehlen wie für den Zugriff auf Datenbanken kann auf Seiten/Templates zugegriffen werden: <h2>Datei lesen</h2> <code> $inhalt=get "seite.htx"; </code> Liest den kompletten Inhalt der Datei <c>seite</c> in die Variable <c>$inhalt</c> ein. Die einzelnen Zeilen sind durch den Zeilentrenner <c>\n</c> getrennt. Eine Datei kann auch zeilenweise gelesen werden: <code> @inhalt=get "seite.htx"; </code> Liest den Inhalt der Seite <c>seite</c> in das Array <c>@inhalt</c> ein. Jedes Element des Arrays enthält nun eine Zeile, <c>$inhalt[0]</c> also die erste, <c>$inhalt[1]</c> die zweite usw. Die Zeilentrenner sind jeweils entfernt. <code> @inhalt=get "seite.htx", "raw"; </code> Belässt die Zeilentrenner <c>\n</c> am Ende jeder Zeile. <knowhow> Zeilen werden in Dateien durch den Zeilentrenner <c>\n</c> getrennt. In Perl und anderen Programmiersprachen muss man sich selbst darum kümmern, dass am Ende der Zeilen der Zeilentrenner geschrieben oder beim Einlesen entfernt wird. baseportal macht dies automatisch, so dass man sich normalerweise nicht um das Zeilenende kümmern muss. Will man die genaue Kontrolle über den Zeilentrenner haben, muss man den Parameter <c>raw</c> an die Befehle anhängen. baseportal liest und schreibt die Daten dann exakt so wie sie übergeben werden. </knowhow> <h2>Daten zu Datei hinzufügen</h2> <code> put $zusatz, "seite.htx"; </code> Fügt zur Seite <c>seite</c> den Inhalt der Variablen <c>$zusatz</c> hinzu. Existiert die Seite noch nicht, wird sie angelegt. Es können auch mehrere Zeilen auf einmal hinzugefügt werden, entweder durch eigenhändiges Hinzufügen des Zeilentrenners... <code> put "Erste Zeile\nZweite Zeile\nDritte Zeile", "seite.htx"; </code> ...oder durch Übergabe der einzelnen Zeilen... <code> put ["Erste Zeile", "Zweite Zeile", "Dritte Zeile"], "seite.htx"; </code> ...oder durch Übergabe eines Array-Verweises: <code> put \@zusatz, "seite.htx"; </code> Jedes Element des Arrays <c>@zusatz</c> entspricht einer Zeile. <code> put ["Eins", "Zwei", "Drei"], "seite.htx", "raw"; </code> Unterlässt das automatische Hinzufügen der Zeilentrenner, so dass tatsächlich "EinsZweiDrei" geschrieben wird und auch kein Zeilentrenner am Ende hinzugefüht wird. <h2>Inhalt einer Datei ändern</h2> <code> mod $inhalt_neu, "seite.htx"; </code> Ändert den Inhalt der Seite <c>seite</c> in den Inhalt der Variablen <c>$inhalt_neu</c>. Der alte Inhalt der Seite <c>seite</c> geht verloren. Ebenso wie beim <c>put</c> können mehrere Zeilen durch einen Array-Verweis übergeben werden und auch hier funktioniert das <c>raw</c>: <code> mod \@inhalt_neu, "seite.htx", "raw"; </code> Die Zeilen des Arrays <c>@inhalt_neu</c> ersetzen den ursprünglichen Inhalt der Seite <c>seite</c>. Zeilentrenner werden dabei nicht automatisch hinzugefügt. <h2>Mit gleichzeitigen Zugriffen umgehen</h2> Oft wird der Inhalt einer Datei gelesen, verändert und dann wieder zurückgeschrieben. Was auf den ersten Blick oder bei einem lokalen Einzelplatzrechner funktioniert, wird bei Web-Anwendungen früher oder später zu Problemen führen, da mehrere Nutzer <i>gleichzeitig</i> auf die Daten zugreifen können. baseportal erlaubt zur Lösung dieses Problems, dem Befehl <c>mod</c> einen Perl-Code zu übergeben, der mit dem Inhalt der Datei ausgeführt wird. Das Ergebnis des Codes wird in die Datei geschrieben. Es wird dabei sichergestellt, dass während des gesamten Vorgangs kein anderer auf die Datei zugreift. Der Inhalt der Datei wird in <c>$_</c> bereitgestellt - der Rückgabewert des Codes wird zum neuen Inhalt. <code> mod sub { ++$_ }, "zaehler.htx"; </code> Liest den Inhalt der Seite <c>zaehler</c> ein, erhöht ihn um 1 und schreibt den neuen Wert zurück. Dieser Code ist "thread-safe". Durch Anfügen des Parameters <c>line</c> wird der Code zeilenweise durchlaufen. <c>$_</c> enthält dann den Wert der jeweiligen Zeile: <code> mod sub { $cnt++; "$cnt. $_" }, "zeilen.htx", "line"; </code> Numeriert die Zeilen der Seite <c>zeilen</c> durch. Bevor nicht die komplette Datei durchgearbeitet wurde kann niemand auf sie zugreifen. Durch den Parameter <c>all</c> wird die Seite komplett zeilenweise eingelesen und im Array <c>@_</c> bereitgestellt: <code> mod sub { reverse @_ }, "zeilen.htx", "all"; </code> Dreht die Reihenfolge aller Zeilen um. <knowhow> Hier ein Beispiel für ein Zählprogramm, wie man es <b>nicht</b> machen sollte: <div class=info><pre><tt style="font-size:110%"><perl> $cnt=get "zaehler.htx"; # Zähler einlesen $cnt++; # Zähler um 1 erhöhen put "zaehler.htx", $cnt; # Zähler zurückschreiben </perl> </tt></pre></div> Führt man dieses Programm hintereinander aus, wird es zunächst aussehen, als ob es problemlos funktionieren würde. Was passiert aber, wenn das Programm nicht hintereinander, sondern von verschiedenen Nutzern <i>gleichzeitig</i> ausgeführt wird? Dazu muss man wissen, wie ein Computer mit mehreren gleichzeitigen Anfragen umgeht: Er "verschränkt" sie ineinander und führt von jeder Anfrage nur einen Teil aus, geht dann zur nächsten Anfrage, führt wieder nur einen Teil aus, geht zur nächsten usw. <p>Folgendes könnte also passieren:</p> <ul type=square> <li>Die Nutzer <c>A</c> und <c>B</c> greifen gleichzeitig auf eine Seite zu, in der das Zählprogramm enthalten ist. <li>Der Computer bearbeitet Nutzer <c>A</c> und liest den Wert des Zählers, ein z.B. 0 <li>Jetzt bearbeitet der Computer Nutzer <c>B</c> und liest den Wert des Zählers ein: 0 (!!) <li>Jetzt ist wieder Nutzer <c>A</c> an der Reihe - der Computer erhöht den Wert der Variablen <c>$cnt</c> (von Nutzer <c>A</c>): 1 <li>Auch bei Nutzer <c>B</c> erhöht der Computer den Wert der Variablen <c>$cnt</c> (von Nutzer <c>B</c>): 1 (!!) <li>Nutzer <c>A</c> ist dran und der Computer speichert <c>$cnt</c> (von Nutzer <c>A</c>): 1 <li>Nutzer <c>B</c> ist dran und der Computer speichert <c>$cnt</c> (von Nutzer <c>B</c>): 1 (!!) </ul> <br>Obwohl 2 Nutzer darauf zugegriffen haben, wurde der Zähler nur um 1 erhöht! </knowhow> <h2>Datei löschen</h2> <code> del "seite.htx"; </code> Löscht die Seite <c>seite</c>.
Name:
Passwort:
Stichworte:
Version:
1
2
3 Angebot:
Alle
Nur Miete / Lizenz
Nur Miete / Lizenz professional
Nur Miete
Nur Miete smart + pro
Nur Miete smart + pro / Lizenz
Nur Miete pro
Nur Miete ab pure2, smart2, pro1
Nur Lizenz
Nur Lizenz professional
Nur Kostenlos
Ohne Änderungen zurück zur Seite
-
+
©
baseportal
GmbH. Alle Rechte vorbehalten.
powered in 0.02s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!