[PHP/XML/MySQL] Wie geht man's an mit nem CMS?

CPU

Lieutenant
Registriert
Jan. 2006
Beiträge
704
Hallo,

der Titel sagt nicht so richtig aus, was ich eigentlich hier erfragen möchte, doch ich konnte es nicht besser formulieren: es geht darum, dass ich gerade überlege, mein CMS neu zu programmieren, mit einigen grundlegenden Veränderungen (!) und das vor allem bezogen auf die einzelnen Seiten.

Bisher habe ich es immer so gelöst: Jeder Hauptmenüpunkt wurde durch einen Ordner im Dateisystem dargestellt und jeder Untermenüpunkt wurde durch eine Datei dargestellt. Dies hat jedoch zwei gravierende Schwachstellen:
  1. neulich hatte ich auf dem Server von einem Freund mein System installiert, und dann konnte ich keine Hauptmenüpunkte erstellen, und keine Seiten ändern (also öffnen, verändern und speichern) sowie neue Seiten erstellen. Das Problem lag bei den Rechten: ich musste erst mit CHMOD's rumhantieren, um Ordner/Dateien zu erstellen!
  2. außerdem ist es so, dass ich ja nur einen Untermenüpunkt erstellen kann (!), was ist aber, wenn der Untermenüpunkt einen Untermenüpunkt haben soll?

Daher habe ich mir mal Joomla und Modx angeschaut und gesehen, dass bei diesen Systemen das ganze mit den Dateien und Ordnern weg fällt. Es gibt nur noch eine Index-Datei, bei der über GET-Variablen die einzelnen Seiten aufgerufen werden! Das fand ich doch erst sehr interessant, bis mich mein Freund ausgebremst hat. Er hat gesagt, dass es nicht gut ist, den ganzen HTML-Code in der MySQL-DB zu speichern (Traffic, Speicherplatz). Da habe ich mir überlegt, dass man ja das ganze mit XML-Files regeln könnte. Sein Einwand: Wie sollen die Codes gesichert werden, so dass sie nicht von außen auslesbar sind?

Was meint Ihr dazu? Sollte ich meine alte Methode hinter mir lassen, und nur noch über eine Index-Datei gehen? Wo sind Nachteile dieser Methode?

CPU :)
 
>> Er hat gesagt, dass es nicht gut ist, den ganzen HTML-Code in der MySQL-DB zu speichern (Traffic, Speicherplatz).

Natürlich ist es nicht zu empfehlen, komplette HTML-Dateien in der Datenbank zu speichern - das macht aber auch niemand. In der Datenbank werden nur die Inhalte selbst gespeichert, welche zur Ausgabe mittels einer Template-Engine in die jeweiligen Templates eingefügt werden.
 
Wie Computer Freak schon sagt und:

Dateirechte (CHMOD):
Du entwickelst unter Windows? Sein Server läuft unter Linux?

Traffic, Speicherplatz?
Traffic -> Zwischen PHP und der MySQL ? Ehm dafür ist eine Datenbank schließlich da. Und im normalfall sind eh alle Daten im RAM. Somit geht das noch schneller als von Festplatte direkt lesen
Speicherplatz -> Rate mal wo MySQL seine Daten speichert. Genau auf der Festplatte.

Somit ist XML aus meiner Sicht total sinnlos dafür - wozu hat man eine Datenbank wenn man da keine Daten speichern kann/soll/darf?

Gruß nox
 
Wenn man die möglichkeit hat sich ne Ramdisk anzulegen in die man daten xmls speichern kann, ownt man damit ne mysql vermutlich.

der Vorteil von XML als Datenspeicher ist imho das es sich zum einen teilweise sehr viel schneller arbeitet und zum anderen sehr viel einfacher ist das ganze zu migrieren.
 
Bei XML fehlt komplett die Query Language, oder hab ich die übersehen?

