Organisation Webspace: Redundanz-Vermeidung

Willkommen zurück.

Lassen Sie mich die bisherige Artikel-Serie: „Eigener Listenaufbau, einfach und kostenlos(Teil 2): das Formular“ bitte kurz unterbrechen, um auf ein  wichtiges Thema zu kommen: Den „sorgsamen“ Umgang mit dem Webspace.

[Das Programm für den Listenaufbau – gratisseller genannt – braucht noch ein wenig Zeit, und die steht mir im Moment nur bedingt zur Verfügung. Aber keine Angst ich bin dabei 🙂 ]

Was meine ich mit „sorgsamen Umgang“ ?

Wenn Sie mehrere Webanwendungen betreiben, und Sie ggf. auch selbst die Seiten programmieren, kommt es immer wieder vor, dass man sich eine Routine erstellt, die von mehreren Webseiten gebraucht werden könnten. Gerade wenn Sie mit PHP dynamische Webseiten erstellen, kommt es sehr häufig vor, dass man eine Routine mehrmals in unterschiedlichen Scripten einsetzt.

Ändert man nun an einer Routine einer Webanwendung etwas, weil es einem besser gefällt, oder man eine Zusatzfunktion einbauen will, muss man die Routine in allen anderen Seiten auch anpassen, um die Funktionalitäten nicht auseinanderlaufen zu lassen.

Sie wollen bspw. eine Datanbankschnittstelle in Ihre Page einbauen, dann gibt es eine Datenbankschnittstelle mit dem Namen adodb, die Ihnen alle Zugriffe zur Datanbank vordefiniert. Ja diese Schnittstelle kann sogar andere Datenbanken als MySql bedienen,  so gibt es unter anderem bei adodb eine Schnittstelle zu Oracle. All das können Sie sich kostenlos herunterladen und benutzen.  Sie stellen adodb in ein Unterverzeichnis Ihrer Webanwendung. Nun wollen Sie eine neue Anwendung schreiben, die auch adodb benutzt. Sie stellen das gleiche Coding wieder in ein Unterverzeichnis Ihrer anderen Anwendung.

Wäre ja alles nicht so schlimm, wenn nicht dadurch Webspace verbraucht würde. Nehmen Sie einen solchen freien DB-Schnittstelle, so kann es leicht sein, dass diese  200 Dateien in 14 Unterverzeichnissen hat und mehr als 200 MB gross ist.

Es wäre für alle Anwendungen doch besser und sparsamer, würde man adodb nur einmal speichern. Es spart Platz und bei Änderungen muss man nur eine Datei anpassen, nicht alle Unterverzeichnisse, wo adodb drinsteht.

Das oben geschilderte hat auch einen Namen: Derartige Doppelspeicherungen nennt man Redundanz. Und diese ist gemeinhin zu vermeiden. Deshalb sollte man seinen Webspace immer gut organisieren und wo immer geht, die Redundanz vermeiden.

Eine ganz andere praktischere Idee ist keine Mehrfachspeicherung für all Ihre Bilder, Icons, Gifs mehr zuzulassen. Sie haben nur noch einen „COMMON“-Speicherplatz, wo Sie alle Ihre Bilder hinspeichern. Alle Ihre Internetanwendungen rufen diese Bilder dann nur noch von einem Standort aus auf. Das funktioniert aber nur, wenn Sie keine Download-Software wie einen Editor in Ihrer Webanwendung benutzen, da dort feste Links auf seine Bilder gespeichert sind.

Sicherlich könnten Sie diese Programme durchgehen und einen gemeinsamen Speicherort angeben, Sie müssten das aber bei jedem Update der Software wiederholen. Aber Ihre eigenen Bilder: das wird am Ende des Artikels kein Problem mehr darstellen.

Zauberworte in einem solchen Fall sind die PHP-Statements include oder require! Mit einem include „<dateiname>“; geben Sie dem Script an, dass es jetzt aus der Datei <dateiname> das dortige Coding holen soll und mitinterpretieren soll.

Unter Zuhilfenahme von sog. Konstanten, die ja mit define („konstate“,“wert“); definiert werden, lässt sich hier eine ordentliche Organisation aufbauen, die man später auch noch kapiert 🙂

Machen wir doch ein Beispiel:

