Strukturen für PHP-Dateien
Vorbemerkung
PHP-Dateien können sehr unterschiedlich aufgebaut sein. Damit eine PHP-Datei mit dem Redaktionssystem von "zac4web" bearbeitet werden kann, muss die Datei abhängig vom Speicherort der aktiven Datei innerhalb des "zac4web"-Projekts immer genau definierte Strukturen einhalten. Diese geforderten Strukturen sind unabhängig davon, ob der Redakteur innerhalb des "zac4web"-Projekts PHP-Code schreiben darf oder nicht.
Wenn abweichende Strukturen für eine Datei geplant sind, muss die Datei offline (z.B. mit einem einfachen Text-Editor) geschrieben und anschließend hochgeladen werden. Nur wenn der Upload mit den System-Formularen durchgeführt wird, kann "zac4web" den Inhalt der hochgeladenen Datei vor der Speicherung der Datei prüfen.
Lädt ein Redakteur, der innerhalb des "zac4web"-Projekts PHP-Code erstellen oder bearbeiten darf, eine Datei hoch, wird bei der Aktion "Ersetzen einer Datei durch Upload" die hochgeladene Datei ungeprüft gespeichert und beim Hochladen einer neuen Datei nur der Beginn und das Ende einer Datei geprüft. Es wird davon ausgegangen, dass Personen, die innerhalb eines "zac4web"-Projekts PHP-Code erstellen und bearbeiten dürfen, darauf achten, dass die Dateien, die sie hochladen, korrekt aufgebaut sind und keinen schädlichen Code enthalten. Die Prüfung erfolgt beim Hochladen einer zusätzlichen Datei lediglich deshalb, weil einige Zeilen aus dem ersten PHP-Block mit hoher Wahrscheinlichkeit an den Speicherort der Datei innerhalb des "zac4web"-Projekts angepasst werden müssen und die anderen Informationen ausgelesen werden müssen, die unverändert übernommen werden sollen.
Wenn ein Mitglied mit Redaktionsrechten innerhalb eines "zac4web"-Projekts keinen PHP-Code schreiben darf, darf es formularbasiert nur zusätzliche Dateien hochladen. Die hochgeladene Datei muss mit den vorgeschriebenen PHP-Abschnitten beginnen und enden. Sofern Anfang und Ende der hochgeladenen Datei korrekt aufgebaut sind, werden alle Zeilen, die dazwischen notiert sind, daraufhin überprüft, ob sie eine Zeichenfolge enthalten, die auf das Öffnen oder Schließen eines PHP-Abschnitts hinweisen. Entdeckt "zac4web" eine solche Zeichenfolge, wird der Inhalt aus der hochgeladene Datei nicht permanent auf dem PHP-Server gespeichert, es sei denn, alle entdeckten kritischen Zeichenfolgen gehören zu einzeiligen PHP-Abschnitten, die wie folgt aufgebaut sind: "<?php //<block>:... ?>". Für "..." dürfen beliebige Zeichenfolgen notiert sein. Nur derartige PHP-Abschnitte sind zugelassen. Denn "zac4web" verwendet diese einzeiligen PHP-Abschnitte, um dem Redaktionssystem anzuzeigen, wie die nachfolgenden Inhalte für das Redaktionsformular aufzubereiten sind.
Um Wiederholungen in den verschiedenen Informationsseiten zu vermeiden, wurden die Informationen, wie die Dateien mit dem Redaktionssystem manipuliert und welche Blöcke mit dem Redaktionsformular in die Dateien eingefügt werden können, ausgelagert in die Seiten Seiten erstellen/bearbeiten - Optionen und Ablauf, Seiten erstellen/bearbeiten - Redaktionsformular und Abbildungen zu den verschiedenen Knotentypen im Redaktionsformular.
Dateiarten, die "zac4web" unterscheidet
"zac4web" untergliedert die Dateien, die mit dem Redaktionsformular bearbeitet oder formularbasiert hochgeladen werden können, anhand des Dateiaufbaus zunächst einmal in aufrufbare Dateien und sogenannte "nicht-aufrufbare" Dateien.
- Inhaltsseiten können nahezu jede beliebige Art von Inhalt enthalten. Lediglich die Blöcke, die nur für Arbeitsblätter vorgesehen sind, dürfen nicht enthalten sein. Die Index-Dateien gehören von der Dateiart her zu den Inhaltsseiten. Aus allen Inhaltsseiten außer den Index-Dateien können Arbeitsbätter - Typ Redaktion erzeugt werden. "Arbeitsblätter - Typ Redaktion" können ebenfalls mit dem Redaktionsformular von "zac4web" bearbeitet werden.
- Gliederungsseiten sind technisch gesehen "reduzierte" Inhaltsseiten. Sie sind vorwiegend für Linklisten vorgesehen, und wurden eingeführt, damit jede Datei mit nur wenigen Klicks erreichbar ist und die Navigationsmenüs trotzdem übersichtlich bleiben können. Für Gliederungsseiten ist nicht vorgesehen, dass in ihnen Formulare oder Abschnitte mit Bildern vorhanden sind.
- Formulare sind eine noch speziellere Variante der Inhaltsseiten. Der Inhalt von Formularen besteht aus Sicht des Redaktionssystems nur aus einem Block des Typs Formular mit den darin erlaubten Kindelementen. Nur aus Dateien der Dateiart Formular können formularbasiert Umfragen und Arbeitsblätter - Typ Fragebogen erzeugt werden.
- Eine Zieldateien für AJAX-Befehl ist dagegen keine Variante der Inhaltsseiten. Sie weist im einleitenden PHP-Block eine völlig abweichende Struktur auf und endet mit einem anderen PHP-Block. Dies liegt daran, dass beim Aufruf einer Zieldatei für AJAX-Befehl die erzeugten Inhalte vom Browser innerhalb des Inhaltsbereichs einer Seite ausgegeben werden sollen, die bereits im Browser angezeigt wird. Die Seitenstruktur mit der Logo-Zeile und den Navigationsleisten braucht also nicht mehr erzeugt zu werden.
- "PHP-Skripte - für Funktionen", "PHP-Skripte - für Variablen" und "PHP-Skripte - für Konstanten" unterscheiden sich aus Sicht des Redaktionssystems nur anhand des Ordners, in dem sie gespeichert sind. Innerhalb dieser Dateien dürfen nur PHP-Blöcke enthalten sein. Daher ist für die Erstellung und Bearbeitung dieser Dateien mit dem Redaktionssystem das Redaktionsrecht "php" zwingend erforderlich.
Die Untergliederung in drei verschiedene Dateiarten dient nur dazu, innerhalb eines "zac4web"-Projekts entsprechende Inhalte geordnet speichern zu können. Außerdem dürfen Variablen mehrfach inkludiert werden und ihre Werte während der Skriptausführung verändert werden, wohingegen Funktionen und Konstanten nur einmal innerhalb eines Skriptaufrufs definiert werden dürfen. "PHP-Skripte - für Funktionen" und "PHP-Skripte - für Konstanten" sollten daher nur mit einem der beiden PHP-Befehle include_once() oder require_once() eingebunden werden, während sich für Variablen die Einbindung mit den Befehlen include() und require() empfiehlt. - Dateien des Typs "PHP-Skript - für gemischten Inhalt" dürfen die gleichen Inhalte enthalten wie "Inhaltsseiten".
Auch für "PHP-Skripte - für gemischten Inhalt" gilt, dass nur die Personen, denen das Redaktionsrecht "php" zugewiesen wurde, PHP-Blöcke erstellen und bearbeiten dürfen. In diesen PHP-Blöcken könnten auch Funktionen oder Konstanten definiert werden. Doch sollte darauf verzichtet werden und die entsprechenden Befehle in eigenständige PHP-Skripte ausgelagert werden, welche von dem "PHP-Skript - für gemischten Inhalt" mit include_once() oder require_once() inkludiert werden.
Das "PHP-Skript - für gemischten Inhalt" darf, wenn in ihm selber keine Funktionen oder Konstanten definiert werden, während einer Skriptausführung mit den Befehlen include() und require() beliebig oft eingebunden werden.
Strukturen für die Dateiarten
Struktur für Inhaltsseiten, Gliederungsseiten und Formulare
Inhaltsseiten, Gliederungsseiten und Formulare müssen - damit sie mit dem Redaktionssystem von "zac4web" bearbeitet werden können - immer mit einem php-Abschnitt beginnen, in dem einige Konstanten und die sogenannten "Kopf-Variablen" stehen, die für die Ausgabensteuerung benötigt werden. Auch für das formularbasierte Hochladen zusätzlicher Dateien muss der erste php-Abschnitt entsprechend aufgebaut sein.
Etliche der Kopf-Variablen, die in diesem ersten PHP-Abschnitt deklariert werden können, sind fakultativ. Fehlen sie, verwendet das System zur Ausgabensteuerung Standardwerte. Sofern den Konstanten und Variablen als Werte Zeichenfolgen (Dateityp: String) zugewiesen werden, müssen die Zeichenfolgen in Apostrophs stehen und nicht in doppelten Anführungszeichen.
Wenn die Datei bearbeitet oder hochgeladen werden soll, versucht das System, aus diesem Abschnitt die Werte der Konstanten und Variablen auszulesen. Wenn Zeilen mit Variablen, die fakultativ sind, in der Datei fehlen, werden im Bearbeitungsformular die Standardwerte eingetragen bzw. markiert. Fehlen allerdings die Pflichtangaben oder ist die Struktur für eine Zeile falsch, hört das System auf, den weiteren Inhalt der Datei für die Bearbeitung aufzubereiten und meldet, dass die Datei nicht mit dem Redaktionsformular bearbeitet bzw. hochgeladen werden kann.
Der erste php-Abschnitt ist wie folgt aufgebaut:
- Die erste Zeile der Datei muss die folgende Zeichenfolge enthalten:
<?php
wobei vor dem Zeichen < kein anderes Zeichen stehen darf, auch kein Leerzeichen. - Danach werden zunächst die Konstanten definiert.
- zac4web_pfad
Der Wert ist entweder eine leere Zeichenkette '' oder enthält ein Vielfaches der Zeichenkette '../'. Jedes ../ steht für eine Verzeichnisebene innerhalb des Dateipfades ab dem Wurzelverzeichnis des "zac4web"-Projekts. Diese Konstante wird immer dann benötigt, wenn eine anderes Skript inkludiert werden muss oder der Pfad für eine Dateimanagement-Aktion erstellt werden muss. - zac4web_bereich
Diese Zeichenfolge gibt an, zu welchem Bereich die Datei gehört. Damit wird festgelegt, für welchen Bereich die Zugriffsrechte des Aufrufers ermittelt werden müssen, wenn durch die Variable $pruefen_mitglied innerhalb der Kopfvariablen das Ermitteln der Zugriffsrechte gefordert wird. Außerdem wird damit gesteuert, welche Navigationsdateien für die Navigationsspalten eingebunden werden, wenn die Datei aufgerufen wird und die Navigationsspalte angezeigt wird / bzw. welches Navigationsmenü geöffnet ist, wenn die Gesamtnavigation aufgerufen wird. - zac4web_seiten_autor
Dieser Konstanten wird in der Regel als Wert der Namen des Mitglieds zugewiesen, welches die Datei als letztes formularbasiert bearbeitet hat. Nur wenn das Mitglied Bereichsadministrator ist oder das Redaktionsrecht "php" besitzt, sind andere Werte (z.B. "System") möglich. - zac4web_datei_datum
Im Regelfall wird der Konstanten als Wert der Zeitpunkt (Format: Tag.Monat.Jahr) zugewiesen, zu dem die Datei als letztes formularbasiert bearbeitet wurde. Wenn der letzte Redakteur der Seite Administratorrechte im Bereich besaß, konnte auch die Zeichenfolge "auto-wert" zugeordnet werden. Bei diesem Wert wird bei der Ausgabe der Datei im Browser in der Fußzeile statt des Speicherzeitpunkts jeweils der Zeitpunkt der Ausgabe angezeigt. Die Angabe "auto-wert" ist vorgesehen für solche Seiten, bei denen "zac4web" bei jedem Seitenaufruf mindestens einen Teil der Inhalte für die Ausgabe neu ermitteln soll.
- zac4web_pfad
- Nun folgen die Zeilen mit den Variablen zur Steuerung der Ausgabe.
Die Variablen "$seiten_titel", "$seiten_sprache" und "$verfaellt_nach_sec" müssen in diesem Abschnitt deklariert werden, alle anderen Variablen dürfen fehlen.- $seiten_titel
Der Wert ist eine vom Nutzer eingetragene Zeichenkette. Der Wert wird von vielen Browsern in der Titelzeile des Browsertabs angezeigt, in dem die Seite geöffnet ist. - $seiten_sprache
Der Wert ist das Kürzel für die Sprache, in welcher der Dateiinhalt überwiegend geschrieben ist, Vorgabewert ist 'de'. Mittlerweile hat diese Angabe an Bedeutung verloren, da die Suchmaschinen die Seitensprache anhand der verwendeten Worte im Inhalt selber ermitteln. Sie sollte trotzdem korrekt gesetzt werden, weil Suchmaschinen u.U. eine Seite mit einem schlechten Rang bestrafen, wenn sie eine Abweichung zwischen dem Kürzel und der tatsächlichen Seitensprache feststellen. - $verfaellt_nach_sec
Bei der formularbasierten Bearbeitung kann einer der folgenden Werte: 0, 60, 600, 1200, 86.400 (= 1 Tag), 2.592.000 (= 30 Tage) zugeordnet werden. Damit wird den Browsern mitgeteilt, wie viele Sekunden lang sie eine aufgerufene Datei als gültig ansehen sollen und aus ihrem Cache holen dürfen, wenn wenn die Seite angezeigt werden soll. - $max_style
Dieser Variable kann einer der folgenden Werte: 0, 1, 2 zugeordnet werden. Der Vorgabewert ist 2. Bei dem Wert 2 darf derjenige, der die Seite im Browser aufruft, zwischen drei verschiedenen Schriftgrößen innerhalb des Seiteninhalts wählen. Bei dem Wert 0 ist nur die minimale Größe möglich. Die Einschränkung der Schriftgröße kann dann sinnvoll sein, wenn eine Seite umfangreiche Tabellen oder Formulare enthält. - $formular
Sofern der Variablen $formular ein Wert zugeordnet ist, den der PHP-Server als "wahr" interpretiert, werden die Größenschalter für die Schriftgröße auf der Seite nicht ausgegeben. Das Unterdrücken der Größenschalter ist in der Regel sinnvoll, wenn die Seite ein aufrufbares Formular enthält, welches Eingabefelder, Checkboxen oder Radiobuttons enthält. Denn würde der Nutzer bei einer solchen Seite auf einen Größenschalter klickt, würde er alle bisher vorgenommenen Eintragungen in das Formular verlieren, weil die Seite neu geladen wird. - $ohne_nav_spalte
Wenn die Variable fehlt oder der Variablen kein Wert zugewiesen ist, den der PHP-Server als "wahr" interpretiert, wird die Navigationsspalte angezeigt, falls das Browserfenster laut den Anweisungen in den Style-Dateien breit genug ist. Um eine optisch ansprechende Ausgabe im Browser zu erreichen, kann es für Seiten mit breiten Tabellen oder Formularen sinnvoll sein, die Ausgabe der Navigationsspalte immer zu unterdrücken. - $horizontal_scroll
Wird dieser Variablen per Gleichheitszeichen ein Wert zugewiesen, den der PHP-Server als "wahr" interpretiert, wird eine zusätzliche Style-Datei eingebunden. Der Inhaltsbereich passt sich dann nicht automatisch an die Breite des Browserfensters an und dem Nutzer wird die Möglichkeit geboten, horizontal zu scrollen. Diese Einstellung ist wichtig, wenn breitere Tabellen oder Formulare in Tabellen angezeigt werden sollen und der Nutzer auch bei schmalen mobilen Geräten alle Inhalte einer Seite (gut erreichen und) lesen können soll, da bei einer Tabelle die rechten Tabellenspalten sonst u.U. nicht mehr angezeigt werden. - $pruefen_mitglied
Wenn die Variable fehlt oder der Variablen kein Wert zugewiesen ist, wird beim Aufruf der Seite nicht geprüft, ob der Nutzer eingeloggt ist. Wenn der boolesche Wert "true" zugeordnet ist, kann die Seite von jedem aufgerufen werden, aber es wird gerprüft, ob der Aufrufer eingeloggt ist und welche Zugriffsrechte er für den Bereich besitzt, zu dem die Datei gehört. Dadurch kann innerhalb des dateispezifischen Inhalts des Skriptes anhand der Zugriffsrechte des Aufrufers gesteuert werden, welche Aktionen ausgeführt werden und welche Inhalte dem Aufrufer angezeigt werden. Steht dagegen nach dem Gleichheitszeichen die Bezeichnung für ein Zugriffsrecht (z.B. "mitglied" oder "verwalten"), wird die Seite dem Aufrufer nur angezeigt, wenn er mindestens über das geforderte Zugriffsrecht in dem Bereich "zac4web_bereich" verfügt, zu dem die Seite gehört. Ansonsten erfolgt ein Hinweis, dass Zugriffsrechte fehlen.
Für Entwürfe wird diese Varialble immer deklariert, um anzuzeigen, welches Mindestrecht erforderlich ist, damit diese Datei formularbasiert bearbeitet werden darf. Für Entwürfe zu Dateien aus dem Ordner "xxx/_red" wird immer das Zugriffsrecht "redaktion_offen" gefordert, für Entwürfe zu Dateien aus dem Ordner "_mb_xxx/_red_int" reicht das Zugriffsrecht "redaktion_intern" aus. Für die Entwürfe von allen anderen Dateien wird das Zugriffsrecht "admin" gefordert. Für Dateien aus dem Mitgliederbereich ist in den Entwurfsdateien im Bereich der Kopf-Variablen immer auch eine Kommentarzeile vorhanden, die mit "//$pruefen_mitglied" beginnt. Die Zuordnung in dem Kommentar gibt an, welches Zugriffsrecht nach der Veröffentlichung des Entwurfs für die Datei erforderlich ist. Für Dateien aus dem öffentlichen Ordner ist die Kommentarzeile nur dann vorhanden, wenn festgelegt wurde, dass das Zugriffsrecht nach der Veröffentlichung beim Aufruf der aktiven Datei ermittelt werden soll. - $robots_no
Nur wenn der Variablen kein Wert oder ein anderer Wert als der boolesche Wert "true" zugewiesen ist, und gleichzeitig $pruefen_mitglied nicht oder mit dem booleschen Wert "false" deklariert ist, dürfen robots von Suchmaschinen die Seite indizieren und nach links durchsuchen. - $style_datei
Wenn diese Variable deklariert wird, muss die Zeile "$style_datei = array();" lauten, denn "zac4web" erwartet dann, dass $style_datei ein eindimensionales numerisches Feld ist. In den nächsten Zeilen folgen dann die Deklarationen für die Elemente des Feldes $style_datei, wobei die css-Dateien alle im Ordner "__wm/styles" oder einem Unterordner davon gespeichert sein müssen. Als Wert ist jeweils der vollständige Pfad zur css-Datei, der auf die Zeichenkette "__wm/styles/" folgt, anzugeben. Die Namen der Style-Dateien, die bei der Auslieferung von "zac4web" unmittelbar im Ordner "__wm/styles" enthalten sind, brauchen nicht genannt zu werden, da diese bei der Ausgabe der Seite automatisch eingebunden werden, soweit diese auszuliefern sind. - $style_bereich
Wenn dieser Variablen ein Wert zugewiesen wird, wird der Wert bei der Ausgabe der Datei im Abschnitt "<head>" innerhalb des Tags "<style type="text/css">" ausgegeben. Die Anweisungen innerhalb dieses Tags interpretiert der Browser als dateispezifische css-Anweisungen. Diese ergänzen oder überschreiben evtl. die css-Anweisungen aus den eingebundenen Style-Dateien. - $js_dateien
Wenn diese Variable deklariert wird, muss die Zeile "$js_dateien = array();" lauten, denn "zac4web" erwartet dann, dass $js_dateien ein zweidimensionales Feld (numerisch/assoziativ) ist. In den nächsten Zeilen folgen dann die Angaben zu den Javascript-Dateien, die eingebunden werden sollen. Bei Javascript-Dateien, die innerhalb des "zac4web"-Projekts gespeichert sind, reicht für das assoziative Element "name" die Angabe des Dateipfades ab dem Wurzelverzeichnis des "zac4web"-Projekts aus. Bei allen anderen Javascript-Dateien muss diesem Element der vollständige Pfad einschließlich des erforderlichen Protokolls zum Aufruf der Datei zugewiesen werden. - $script_js_head
Wenn dieser Variablen ein Wert zugewiesen wird, wird der Wert bei der Ausgabe der Datei im Abschnitt "<head>" innerhalb des Tags "<script type="text/javascript">" ausgegeben. Die Anweisungen innerhalb dieses Tags interpretiert der Browser als dateispezifische Javascript-Anweisungen. Sofern Javascript-Dateien eingebunden sind, ergänzen oder überschreiben diese Anweisungen evtl. die Anweisungen aus den eingebundenen Javascript-Dateien. - $login_protocol
Wenn in Dateien aus dem öffentlichen Bereichsverzeichnis dieser Variablen ein Wert zugewiesen ist, den der PHP-Server als "wahr" interpretiert, wird erwungen, dass bei der Ausgabe der Seite allen Links, denen kein Protokoll explizit zugewiesen wurde, das Protokoll zugeordnet wird, welches in der Datei "__wm/kern/__variablen/system.php" für Seiten aus dem Mitgliederbereich vorgesehen ist. Für Seiten aus dem Mitgliederbereich wirkt sich diese Variable nicht aus, weil bei der Ausgabe dieser Seiten für ein fehlendes Protokoll immer das Protokoll für den Aufruf von Mitgliederseiten eingesetzt werden muss.
- $seiten_titel
- Schließlich folgt die Zeile mit der Zeichenfolge:
include zac4web_pfad."__zac4web/_wm/html_anfang.php";
Durch den Befehl wird die Datei html_anfang.php eingebunden, welche unter anderem prüft, ob der Aufrufer für die Seite zugriffsberechtigt ist. Außerdem gib diese Datei die header-Informationen aus und ruft die Datei "__zac4web/_wm/body.php" auf, welche dafür sorgt, dass die Logo-Zeile, die Navigationsmenüs oberhalb des Inhaltsbereichs sowie ggf. die Navigationsspalte ausgegeben werden. Außerdem öffnet diese Datei das HTML-TAG, in dem der dateispezifische Inhalt auszugeben ist. - Die letzte Zeile des Abschnitts enthält die Zeichenfolge:
?>
Wenn eine Inhaltsseite, eine Gliederungsseite oder eine Datei des Typs Formular bearbeitet oder neu erstellt wird, wird die Datei - wenn es nicht eine Vorlagendatei für die Startseiten neuer Bereiche ist - nicht sofort veröffentlicht, sondern als Entwurf gespeichert. Nach dem ersten php-Abschnitt muss bei einer Entwurfsdatei ein einzeiliger php-Abschnitt folgen, der mit der Zeichenfolge
<?php include_once zac4web_pfad."__zac4web/_redaktion/_inc/draft_kopf_"
beginnt. Bei veröffentlichten Dateien, darf diese Zeile nicht enthalten sein, daher wird sie beim Veröffentlichen eines Entwurfs automatisch entfernt.
Dann folgt der spezifische Inhalt der aufrufbaren Datei.
Im Ausgabemodus verarbeitet das System sämtliche Informationen aus diesen Zeilen, es sei denn, im PHP-Code sind syntaktische oder inhaltliche Fehler enthalten.
Für die Aufbereitung für das Redaktionsformular und das formularbasierte Hochladen der Datei gelten die weiter unten unterhalb der Linie notierten Regeln.
Als vorletzte Zeile muss bei einer Entwurfsdatei
<?php include_once zac4web_pfad."__zac4web/_redaktion/_inc/draft_ende.php"; ?>
notiert werden. Es sind keine weiteren Zeichen in der Zeile erlaubt, auch kein whitespace. Bei veröffentlichten Dateien, darf diese Zeile nicht enthalten sein, daher wird sie beim Veröffentlichen eines Entwurfs automatisch entfernt.
Die letzte Zeile muss immer genau folgenden Inhalt enhalten, damit die Datei bei der Ausgabe optisch korrekt beendet wird:
<?php include zac4web_pfad."__zac4web/_wm/html_ende.php"; ?>
Die Datei kann allerdings nur dann formularbasiert bearbeitet und hochgeladen werden, wenn in dieser letzten Zeile keine weiteren Zeichen enthalten sind, also auch keine Leerzeichen und kein Zeilenumbruch.
Die Datei kann nur dann mit dem Redaktionsformular bearbeitet werden, wenn außerdem die erste Zeile des dateispezifischen Codes nach dem Trimmen mit der Zeichenfolge :
<?php //<block>:
beginnt. Nur dann wird beim Aufruf des Redaktionsformulars für die Datei geprüft, ob die Struktur des Blocks eingehalten wird. Falls dieses zutrifft, wird der weitere Inhalt ebenfalls daraufhin geprüft, ob die vorgegebenen Block-Strukturen eingehalten werden. Sobald dies für einen Block einmal nicht zutrifft, kann die Datei nicht mit dem Redaktionssystem bearbeitet werden.
- In Inhaltsseiten sind sämtliche Blöcke außer jenen erlaubt, die nur für Arbeitsblätter vorgesehen sind.
- In Gliederungsseiten dürfen wie schon weiter oben erwähnt u.a. keine Blöcke des Typs Formular oder Blöcke mit Bildern enthalten sein.
- Und bei Dateien des Typs "Formular" muss der dateispezifische Code mit der Zeile
<?php //<block>:form ?>"
beginnen und mit der Zeile
"<form>"
enden.
Beim formularbasierten Hochladen einer zusätzlichen Datei wird im Gegensatz zum Aufbereiten des Dateiinhalts für das Redaktionsformular nicht geprüft, ob die spezifischen Blockstrukturen im Inhaltsbereich für die Datei eingehalten werden.
Die einzige inhaltliche Prüfung wird für den Typ Formular durchgeführt. Für den Typ "Formular" muss der spezifische Inhalt der Datei wie beim Öffnen mit dem Redaktionsformular beginnen und enden. Diese Prüfung wird durchgeführt, damit nicht versehentlich eine Inhaltsdatei oder eine Gliederungsdatei in einen Ordner hochgeladen wird, in dem nur Dateien des Typs "Formular" gespeichert werden sollten.
Struktur für Zieldateien für AJAX-Befehl
Wenn eine Zieldatei für AJAX-Befehl von dem Mitglied mit der Identifikationsnummer 53 in dem Verzeichnis "_mb_xxx/_red_int/_ajax" oder "_mb_xxx/_ad_int/_ajax" bzw. einem Unterverzeichnis davon gespeichert wird, beginnt sie immer mit dem folgenden PHP-Abschnitt:
<?php
define('zac4web_pfad', '../../../');
// gespeichert von: 53
define('zac4web_bereich_ajax', 'xxx');
// erforderliches Mindestrecht
$pruefen_mitglied = 'mitglied';
// statt html_anfang.php wegen anderem header ajax_anfang.php verwenden. Die Datei erzeugt die Variable $bereich sowie die Kostanten mit den Informationen zu den Zugriffsrechten der Person und der Identifikationsnummer des Aufrufers.
include_once zac4web_pfad."__zac4web/_wm/ajax_anfang.php";
// nachfolgender Code wird nur erreicht, wenn am Ende von ajax_anfang.php die Variablen und Konstanten erzeugt sind. Die Fehlersteuerung anhand dieser Werte muss das Skript selber übernehmen. Die Prüfvariable $fehler wird mit dem Wert -1 übergeben. Der header ist von diesem Skript zu erstellen
header("Content-type:text/html; charset=utf-8");
?>
Diese Struktur ist unabhängig davon, ob die Datei aufgrund des formularbasierten Hochladens einer zusätzlichen Datei oder beim Veröffentlichen eines Entwurfs mit dem Redaktionssystem gespeichert wird. Lediglich die Identifikationsnummer hinter "// gespeichert von: " wird jeweils angepasst, um bei Bedarf die Person herausfinden zu können, die für den Inhalt der Datei verantwortlich ist. Die anderen Zeilen, die mit "//" beginnen, sind nicht erforderlich, sie enthalten nur Kommentare, mit dem der Quellcode erklärt wird.
Erfolgt die Speicherung der Datei innerhalb des Verzeichnisses "_mb_xxx/_ad_rva/_ajax" wird in der Zeile "$pruefen_mitglied = 'mitglied';" statt des Login-Rechts "mitglied" das dann geforderte Zugriffsrecht zum Bereich "xxx" notiert, welches erforderlich ist, damit "zac4web" das Skript für den Aufrufer ausführt.
Bei einer Speicherung der Zieldatei in einem der beiden Ordner "xxx/_red/_ajax" oder "xxx/_admin/_ajax" bzw. einem Unterverzeichnis davon, folgt unmittelbar auf die Zeile, welche die Zeichenfolge "gespeichert von:" enthält, die Zeile, die mit der Zeichenfolge "header" beginnt, wenn nicht ermittelt werden soll, ob der Aufrufer eingeloggt ist und welche Zugriffsrechte er zum Bereich besitzt. Anderenfalls sind alle oben abgebildeten Zeilen enthalten. Allerdings wird bei diesen Speicherorten der Variablen "$pruefen_mitglied der boolesche Wert true zugeordnet.
Sowohl beim formularbasierten Hochladen einer Datei als auch beim Anfordern des Redaktionsformulars für eine bereits vorhandene Datei wird der erste php-Abschnitt der Datei ausgelesen und für das Redaktionsformular aufbereitet. Mit der ersten Zeile der Datei muss der PHP-Abschnitt geöffnet werden, in der zweiten Zeile die Konstante "zac4web_pfad" definiert werden und in dem Kommentar der dritten Zeile die Zeichenfolge "gespeichert von:" stehen. Wenn keine Zugriffsrechte geprüft werden müssen oder dürfen, muss die vierte Zeile mit dem Wort header beginnen und in der fünften Zeile der PHP-Abschnitt beendet werden.
Beginnt die vierte Zeile nicht mit der Zeichenfolge "header", muss in einer der nächsten Zeilen die Variable $pruefen_mitglied deklariert sein, bevor der erste PHP-Abschnitt endet. Die übrigen Zeilen des ersten PHP-Abschnitts werden beim Auslesen ignoriert und dürfen daher beliebige Zeichenfolgen enthalten.
Nur wenn außerdem in der letzten Zeile der Zieldatei für AJAX-Befehl folgende Zeichenfolge steht:
<?php //Ende ajax-Datei ?>
, kann die Datei formularbasiert hochgeladen oder mit dem Redaktionssystem bearbeitet werden. Diese Zeile ist zwar aus Sicht des PHP-Servers überflüssig, da sie nur einen Kommentar enthält. Die Zeile gibt aber bei der Prüfung den Hinweis, dsas die Datei aus einem "zac4web"-Projekt stammt und korrekt aufgebaut sein könnte.
Zwischen dem vorgeschriebenen ersten PHP-Abschnitt und der letzten Zeile dürfen die gleichen Blöcke vorhanden sein wie bei Inhaltsdateien.
Wenn eine Zieldatei für AJAX-Befehl mit dem Redaktionssystem bearbeitet oder neu erstellt wird, wird zunächst wie bei allen anderen Dateiarten nur eine Entwurfsdatei erzeugt. Die Entwurfs-Version und die aktive Version der Datei, die durch die Veröffentlichung des Entwurfs entsteht, unterscheiden sich strukturell lediglich in der Anzahl der Zeichenfolge "../" in der Definition für "zac4web_pfad" in der zweiten Zeile des ersten PHP-Abschnitts. In der Entwurfs-Version einer Zieldatei für AJAX-Befehl sind im Gegensatz zu den Entwurfs-Versionen der anderen aufrufbaren Dateien also keine zusätzlichen Blöcke enthalten, welche für die Ausgabe der Schalterzeilen zuständig sind.
Struktur für "nicht-aufrufbare" PHP-Dateien
Wenn eine "nicht-aufrufbare" PHP-Datei vom Redaktionssystem gespeichert wird, beginnt die Datei immer mit einem php-Block, der wie folgt aufgebaut ist:
<?php
if (!defined('zac4web_pfad')) //dann wurde die Seite nicht von einer aufrufbaren Seite aufgerufen
{
header("location: ../../../index.php"); //Aufruf der Startseite
exit(); //Sicherstellen dass kein nachfolgender Code ausgeführt wird
}
// Aufruf stammt von aufrufbarer Seite
?>
Lediglich die Anzahl der Zeichenfolgen "../" innerhalb des header-Befehls variiert dabei. Denn die Anzahl der Zeichenfolgen entspricht bei der Speicherung mit dem Redaktionssystem immer der Anzahl der Verzeichnisebenen innerhalb des Dateipfades ab dem Wurzelverzeichnis, damit beim Auslösen des header-Befehls tatsächlich die Index-Datei des "zac4web"-Projekts aufgerufen wird.
Und in der letzten Zeile der Datei wird vom Redaktionssystem immer folgende Zeile notiert:
<?php //Ende include ?>
- Die erste Zeile muss unmittelbar mit der Zeichenfolge "<?php" beginnen, damit eine "nicht-aufrufbare" PHP-Datei mit dem Redaktionssystem bearbeitet werden kann. Für das formularbasierte Hochladen einer solchen Datei wird dagegen nur gefordert, dass die Zeile nach dem Entfernen von sogenanntem whitespce (z.B. Leerzeichen, Tabulatoren) lediglich diese Zeichenfolge enthält.
- Sowohl für die Bearbeitung mit dem Redaktionssystem als auch für das formularbasierte Hochladen darf in der zweiten Zeile vor "if (!defined('zac4web_pfad'))" höchstens sogenannter Whitespace notiert sein. Die Zeichenfolge selber muss vollkommen identisch aufgebaut sein.
- Alle weiteren Zeichen die zwischen der Zeichenfolge "if (!defined('zac4web_pfad'))" und der Zeile stehen, die auf das erstmalige Auftreten der Zeichenfolge "?>" folgen, werden für die Prüfung ignoriert, da sowohl beim Speichern des Entwurfs als auch beim Speichern des Inhalts aus der hochgeladenen Datei der erste PHP-Abschnitt von "zac4web" erstellt wird und dieser dann nur die oben angezeigten Zeilen enthält.
- In der letzten Zeile der Datei muss und darf lediglich die Zeichenfolge "<?php //Ende include ?>" stehen. Diese Zeile ist zwar aus Sicht des PHP-Servers überflüssig, da sie nur einen Kommentar enthält, Die Zeile wird jedoch verwendet, um zu kennzeichnen, dass die Datei für ein "zac4web"-Projekt erstellt wurde.
- "PHP-Skripte - für Funktionen", "PHP-Skripte - für Funktionen" und "PHP-Skripte - für Funktionen" müssen mindestens einen mehrzeiligen Redaktionsblock des Typs "PHP-Code" enthalten . Sie dürfen außer Blöcken des Typs "PHP-Code" keine anderen Redaktionsblöcke enthalten. Die erste Zeile eines Blocks Typ "PHP-Code" lautet immer "<?php //<block>:php". Der Block endet immer mit einer Zeile, die nur die Zeichenfolge "?>" enthält. Weil diese Skripte nur Redaktionsblöcke des Typs "PHP-Code" enthalten dürfen, können diese Skripte nur von Redakteuren erstellt und bearbeitet werden, die das spezifische Redaktionsrecht "php" besitzen.
- In "PHP-Skripten - für gemischten Inhalt" dürfen dagegen alle Redaktionsblöcke enthalten sein, sofern es sich nicht um Redaktionsblöcke handelt, die nur für Arbeitsblätter vorgesehen sind. Das Redaktionssystem entscheidet anhand der spezifischen Redaktionsrechte des Redakteurs, welche der bereits enthaltenen Blöcke er verändern darf und welche Art von Blöcken er hinzufügen darf.
Wenn eine Datei mit dem Redaktionssystem bearbeitet wird oder neu erstellt wird, wird zunächst nur eine Entwurfsdatei erzeugt. Die Entwurfs-Version und die aktive Version der "nicht-aufrufbaren" PHP-Datei, die durch die Veröffentlichung des Entwurfs entsteht, unterscheiden sich strukturell lediglich in der Anzahl der Zeichenfolge "../" im header-Befehl innerhalb des ersten PHP-Abschnitts. In der Entwurfs-Version einer "nicht-aufrufbaren" PHP-Datei sind also keine zusätzlichen Blöcke enthalten, welche für die Ausgabe der Schalterzeilen zuständig sind.
Verwendung des Befehls header() in einer PHP-Datei
Mit dem Befehl "header("location: ".zac4web_pfad.$seite);" wird eine Umleitung zu der Datei $seite erzwungen. Bei den nicht-aufrufbaren Seiten wird dieser Befehl genutzt, um die Ausführung der Befehle in der Datei zu verhindern, falls die Datei per Adresszeile eines Browsers direkt aufgerufen und nicht per php-Befehl in eine aufrufbare Datei eingebunden wird. Auch einige System-Dateien nutzen die Möglichkeit der Umleitung auf eine andere Datei mit dem Befehl header().
In Zieldateien für AJAX-Befehl wird der Befehl "header("Content-type:text/html; charset=utf-8");" eingesetzt werden, um dem Browser mitzuteilen, in welcher Codierung der Inhalt geschrieben wurde, der als Folge des Javascript-Befehls an den Browser geschickt wurde.
Wenn mit dem header-Befehl eine ein Umleitung auf eine PHP-Datei stattfindet, die das HTML-TAG <head> erzeugt, sollte vor dem header-Befehl keinerlei Ausgabe stattgefunden haben. Denn erfolgt vor der Umleitung mit dem Befehl header() eine Ausgabe, kann dies bei entsprechender Server-Einstellung dazu führen, dass eine Fehlermeldung ausgegeben wird und/oder dass das Feld $_SESSION nicht korrekt geschrieben wird. Ist der Aufrufer der Datei im System eingeloggt, kann letzteres dazu führen, dass notwendige Informationen fehlen, um die gewünschte Seite aus einem Mitgliederbereich aufrufen zu können.
© zacher-info.de
- Seite zuletzt geändert: 12.03.2021 - Elisabeth Zacher