Oder wie machst du eine "Gib mir die aktuelleste News". Am Dateierstellungsdatum? Oder die News eines bestimmen Users, Themas, etc ...
Von Indizierung mal ganz abgesehen...

Ich denke es hat schon einen Grund warum es Datenbanksoftware gibt.
 
Sprich du willst mir sagen, anstatt eine Datenbank Software zu verwenden, schreibst du Schritt für Schritt selber eine?

Na ja bekommst wenigstens Übung :)

XML ist nun mal keine Datenbanksoftware. Nur eine strukturierte Variante Daten zu speichern. Ohne die Vorteile einer Datenbanksoftware, aber mit den Vorteilen mehr Freiheiten zu haben.

Aber ab, sagen wir mal 100.000 Einträgen, dauert das einlesen und parsen x-mal länger als ein "SELECT * FROM <tabelle> WHERE name like '%hans%'"

Gruß
Nox :)

Edit:

Desweiteren kann nur ein Prozess gleichzeitig auf eine XML schreibend zugreifen. :) Nix gut :)
 
XQuery ist zB eine Abfragesprache für XML-Dokumente. Nichts desto trotz: keine gute Idee ;)

Wie bereits erwähnt: XML ist dafür da, Daten strukturiert ablegen zu können. Datenbanken managen gleichzeitigen Zugriff, haben effizientere Abfragealgorithmen, etc... Alles was du brauchst ;)

Außerdem: Alles CMS benutzen Datenbanken. Warum willst du es anders lösen?
 
Computer Freak schrieb:
Natürlich ist es nicht zu empfehlen, komplette HTML-Dateien in der Datenbank zu speichern - das macht aber auch niemand. In der Datenbank werden nur die Inhalte selbst gespeichert, welche zur Ausgabe mittels einer Template-Engine in die jeweiligen Templates eingefügt werden.

Also wenn, würde ich die Inhalte (also praktisch nur den Text) in der Datenbank speichern, zusammen mit der Überschrift, Metatags etc., aber in einer Tabelle. Wenn die Seite dann aufgerufen wird, nimmt sich PHP die Info's aus der DB und das Design aus einer HTML-Datei, die geparsed wird, und der Benutzer erhält seine Seite!??? :)

Also, was würdet Ihr als "Wertung" abgeben: Ja oder Nein? Bei mir wäre es so, dass die Website so ungefähr 100 - 200 Textseiten hat! Wäre das noch vertretbar, wenn das alles in der Datenbank landet?

Wie ist das mit dem HTML-Quellcode, der in der Datenbank landet: ist kann der irgendeinen Schaden anrichten?

Wo sind eigentlich die Wikipedia-Artikel gespeichert? In einer Datenbank oder als Datei?

CPU
 
TheNoxier schrieb:
Aber ab, sagen wir mal 100.000 Einträgen, dauert das einlesen und parsen x-mal länger als ein "SELECT * FROM <tabelle> WHERE name like '%hans%'"

falsch und realitätsfern.

bei Abfrage von 100k Datensätzen mit sagen wir mal 3 Spalten, dauert die Ausgabe an den User als ne sql transaktion oder der xml parser. desweiteren erfindet man damit keine Datenbanken neu sondern arbeitet einfach auf anderer Basis...
 
Wenn du alles in XML speicherst sind demnach auch groß Datenbanken nicht "realitätsfern".
Denn ich bin den Weg schon gegangen.
Hatte am Ende 1500 XML Dateien mit je ca 300-1000 Zeilen Inhalt. Damit ich wusste wo ich was finde und nicht 1500 XML Dateien einlesen musste, hat eine Datenbank die Meta-Infos übernommen.
Aber am Ende war das Problem, dass 2 oder mehr User nicht die gleiche Datei bearbeiten konnten und es daher zu Problemen kam und ich wieder mehr code schreiben musste um das abzufangen. Sprich ich hab mehr oder weniger begonnen eine eigene Datenbank Software zu schreiben die XML Dateien als Datenspeicher verwendet.

