truejoke: Formatieren von per php eingelesener txt-datei

Hallo,
zur bequemeren Pflege habe eine "Textdatei.txt" erstellt, die per PHP (<?php require("Textdatei.txt")?> in den entsprechenden Bereich der html-Seite eingelesen wird. Die grundsätzliche Formatierung (Schrift, ZAP, usw.) wird durch css gesteuert.

Frage:
Wie bekomme ich es hin, dass auch andere Formatierungen, wie Zeilenumbrüche, Absatz oder Überschriften, die in txt nicht vorhanden sind, übernommen werden? Gibt es andere Textformate, doc, rtf, die mit PHP eingelesen werden können, oder gibt es andere Techniken?

Ziel ist es jemanden der keine große Ahnung im Umgang mit Computern hat, und der sich schon gar nicht in ein CMS einarbeiten will, eine einfache Möglichkeit zu bieten Teile seiner Seite selber zu pflegen ohne in die eigentliche Seite einzugreifen.

Vielen Dank für eure Hilfe

  1. Wie bekomme ich es hin, dass auch andere Formatierungen, wie Zeilenumbrüche, Absatz oder Überschriften, die in txt nicht vorhanden sind, übernommen werden? Gibt es andere Textformate, doc, rtf, die mit PHP eingelesen werden können, oder gibt es andere Techniken?

    Indem du sie nicht mittels require einbindest und durch den PHP-Interpreter jagst sondern mit php einliest und entspreched selbst behandelst. z.B. mit file_get_contents - vorher aber bitte prüfen, ob die Datei wirklich existiert :)

    1. Hello,

      Wie bekomme ich es hin, dass auch andere Formatierungen, wie Zeilenumbrüche, Absatz oder Überschriften, die in txt nicht vorhanden sind, übernommen werden? Gibt es andere Textformate, doc, rtf, die mit PHP eingelesen werden können, oder gibt es andere Techniken?

      Indem du sie nicht mittels require einbindest und durch den PHP-Interpreter jagst sondern mit php einliest und entspreched selbst behandelst. z.B. mit file_get_contents - vorher aber bitte prüfen, ob die Datei wirklich existiert :)

      Warum bitte vorher überprüfen, ob die Datei tatsächlich funktioniert?
      Das ist und bleibt unsinnig. Man erzeugt sich dadurch immer einen TOCTOU-Fehler.
      http://en.wikipedia.org/wiki/Time-of-check-to-time-of-use
      Wenn die Datei nicht vorhanden ist, wird file_get_contents() ganz normal einen Fehler auslösen. Diesen Fehler kann man abfangen und abfragen. Dazu muss nur track_errors eingeschaltet werden. Dann steht der Fehlergrund (zumindest im Klartext) anschließend in $php_errormsg.
      http://de.php.net/manual/en/reserved.variables.phperrormsg.php
      Oder man definiert einen eigenen Error-Handler.

      PHP schmeißt bei den üblichen Out-of-the-Box-Einstellungen für das Errorhandling noch eine Fehlermeldung an die Standardausgabe. Diese kann man im heißen Betrieb dann abschalten durch passende Wahl des Errorlevels, umleiten in eine Datei oder zur Not auch mit @ unterdrücken.

      Dass überhauot ein Fehler aufgetreten ist, merkt man bei den Filefunktionen durch Auswertung des Handles oder bei den gekapselten Filefunktionen, die über Namen arbeiten (so wie file_get_contents()) über die Auswertung des Rückgabewertes.

      Diese Auswertung sollte man nie vergessen!

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi,

        Warum bitte vorher überprüfen, ob die Datei tatsächlich funktioniert?
        Das ist und bleibt unsinnig. Man erzeugt sich dadurch immer einen TOCTOU-Fehler.

        das überzeugt mich.

        Wenn die Datei nicht vorhanden ist, wird file_get_contents() ganz normal einen Fehler auslösen. Diesen Fehler kann man abfangen und abfragen. Dazu muss nur track_errors eingeschaltet werden. Dann steht der Fehlergrund (zumindest im Klartext) anschließend in $php_errormsg.
        http://de.php.net/manual/en/reserved.variables.phperrormsg.php
        Oder man definiert einen eigenen Error-Handler.

        Warum so viel Aufwand? Im Fehlerfall gibt file_get_contents() einfach false zurück. Das kann man abfragen. *Warum* der Aufruf fehlschlägt, ist fürs Debugging zwar interessant, zur Laufzeit des Scipts im Produktivbetrieb aber nicht mehr.

        Dass überhauot ein Fehler aufgetreten ist, merkt man bei den Filefunktionen durch Auswertung des Handles oder bei den gekapselten Filefunktionen, die über Namen arbeiten (so wie file_get_contents()) über die Auswertung des Rückgabewertes.

        Sag ich doch.

        Ciao,
         Martin

        --
        Um mit einem Mann glücklich zu werden, muss eine Frau ihn sehr gut verstehen und ein bisschen lieben.
        Um mit einer Frau glücklich zu werden, muss ein Mann sie sehr lieben und darf gar nicht erst versuchen, sie zu verstehen.
        1. Hello,

          Warum so viel Aufwand? Im Fehlerfall gibt file_get_contents() einfach false zurück. Das kann man abfragen. *Warum* der Aufruf fehlschlägt, ist fürs Debugging zwar interessant, zur Laufzeit des Scipts im Produktivbetrieb aber nicht mehr.

          Da irrst Du zumindest statistisch teilweise :-)

          Es wird immer von den Bedingungen der Applikation abhängen, warum eine Datei nicht zur Verfügung steht. Es könnte sein, dass sie gerade gesperrt ist, dass sie nicht vorhanden ist, dass die Rechte des Prozesses nicht ausreichen, dass der Pfad nicht stimmt, oder bei der Wrapper-Variante die Domain der URL gerade nicht erreichbar ist, ...

          #---------
          BTW:
          Wie das mit der Sperre der Datei speziell bei file_get_contents() aussieht, weiß ich im Moment nicht genau, aber generell sollte sowas in einer Multi-User-Umgebúng möglich sein.

          Nach POSIX-Standard müssen Streams während der Bearbeitung (hier nur das Einlesen des angeforderten Parts) gesperrt sein. Nun weiß ich aber weder, ob file_get_contents() das prüft, noch ob es vor dem Lesen die geforderte Sperre setzt und auch nicht, ob dann ein blocking oder ein non-blocking Lock versucht wird.

          Und es ist mir im Moment auch nicht bekannt, was file_get_contents() liefert, wenn der Wert des Start-Arguments (Offset) hinter der Datei liegt.

          Das wäre alles noch zu untersuchen.
          #----------

          Das kann dann durchaus

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hallo,

            *Warum* der Aufruf fehlschlägt, ist fürs Debugging zwar interessant, zur Laufzeit des Scipts im Produktivbetrieb aber nicht mehr.
            Da irrst Du zumindest statistisch teilweise :-)

            das ist wohl mein Schicksal.

            Es wird immer von den Bedingungen der Applikation abhängen, warum eine Datei nicht zur Verfügung steht. Es könnte sein, dass sie gerade gesperrt ist, dass sie nicht vorhanden ist, dass die Rechte des Prozesses nicht ausreichen, dass der Pfad nicht stimmt, oder bei der Wrapper-Variante die Domain der URL gerade nicht erreichbar ist, ...

            Von allen Fehlerursachen, die du hier aufzählst, wäre IMHO nur Locking zu betrachten. Alle anderen sind auf Programmierfehler, Konfigurationsfehler oder externe Fehler (URL nicht erreichbar) zurückzuführen und bedeuten, dass das Script und seine Konfigurationsumgebung sowieso nochmal zum Debugging muss.

            Wie das mit der Sperre der Datei speziell bei file_get_contents() aussieht, weiß ich im Moment nicht genau, aber generell sollte sowas in einer Multi-User-Umgebúng möglich sein.

            Ja, eigentlich schon, wobei konkurrierendes Lesen ja unbedenklich ist. Auf die Schnelle habe ich aber den Eindruck, dass file_get_contents() trotz eines gesetzten Locks lustig irgendwas liest. Die diversen Konstruktionen mit flock() und file_get_contents() lassen mich sowas vermuten.

            Und es ist mir im Moment auch nicht bekannt, was file_get_contents() liefert, wenn der Wert des Start-Arguments (Offset) hinter der Datei liegt.

            Weiß ich auch nicht. Als Programmierer würde ich in diesem Fall das PHP-Handbuch als mein Pflichtenheft so auslegen, dass ich false zurückzugeben hätte.

            Das kann dann durchaus

            Ja, das kann wohl. ;-)

            So long,
             Martin

            --
            Die beste Informationsquelle sind Leute, die jemand anderem versprochen haben, nichts weiterzuerzählen.
              (alte Journalistenweisheit)
            1. Hello,

              Von allen Fehlerursachen, die du hier aufzählst, wäre IMHO nur Locking zu betrachten. Alle anderen sind auf Programmierfehler, Konfigurationsfehler oder externe Fehler (URL nicht erreichbar) zurückzuführen und bedeuten, dass das Script und seine Konfigurationsumgebung sowieso nochmal zum Debugging muss.

              Eben nicht! Es kommt auf die Applikation an.
              Wenn ich lesend auf eine Datei zugreife, und sie ist nicht vorhanden, muss vielleicht genau DANN auf den Programmteil "Anlegen" verwezigt werden. Der Status kann also durchaus Auswirkungen auf den Steuerfluss des Programmes haben.

              Wie das mit der Sperre der Datei speziell bei file_get_contents() aussieht, weiß ich im Moment nicht genau, aber generell sollte sowas in einer Multi-User-Umgebúng möglich sein.

              Ja, eigentlich schon, wobei konkurrierendes Lesen ja unbedenklich ist. Auf die Schnelle habe ich aber den Eindruck, dass file_get_contents() trotz eines gesetzten Locks lustig irgendwas liest. Die diversen Konstruktionen mit flock() und file_get_contents() lassen mich sowas vermuten.

              File_get_contents() ist mit flock() nicht stuerbar, da man an das Handle ja nicht herankommt. Dies müsste also dann über ein Funktionsargument gesteuert werden, so wie es bei file_put_contents() der Fall ist, wird es aber nicht. Nach POSIX müsste die Funktion aber sowieso den Stream zum Lesen absichern. Ich habe das aber noch nicht nachgeschaut im Quellcode, ist auch etwas komplex. Vielleicht kann Christian hier mehr sagen.

              Generell gilt, dass auch zum Lesen gesperrt werden sollte, zumindest mit einem LOCK_SH, wenn man Wert darauf legt, keine korrupten Daten anzuzeigen.

              Es soll ja nicht fälschlicherweise gelesen werden, während jemand anderes gerade schreiben lässt.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
  2. hi,

    Wie bekomme ich es hin, dass auch andere Formatierungen, wie Zeilenumbrüche, Absatz oder Überschriften, die in txt nicht vorhanden sind, übernommen werden?

    Gar nicht. Was nicht vorhanden ist, kann auch nicht übernommen werden ;-)

    [..] oder gibt es andere Techniken?

    Die Idee, eine Nicht-HTML-Quelle zu schreiben, aus der dann HTML gemacht wird, ist schon OK. Es böte sich evntl. an, die Quelle ein bischen zu strukturieren, z.B. als ini-Datei. Die kann PHP ganz gut einlesen auf ein Array.

    Hotti