Wir wollen ein Script schreiben, das Unterprogramme hat,  sowie einen Zugriff auf eine Datenbank mit adodb einbindet.

Ihnen wird bei der Durchsicht von einigen PHP-Scripts im Netz bestimmt schon aufgefallen sein, dass es da immer eine Datei config.php gibt. Unter Umständen sind Sie angehalten in dieser Datei Anpassungen zu machen. Nun, das ist geradezu üblich, weil es ja immer wieder Parameter gibt, wo der Programmierer nicht wissen kann, wie diese bei Ihnen bewertet werden. Ein typisches Beispiel sind dabei die Datenbank-Zugriffs-Parameter.

Somit haben Sie in unserem Beispiel folgende Anforderungen:

  1. Sie haben eine Datei, wo sie alle Unterprogramme (PHP-Funktionen) unterbringen wollen.
  2. Sie haben den Editor wie (http://www.fckeditor.net/) mit seinen 800 Dateien.
  3. Sie haben adodb mit seien 200 Dateien.
  4. Sie haben eine Datei index.php, die als Start-Datei gilt. Sie haben aber auch untersiedliche Seiten, die aus Menüs augerufen werden sollen. (z.B. die  Seite, wo Sie den Editor aufrufen).

Somit ist es vorteilhaft,  sich für die Parametrisierung Ihrer Seite eine config.php zu bauen. Diese beinhaltet PHP-Konstanten, die entweder von Ihnen bewertet werden, oder deren Bewertung berechnet wird.

Bei Includes müssen Sie ja den Dateinamen angeben. Wie lautet der? Wie lautet der im Web?  Wie lautet der auf dem Localhost?

Sie können in PHP zwar mit sog. relativen Verzeichnissen arbeiten, doch kann es Kombinationen geben, wo sie diese Verzeichnisse nicht mehr eindeutig relativ angeben können. Deshalb arbeite ich – und das würde ich Ihnen auch empfehlen – mit absoluten Verzeichnissen.

Beispiel: Ist eine Datei im Verzeichnis /us/htdocs/xy2233_Q653ABG1/marketerblog.sybeklue.de/hugo.php  im Web gepeichert, so teile ich das Verezichnis in folgende Teile auf:

  1. /us/htdocs/xy2233_Q653ABG1/ <= PARAM_WEBROOT
  2. marketerblog.sybeklue.de/
  3. hugo.php

Ich definiere eine Konstante define(„PARAM_WEBROOT“,“/us/htdocs/xy2233_Q653ABG1/“); und setze den Dateinamen dann zusammen:

$dateiname = PARAM_WEBROOT.“marketerblog.sybeklue.de/hugo.php“);

Meine include-Anweisung heisst dann : include PARAM_WEBROOT.“marketerblog.sybeklue.de/hugo.php“;

Die Definition der Konstante PARAM_WEBROOT stelle ich dann in eine mainconfig.php in das Rootverzeichnis meiner Anwendung und includiere dieses bei allen PHP-Scripten.

Um den Editor nicht mehrmals speichern zu müssen, erstelle ich mir ein Verzeichnis mit dem Namen COMMON_ROUTINES dessen Speicherort ich auch über Konstanten zuordne.  Also

define(„COMMON_ROUTINE_PATH“,PARAM_WEBROOT.’COMMON_ROUTINES‘);

define(„COMMON_EDITOR_PATH“,PARAM_WEBROOT.’COMMON_ROUTINES/fckeditor/‘);

Sie sehen, durch die Definition der Konstanten, ist es dann leicht den Editor einzubinden:

include COMMON_EDITOR_PATH.’fckeditor.php‘;

Sie haben also eine Menge Freiraum, um Ihre Anwendung so zu gestalten, dass Änderungen nicht zur Arbeit werden!

Ein Verzeichnisbaum im Web würde dann in etwa so aussehen:

COMMON_ROUTINES
COMMON_ROUTINES/adodb
COMMON_ROUTINES/adodb/adodb.inc.php
usw.
www.IhreDomain1.de
www.IhreDomain1.de/Routinen1
www.IhreDomain1.de/Routinen1/r1.php
www.IhreDomain1.de/Routinen1/r2.php
www.IhreDomain1.de/funktionen
www.IhreDomain1.de/funktionen/fkt1.php
www.IhreDomain1.de/funktionen/fkt2.php
www.IhreDomain1.de/index.php
www.IhreDomain1.de/mainconfig.php

