.MB: XML Seite über PHP erstellen

Hallo Community, Ich will PHPs erstellen die html seiten erzeugen. Die daten für das erzeugen der HTML-Seiten will ich nicht über PDO kriegen sondern einfach xml. Beispiel: xml -> php-Umwandlung -> html Hat den vorteil das xml (fast) alle Programme lesen können. Ich möchte nicht über die PDO schnittstelle gehen. Kann man für den kleinen mann im Gebrauch damit was anfangen? Gruß

mb

  1. Warum nicht...

    Allerdings weise ich darauf hin, dass es bei großen Datenbeständen wegen der fehlenden Indexierung und dem recht großen XML-Overhead durchaus problematisch ist, auf XML zurückzugreifen. Gerade Webseiten sollten serverseitig binnen weniger Millisekunden erzeugt werden damit DDoS-Angriffe auf Seiten des Angreifers große Ressourcen erfordern.

    Würde jetzt das Erzeugen und Absenden einer Webseite 20 Millisekunden dauern und zum Erfolg der Attacke 10.000 angreifende Host erfordern, dann würde es nur 2.500 angreifende Hosts erfordern, wenn die Erzeugung 80 Millisekunden dauert. Für Angreifer macht das (im programmiertechnischen Sinn: lahme und "teure") XML den Angriff also billig.

    Bei kleineren Datenbeständen empfehle ich also CSV oder JSON und bei größeren eine "echte" Datenbank.

    Jörg Reinholz

    1. Hallo Jörg

      Warum nicht...

      gut

      Allerdings weise ich darauf hin, dass es bei großen Datenbeständen wegen der fehlenden Indexierung und dem recht großen XML-Overhead durchaus problematisch ist, auf XML zurückzugreifen.

      wieso. ich schreibe eine einfache DTD mit den Tags die ich benötige. Und die Indizieruung kann ich ja in phph über xml machen

      Gerade Webseiten sollten serverseitig binnen weniger Millisekunden erzeugt werden damit DDoS-Angriffe auf Seiten des Angreifers große Ressourcen erfordern.

      Ok da kenne ich mich nicht mit aus

      Bei kleineren Datenbeständen empfehle ich also CSV oder JSON und bei größeren eine "echte" Datenbank.

      es reicht auch einfach ne text datei. Aber ohne die zumteil wichtigen funktionalitäten z.b tags. in CSV ist doch meines wissens nach nur die begrenzung mit nem zeilenumbruch oder mit nem semikolon. deshalb habe ich ja auf xml zugegriffen.

      Lieben Gruß

      mb

      1. Moin!

        Allerdings weise ich darauf hin, dass es bei großen Datenbeständen wegen der fehlenden Indexierung und dem recht großen XML-Overhead durchaus problematisch ist, auf XML zurückzugreifen.

        wieso. ich schreibe eine einfache DTD mit den Tags die ich benötige. Und die Indizieruung kann ich ja in phph über xml machen

        Nun, die DTD, also "Document Type Definition" beschreibt das XML-Dokument, hat aber mit den enthaltenen Daten außer deren abstrakt-formaler Beschreibung nichts zu tun. Wenn Du dann "in PHP indizieren" willst dürfte das bedeuten, dass Du mit einem ungeeigneten Werkzeug etwas auf einem Weg erreichen willst, der von Anfang an nicht sinnvoll erscheint. Etwa auf einer Flasche zum Mars reiten und diese mit einem Hammer antreiben zu wollen (weil man die Flasche mit diesem zum zerSPRINGEN bringen kann) wäre vergleichbar sinntragend.

        Du kennst die Begriffe "sequentielles lesen" und "wahlfreier Zugriff"? (Mir wurden diese 1986 erklärt - und beide sind weder ungültig geworden noch veraltet…)

        Jörg Reinholz

        1. Hallo Jörg,

          Nun, die DTD, also "Document Type Definition" beschreibt das XML-Dokument, hat aber mit den enthaltenen Daten außer deren abstrakt-formaler Beschreibung nichts zu tun.

          OK wie gesagt kenn mich da nicht so ganz aus :/.

          Du kennst die Begriffe "sequentielles lesen" und "wahlfreier Zugriff"? (Mir wurden diese 1986 erklärt - und beide sind weder ungültig geworden noch veraltet…)

          nein kenne ich nicht. ich bin neu in diesem bereich. Erklärst dus mir? Oder gibts da gute einfach erklärte lektüre im internet.

          Liebe Grüße

          MB

  2. Moin!

    Ich will PHPs erstellen die html seiten erzeugen. Die daten für das erzeugen der HTML-Seiten will ich nicht über PDO kriegen sondern einfach xml.
    Beispiel: xml -> php-Umwandlung -> html
    Hat den vorteil das xml (fast) alle Programme lesen können. Ich möchte nicht über die PDO schnittstelle gehen.
    Kann man für den kleinen mann im Gebrauch damit was anfangen?

    Ich verstehe nicht so recht, was du für Aversionen gegen die PDO-Schnittstelle hast? Es gibt doch noch viele andere schlechte Schnittstellen: MySQLi, Memcache und Memcached, SOAP, ...

    Insbesondere hast du bei XML ja sowieso erst mal KEINE Schnittstelle. Warum also die Aufregung? Und was ist die Frage?

    "Kann man das machen?" Ja, kann man.
    "Ist das performant?" Hängt davon ab, was du machst.
    "Funktioniert das?" Wenn du es richtig machst, ja.
    "Würdet ihr mir dazu raten?" Du hast keinerlei Infos geliefert, die einen das beurteilen lassen.
    "Alle Programme können XML lesen, oder?" XML ist ein gutes Datenaustauschformat für komplexe Informationen, aber es definiert seinerseits keine Formate selbst - die Kompatibilität zwischen zwei für sich genommen XML-fähigen Programmen ist also absolut nicht gewährleistet. Abgesehen davon wäre es aus meiner Sicht eher irrelevant, dass Programme XML lesen können - du willst das XML ja für die Webseite nehmen, im Zweifel ist es also genau für diese Aufgabe optimiert, auch hinsichtlich der Datenmenge durch Weglassen der überflüssigen Informationen. Spannender ist eigentlich das Programm, dass dir dieses XML schreibt.

    Grüße Sven

    1. Moin Sven,

      Ich verstehe nicht so recht, was du für Aversionen gegen die PDO-Schnittstelle hast? Es gibt doch noch viele andere schlechte Schnittstellen: MySQLi, Memcache und Memcached, SOAP, ...

      Klar aber das ist mit meinen datenbeständig sprich einfaches ausgeben von fomatierten texten mit kanonen auf spatzen geschossen meiner meinung nach.

      Insbesondere hast du bei XML ja sowieso erst mal KEINE Schnittstelle. Warum also die Aufregung? Und was ist die Frage?

      Genau keine schnittstelle. mein Ziel.

      "Funktioniert das?" Wenn du es richtig machst, ja.

      ich hab massig an quelverweisen über XML und den austausch. Da verliehrt man den überblick. Kannst du mir eine gute Referenz raten was dieses Thema betriefft?

      "Würdet ihr mir dazu raten?" Du hast keinerlei Infos geliefert, die einen das beurteilen lassen.

      Sorry

      XML ist ein gutes Datenaustauschformat für komplexe Informationen, aber es definiert seinerseits keine Formate selbst - die Kompatibilität zwischen zwei für sich genommen XML-fähigen Programmen ist also absolut nicht gewährleistet.

      Jo ist mir klar

      du willst das XML ja für die Webseite nehmen, im Zweifel ist es also genau für diese Aufgabe optimiert, auch hinsichtlich der Datenmenge durch Weglassen der überflüssigen Informationen.

      Spannender ist eigentlich das Programm, dass dir dieses XML schreibt.

      Werde ich zuküntig als XML gästebuch machen.

      Lieben gruß,

      MB

      1. Moin!

        Werde ich zuküntig als XML gästebuch machen.

        Und wieso verrätst Du uns nicht, dass es um derart geringe Datenmengen geht? Mehr als 3 Einträge a 200 Zeichen pro Jahr kommen da wohl kaum zusammen ...

        Tipp: Gleich als HTML (wenn es denn, des Buzzwortes wegen XML sein muss, dann als XHTML) speichern (und einfach inkludieren) spart sehr viel Rechenzeit und noch mehr Nachdenken.

        Jörg Reinholz

        1. Hallo,

          Mehr als 3 Einträge a 200 Zeichen pro Jahr kommen da wohl kaum zusammen ...

          und was ist mit den ganzen Gästebuchbots, die dafür sorgen sollen, dass man denkt, man hätte soundsoviele zig Seitenbesucher? Oder sind die alle wieder zurückgepfiffen?

          Gruß
          Kalk

        2. Moin!

          Gästebuch also. Ok. So geht das bei mir:

          Spam und Häufigkeit:

          (Vor dem Eintrag steht ein Spamfilter, der ganz gut zu funktionieren scheint. Jedenfalls bekomme ich kaum Spam zu sehen, habe aber in den Jahren seit 2010 immerhin auch schon genau 51 Kommentare erhalten. Davon habe ich 13 Blödelkommentare nicht veröffentlicht (ich sehe mir die Kommentare vorher an) - es bleiben 38 von denen 12 meine Antworten sind. Macht also 36 Nutzer-Kommentare in 5 Jahren ... auf einer Webseite mit 12 Kategorien und insgesamt ca. 50 Seiten.

          Ich habe das in meinem kleinen CMS so realisiert:

          Die Kommentare werden in der Rohform einzeln in Textdateien geschrieben, welche einfach eine aufsteigende Nummer haben. Dafür sorgt eine Datei namens next_nr, welche nur die neue Nummer enthält und beim Speichern eines Kommentars durch folgenden "Einzeiler" hochgesetzt wird:

          [file_put_contents](http://php.net/manual/de/function.file-put-contents.php)( '/PFAD_ZU/next_nr', file_get_contents('/PFAD_ZU/next_nr') + 1), LOCK_EX );
          

          Das löst die von Dedlfix aufgeworfenen Probleme.

          Die Kommentare selbst werden vor dem Speichern getrimmt und durch htmlspecialchars() gejagt (Ich weiß: Das entspricht nicht ganz der reinen Lehre, wonach man den Input als Rohdaten speichern soll). Metadaten (angegebener Name und Datum) landen (ebenso bereinigt) in einer CSV-Datei, welche auch die Nummer des zugehörigen Artikels enthält.

          Vor der Ausgabe des Kommentars versehe ich diesen mit den Metadaten und mit den rahmenden <div>, ersetze die Zeilenumbrüche durch <br>. Damit auch dafür nicht unnötig Rechenzeit verbraten wird hat das CMS einen Cache.

          Jörg Reinholz

          1. Hallo,

            es bleiben 38 von denen 12 meine Antworten sind. Macht also 36 Nutzer-Kommentare in 5 Jahren ...

            dein mathematischer Co-Prozessor ist defekt.

            Gruß
            Kalk

            1. Moin!

              es bleiben 38 von denen 12 meine Antworten sind. Macht also 36 Nutzer-Kommentare in 5 Jahren ...

              dein mathematischer Co-Prozessor ist defekt.

              Nicht wirklich defekt. Nur noch nicht auf Betriebstemperatur. (Ankunft war gestern recht spät…) Auch das Skript welches verhindern soll, dass Links in Quelltext eingebaut werden, funktioniert dann nicht richtig.

              Jörg Reinholz

          2. Ich habe das in meinem kleinen CMS so realisiert:

            Uff du hast ein eigenes CMS, wenn auch nur klein?!

            Ich bin in php eingestiegen und hab auch keinrlei Erfahrung mit der gängigen Methode der Programmierung in php, lern die Befehle.

            Gruß mb

            1. Hallo,

              Ich bin in php eingestiegen und hab auch keinrlei Erfahrung mit der gängigen Methode der Programmierung in php, lern die Befehle.

              das sind ja nun nicht gar so viele - dafür aber eine unüberschaubare Menge an Funktionen, teils redundant, teils sehr spezialisiert ...

              Aber das ist keine gute Herangehensweise. Einfach nur lernen, was die Programmiersprache zu bieten hat, vermittelt noch kein Können. Das ist so, als wolltest du eine natürliche Sprache lernen (z.B. Französisch), indem du ein Wörterbuch durchackerst und dir die Vokabeln einprägst. Dann fehlt dir trotzdem noch jegliches Wissen über Satzbau und Grammatik, Aussprache und das Gefühl für den richtigen Begriff, wenn mehrere möglich wären.

              Im Falle von PHP finde ich es viel wichtiger, Grundlagen und Zusammenhänge zu sehen. Das kann damit anfangen, dass man ein Einsteiger-Tutorial "nachdenkt" und nachspielt, vor allem versucht zu verstehen, was da genau abläuft und warum, und dann gern auch mal eigene Versuche macht.
              Spätestes dann ist es aber IMO unabdingbar, auch über den Tellerrand von PHP selbst zu schauen: Wo läuft das PHP-Script? Auf dem Webserver. Es ist also wichtig zu wissen, wie PHP mit dem Server zusammenspielt, man sollte ein bisschen über Client-Server-Modelle und über HTTP wissen.

              Und man sollte die ersten Gehversuche möglichst nicht auf einem öffentlichen Webspace in freier Wildbahn machen, weil die Gefahr groß ist, dass man durch Unwissenheit etwas verbockt, was andere ausnutzen können. So wurde beispielsweise schon so manches Gästebuchscript oder Kontaktformular unfreiwillig zur Spamschleuder. Besser ist es, sich auf dem eigenen Rechner eine kleine Spiel- und Testumgebung einzurichten. XAMPP ist auch von Einsteigern relativ leicht einzurichten und ist für die ersten Gehversuche völlig okay.

              Und ruhig ab und zu Fachleute fragen (gern auch hier), wenn man etwas Neues, Unbekanntes ausprobiert. Dann bekommt man fast immer auch fundierte, weiterführende Information, oder manchmal auch ein verzweifeltes "Nein! Tu das nicht!", wenn man kritische Stellen übersehen hat.

              So. Wer bis hierher gelesen hat, darf sich jetzt einen Lebkuchen aus der Box nehmen oder "God shave the Queen" singen. :-)

              So long,
               Martin

              1. Hallo Martin

                Ich bin in php eingestiegen und hab auch keinrlei Erfahrung mit der gängigen Methode der Programmierung in php, lern die Befehle.

                das sind ja nun nicht gar so viele - dafür aber eine unüberschaubare Menge an Funktionen, teils redundant, teils sehr spezialisiert ...

                Aber das ist keine gute Herangehensweise. Einfach nur lernen, was die Programmiersprache zu bieten hat, vermittelt noch kein Können.

                Das ist mir sehrwohl bewusst.

                Im Falle von PHP finde ich es viel wichtiger, Grundlagen und Zusammenhänge zu sehen.

                Da stimme ich voll kommen überein. Nur ich muss da wieder n Pojekt machen und ein Dozent fordert zu viel in zu kurze zeit ohne PHP Erfahrung und hat keinen plan von der Materie. daher bin icch siozusagen gezwungen :/

                Und ruhig ab und zu Fachleute fragen (gern auch hier), wenn man etwas Neues, Unbekanntes ausprobiert. Dann bekommt man fast immer auch fundierte, weiterführende Information, oder manchmal auch ein verzweifeltes "Nein! Tu das nicht!", wenn man kritische Stellen übersehen hat.

                Deswegen poste ich hier ;-)

                Lieben Gruß

                MB

            2. Moin!

              Ich habe das in meinem kleinen CMS so realisiert:

              Uff du hast ein eigenes CMS, wenn auch nur klein?!

              Ja. Sehr klein, sehr schlank, sehr schnell und sehr sicher: Dank der Tatsache, dass darin nichts Überflüssiges existiert dessen Sicherheit ich verschlampt haben könnte und dass es eben wegen dieses Mangels an überflüssigen Rechenzeitverbratern auch sehr schnell ist, haben alle damit realisierten Webseiten bisher allen Arten von Angriffen (DDoS, Hackversuche u.a. eines äußerst selbst ernannten "Marktführers bei der Erstellung von Webseiten" aus Düsseldorf) standgehalten.

              Ich bin in php eingestiegen und hab auch keinrlei Erfahrung mit der gängigen Methode der Programmierung in php, lern die Befehle.

              Wie schon Martin schrieb ist es hierbei geboten, die ersten Schritte in der Isolation auf einem, nur im eigenen Netz (http://localhost oder ein Raspi oder eine virtuelle Maschine z.B. mit Ubuntu-server geht auch) Server zu tun (und auch nicht jedes Skript aus jedem Archiv einfach zu übernehmen) weil der eigene, aus dem Netz erreichbare und ggf. also durch Dritte ungewollt fernbedienbare Webserver sonst schnell zur Spam- und Wurmschleuder wird (was auch zur Folge haben kann, dass der Webauftritt aus den Ergebnissen der Suchmaschinen fliegt, Mails nicht mehr ankommen etc.)

              So ganz nebenher ergibt sich also, dass das "Lernen der Befehle" letztendlich nur ein kleiner Teil des "Programmieren lernen" ist, der weitaus größere Teil des Hirnschmalzes geht für das Erlernen (und später Entwickeln) von Konzepten drauf. Eines davon ist dann vor, dass man sich beim Programmieren darauf einlassen können muss, so dumm und abstrakt wie die Maschine zu denken.

              Jörg Reinholz

              1. Hallo Jörg

                Mit PHP?

                wie gesagt komm aus Java Eclipse Ecke und habe ich 2 meiner Schulprojekte vorgetragen.

                Ich geb dir ganz recht wie schon dem Martin.

                Ich will schon die modularisiert arbeiten und n Datenmodell verwenden.

                Ich mag kein Copy / Past.

                LG

                MB

  3. Tach!

    Die daten für das erzeugen der HTML-Seiten will ich nicht über PDO kriegen sondern einfach xml.

    Da liegt schon der grundlegende Irrtum. Es wird mit XML nicht einfacher, wenn man es richtig machen möchte. Fehlerbehandlung braucht man bei Datenbank und Dateisystem, da hat keines der beiden Systeme die Nase vorn. Bei Dateisystemzugriffen muss man sich aber extra noch mit dem Thema des konkurrierenden Zugriffs beschäftigen. Sonst kann es unter vielleicht seltenen, aber sehr schwer nachvollziehbaren Umständen zu einem Datenverlust kommen. Der Prozess von Spammer A hat die Datei grad geöffnet und löscht ihren Inhalt, um ihn neu schreiben zu können. In dem Augenblick liest Spammer B die Datei und findet keinen vor, schreibt sein Zeug rein und speichert sie, nachdem Spammer A fertiggeschrieben hat. Damit verschwinden alle vorhergehenden im Gästebuch eingetragenen Werbungen und nur die von B bleibt erhalten. Das muss man für die Datenbank nicht beachten, weil die von Haus aus mit solchen konkurrierenden Zugriffen umgehen kann. Selbst wenn man nur das dateibasierende SQLite nimmt.

    Weiterhin braucht man ein Verwaltungswerkzeug, um zum Beispiel die Rechtschreibfehler oder kaputten Links der Spammer korrigieren zu können. Für die Datenbankvariante gibt es zur Not fertige Verwaltungstools. Für die XML-Variante muss man sich eins selbst schreiben. Man kann ja nicht die Datei im Editor geöffnet haben und ein paar Minuten lang darin arbeiten, weil in der Zwischenzeit die Spammer das Original weiter füllen. Diese neuen Einträge wandern nicht live in den Editor und gehen beim Speichern der eigenen Änderungen verloren. Das ist dann ein Szenario wie oben, nur dass die Chance auf Verlust deutlich höher ist, weil die Verweildauer im Editor sehr viel läger ist.

    Wenn die Spammer fleißig sind, hat das System immer mehr Arbeit, weil stets die gesamte Datei neu gelesen, geparst und bei Bedarf wieder geschrieben werden muss. Gelesen werden müssen alle Einträge auch in der Datenbank-Variante, aber das nur zum Anzeigen und wenn man kein Paging verwendet. Das Schreiben geht jedenfalls effizienter, weil das DBMS die neuen Daten anhängen kann und nicht in eine Struktur einarbeiten muss, die sich durch die gesamte Datei zieht.

    Zusammenfassung: Arbeit spart man sich mit (XML-)Datei statt Datenbank nicht wirklich, wenn man es richtig machen möchte. Man hat ein paar Umstände zu beachten, für die ein DBMS bereits Lösungen eingebaut hat.

    dedlfix.

    1. Moin,

      Weiterhin braucht man ein Verwaltungswerkzeug, um zum Beispiel die Rechtschreibfehler oder kaputten Links der Spammer korrigieren zu können.

      wozu das denn? Sollen die sich doch blamieren, so gut sie können! ;-)

      So long,
       Martin

    2. Ok, danke für die ausführliche info

      Gruß

      mb