Ich will nicht sagen, XML ist falsch oder unbrauchbar. Wir haben in der Firma z.B. eingehende Registierungen in einem Formular in XML gespeichert, welche dann per SSH Firmenintern gezogen und verarbeitet wurden. Wir reden hier von teilweise 100.000 pro Tag. Klappt gut und sehr gut bei Importfehlern wieder einlesbar. Aber hier wird halt nur Daten weggeschrieben, gepackt, auf anderen Server übertrage und in eine Datenbank eingelesen.

Desweiteren finde ich XML auch sehr gut als Informationstransportplattform bei Server/Client Anwendungen.

Alles eine Frage wie man es einsetzt. Aber als CMS halte ich es für nicht das Beste.

Nox
 
es geht garnicht darum alles in xml auszugliedern, um ne Datenbank kommt man bei entsprechemdem Umfang garnicht rum daran gibts nichts zu rütteln, vielmehr ist der Punkt z.B. statische Inhalte der Seite auszugliedern, ein System, das so wie ich es momentan implementiere, in Kombination mit Templates sogar sehr viel Übersichtlicher und strukturierter ist als ne Datenbank.

und glaub mir, es ist ziehmlich flott dabei :)
 
Was haltet Ihr von folgender Lösung: Ich lege ein "virtuelles Verzeichnis" an, dass nur in der Datenbank existiert, in dem Dateien registriert werden und so abrufbar sind. In "Wirklichkeit" lege ich jedoch die Dateien mit einem Alphanumerischen Namen irgendwo auf dem Webserver ab.
 
Wo ist denn eigentlich dein Problem mit der Datenbank? Meinst du dass eine Datenbank nicht dafür geeignet ist Text zu speichern?
Bei mir wäre es so, dass die Website so ungefähr 100 - 200 Textseiten hat! Wäre das noch vertretbar, wenn das alles in der Datenbank landet?
Meinst du wirklich dass die CB-Artikel und News in Form von Textdateien auf dem Server liegen?? ;)

Wie ist das mit dem HTML-Quellcode, der in der Datenbank landet: ist kann der irgendeinen Schaden anrichten?
Tut er nicht. Aber warum Speicherst du nicht einfach alles in Form einer anderen Sprache. Guck dir mal Wikipedia an. Einfach mal einen Artikel bearbeiten und dann siehst du wie die Sachen gespeichert sind. Vielleicht eignet sich auf BB-Code ganz gut für deine Zwecke?


Also: Der richtige Ansatz wurde hier schon öfters angesprochen, und einen Anderen sollte man auch nicht angehen:

Strikte Trennung von Inhalt und Design.

Inhalt in eine Datenbank - weil er sich oft ändert (Content (!) Management System).

Design (HTML, CSS, ...) als Template. Ob du das nun als Datei speicherst oder auch in die Datenbank steckst bleibt dir überlassen. PHPbb, vBulletin (Forumbase) und Apexx haben beispielsweise sogar die Templates in der Datenbank!



Weitere Tipps zum Thema CMS:
1. Überleg dir als erstes den Aufbau der Datenbank. Strukturiere alles logisch und Sinnvoll in mehreren Datenbanken und Tabellen.
Fange erst dann an etwas zu schreiben. Meistens gibt der sinnvolle Aufbau der Datenbank auch schon vor, wie der PHP-Code auszusehen hat und wie die einzelnen Teile untereinander kommunizieren.
2. Mach dir bewusst wie weit du einmal kommen willst. Willst du mal eine Modul-Engine drin haben, oder Mehrsprachigkeit? Das solltest du dann auch von Anfang an vorsehen, erweitern ist immer schwieriger als von Anfang an ordentlich zu Programmieren.
3. Teste nicht auf Windows :) Lieber einen Linux-Server in eine VM packen ;)
 
