Tom: Zeilenendezeichen feststellen

Beitrag lesen

Hello,

* 0D0A, das ist das klassische Zeilenendezeichen in Windows.
* nur 0A ohne 0D davor, Linux
* Vielleicht gibts auch mal nur 0D, ohne nachfolgendes 0A?

Nur 0x0D ist mir heute leider passiert und mein System ist auf die Schnauze gefallen. Ich habe drei Stunden gesucht, bis ich den Fehler gefunden hatte. Eine Kollegin, die Vorarbeiten erledigt und eigentlich nur auf Windows arbeitet, hatte mir ein File untergeschoben, dass etliche (eigentlich nur 0x0D, die übrigen werde ich wohl dann selber reingebaut haben) dieser "Macenden" (leider keine Mettenden) enthalten hat.

Da die Datei nun schon im Dirketaufruf (http) die ganze Zeit im System war und vom Browser einwandfrei angezeigt wurde, habe ich den relevanten Teil dann arglos ins Templateverezeichnis übernommen und diverse Platzhalter eingepflegt.

Dann zeigte die Seite nichts mehr an. Normalerweise hätte eine Fehlernummer kommen müssen:

  
function tpl_read($path)  
{  
    if (!$fp = @fopen($path, 'rb')) return 5;   ## Kann File nicht lesen  
    if (!flock($fp, LOCK_SH)) return 8;         ## File lässt sich nicht sperren  
  
    $tpl = '';  
    while (!feof($fp))  
    {  
        $line = fgets ($fp, MAX_LINE_LEN);  
        if (mb_strlen($line) > (MAX_LINE_LEN - 4)) return 55;    ## Formatfehler in der Datei  
  
        $linecut = ltrim($line);  
        if (substr($linecut,0,1) != '#')  
        {  
            $tpl .= $line;  
        }  
    }  
  
    fclose($fp);  
    return $tpl;  
}  

Die Datei hatte nur ca. 2600 Bytes, also weniger als 8004 Zeichen (MAX_LINE_LEN).
MMn hätte die an einem Stück (einer Zeile) in $tpl landen müssen.
Die Antwort war allerdings immer leer.

Da die Funktion schon im Repository stand und bei allen anderen Templates einwandfrei funktionierte, bin ich zuerst nicht auf die Lösung gekommen, bis ich zum Schluss dann doch endlich den Hex-Editor benutzt habe *grmpf*

Unser Kunde möchte später "einfache Seiten" selber hochladen können, also eigentlich nur Teile davon. Es ist nicht auszuschließen, dass er dann selber auch solchen Unsinn produziert. Das muss ich also abfangen.

Für den HTML-Teil mag das stumpfe Replacen

  
tausche "\r\n" -> geschütztes Zeichen  
tausche "\r" -> "\r\n"  
tausche "\n" -> "\r\n"  
tausche geschütztes Zeichen -> "\r\n"  
  

ausreichend sein.

Ich benötige aber auch noch eine Variante, bei der dann PHP-Files und andere Textdateien hochgeladen werden können. Dass ein Admin auch Fehler macht, habe ich mir ja heute ganz plastisch selber vorgeführt.

Ich möchte daher alle nicht innerhalb von Strings befindlichen Zeichen finden und ggf. tauschen.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bikers-lodge.com