www.IhreDomain2.de
www.IhreDomain2.de/Routinen1
www.IhreDomain2.de/Routinen1/r1.php
www.IhreDomain2.de/Routinen1/r2.php
www.IhreDomain2.de/funktionen
www.IhreDomain2.de/funktionen/fkt1.php
www.IhreDomain2.de/funktionen/fkt2.php
www.IhreDomain2.de/index.php
www.IhreDomain2.de/mainconfig.php

Wenn beide Domains eine Datenbank  benutzen, dann wird über mainconfig.php adodb  in COMMON_ROUTINES angesteuert.

Letztlich heißt das, dass Sie alle allgemeinen Routinen in das Verzeichnis COMMON_ROUTINES stellen. Dort sind die Routinen einmal gespeichert und werden bei Bedarf eingebunden. Wie aber hilft das Ganze einem Marketer, der nur HTML-Coding programmieren will?

Nun, in den einzelnen Kapiteln dieses Blogs über PHP-Einführung wurden ja schon einfache PHP Anweisungen dargestellt, mit denen man die Seite dynamisch gestalten kann. Durch <?include-Anweisungen?> kann man auch HTML-Coding in die Seite kopieren, das z.B. zentral auf einem Verzeichnis COMMON_ROUTINES liegt.

Denken Sie z.B. an Ihr Impressum. Wenn Sie dieses inhaltlich so abfassen, dass es sich nicht auf die Seite bezieht, brauchen Sie es nicht redundant zu speichern.

Aber Achtung:

Wir reden hier über Dateipfade, die wir mit PHP bestimmen, nicht über Links! Ein Link unterscheidet sich vom Dateinnamen, dass er eine sog. „Adressierbare Seite“ aufruft. So lange Sie keine Subdomain auf Ihr Verzeichnis COMMON_ROUTINES gelegt haben, kommen Sie mit einem Linkaufruf nicht an das Allgemeine Verzeichnis ran.

Denn http://COMMON_ROUTINES/…. klappt nicht, da der Browser keine Domain dazu findet.

Links gehen also nicht. Was andersherum wieder heißt, dass wenn Sie Bilder oder Links aus Routinen in COMMON_ROUTINES ziehen wollen, dann klappt das so nicht. Es sei denn Sie definieren dem Browser einen Weg dorthin.

Viele Hoster bieten kostenlose Subdomains an, die die definieren können. Eine Subdomain wird definiert mit einem Namen wie mySubdomain.IhreDomain.de (Siehe oben dieser Blog ist eine Subdomain der Domain sybeklue.de). Außerdem geben Sie bei jeder Subdomain ein sog. Startverzeichnis an, das aber dann unser Verzeichnis COMMON_ROUTINES sein könnte. Dann können Sie auch Scripte auslagern, die im Verzeichnis COMMON_ROUTINES auch Bilder und Links anzeigen.

Wenn nun aber jemand diesen Link bemerkt, dann könnte er auf das Verzeichnis zugreifen. Was Sie ggf. beachten sollten, denn man kann da Unsinn treiben. Wenn Sie es aber geschickt anstellen, und niemals zulassen dass diese Subdomain in der Adressleiste angezeigt wird, dann können Sie auch derartige Software auslagern.

Wie man so etwas machen kann werde ich in einem anderen Beitrag erklären.

Kommen wir zurück zum einmal gespeicherten Impressum:

Es soll auf COMMON_ROUTINES liegen. Durch geschickte Vergabe von Konstanten, die die jeweiligen richtigen Werte tragen, können Sie auch das Impressum auslagern.

Datei impressum.php

<?php

include „config.php“;

include  COMMON_ROUTINE_PATH.’/MyConstImpressum/Myimpressum.php‘;

?>

Die Seite config.php stammt aus Ihrer Webseite. Sie definiert alle Konstanten für Links, die im Myimpressum.php vergeben werden. Damit ist die Variabilität gegeben.


Gruß

Bernd Klüppelberg

Bisher gibt es keinen Kommentar. Schreiben Sie einen Kommentar!

Schreibe einen Kommentar