Zuletzt bearbeitet:
scor schrieb:
ich arbeite im moment mit mod_redirect, dadurch hast du aufrufe im stile: www.meineseite.de/News/1/ was dank dem mod redirect dann für den server umgewandelt wird in www.meineseite.de/index.php?module=News&page=1

Kannst du mir vielleicht etwas mehr über "mod_redirect" sagen? Grundsätlich stimme ich mit dir überein (dass es schöner aussieht => siehe Wikipedia), aber wie funktioniert das genau?

Kampfgnom schrieb:
Wo ist denn eigentlich dein Problem mit der Datenbank? Meinst du dass eine Datenbank nicht dafür geeignet ist Text zu speichern?

Meinst du wirklich dass die CB-Artikel und News in Form von Textdateien auf dem Server liegen?? ;)

Natürlich glaube ich das nicht :). Daher entnehme ich deiner Aussage, dass man bedenkenlos so vorgehen kann! (Aber was ist mit Webpakteten, die begrenzten Datenbankspeicher haben?)

Kampfgnom schrieb:
Tut er nicht. Aber warum Speicherst du nicht einfach alles in Form einer anderen Sprache. Guck dir mal Wikipedia an. Einfach mal einen Artikel bearbeiten und dann siehst du wie die Sachen gespeichert sind. Vielleicht eignet sich auf BB-Code ganz gut für deine Zwecke?

Nein! Generell finde ich die Art wie in Wikipedia Artikel erstellt werden sehr gut. Dadurch wird z.B. geischert, dass nicht das ganze Seitendesign durchbrochen wird etc. ...

Aber mein CMS ist für Leute, die nichts von HTML und so verstehen (nicht dass man für BB-Code HTML-Kenntnisse haben müsste), aber ich habe einen WYSIWYG-Editor, der lauffähig unter IE, MF und Opera ist, und mit dem kann man wie mit Word die Seiten bearbeiten, was das ganze für Leihen extrem vereinfacht!

Kampfgnom schrieb:
3. Teste nicht auf Windows :) Lieber einen Linux-Server in eine VM packen ;)

Gibt es irgendwo ein gutes Tutorial oder eine gute Erklärung, die mir das etwas beschreibt?

CPU
 
Zuletzt bearbeitet: (Rechtschriebfehler - nobody is perfect)
Wo ich hier so gerade durch das Forum stöbere ist mir noch ein großer Vorteil von der Datenbankvariante eingefallen: Man kann das ganze für eine Suche ausnutzen, da die Infos ja in der Datenbank liegen muss man nich immer jede Datei öffnen und auslesen, sondern man kann einfach in der Datenbank den Inhalt durchsuchen! :)

Oder liege ich da falsch?
 
Es geht Dir aber schon darum ein CMS zu bauen, und nicht um die Website?
(Sonst würde ich vorschlagen ein bestehendes CMS zu verwenden.)
Eine Datenbank solltest Dir wirklich zu Herzen nehmen.
Die sind nunmal dafür da, um Daten zu bewahren und zu verwalten.
Leistunsstärkere Datenbanken sind kein billiger Kram und haben eine große Menge an Funktionen und Eigenschaften,
die der Durchschnittswebbastler nicht kennt/versteht/erklären kann.
Das ist keinesfalls schlimm, aber gerade weil Datenbanken solche Dinge mitbringen, sollte man sie verwenden.
Ganz besonders dann, wenn man nicht die tiefgehende Ahnung hat, was z.B. mit XML möglich ist,
und wie man bestimmte Funktionen sinnvoll realisiert.
Allein beim "Abfragen", sprich SQL vs. "Parsing", gibt es so viele Dinge zu betrachten,
dass Du mit einer Datenbank sicher besser fährst.
Du kannst ja zum Einstieg mal Deine Menüs implementieren, und Dir mal anschauen,
wie man das mit variabler Tiefe etc. in einer DB realisieren kann.

-- -- muckelzwerg
 
Zurück
Oben