Suso: max. mögliche Zeilenlänge // Datenbanken in Textdateien

n'Abend ünne Runde.

Ganz einfache Frage:
Wieviele Zeichen darf ich in meinen .txt Dateien pro Zeile benutzen?

Habe ein Datenbanksystem, basierend auf php und .txt-Dateien und möchte das mal auf ein paar Sicherheitslücken überprüfen. D.h. was passiert, wenn der User in der textarea 50.000 Zeichen eingibt? Ich weiß, dass ich es per php abfragen könnte und ab 5.000 eine Meldung ausgeben könnte, aber das will ich gar nicht: ich möchte die Höchstgrenze kennen!

Meine Recherche ergab diesmal nichts. Mein Editor (PSPad 4.5) ist eben bei 4000 Zeichen abgestürzt (im aktuellen Test läuft aber alles noch mit 10.000 Zeichen in einer Zeile). In den php Befehlen habe ich nur bei fgets() einen Parameter gefunden. Wie sieht das bei file() aus? Und vor allem: gibt es irgendeinen Schreibbefehl, der bei vielen ZEichen versagt.

Wer kann mir helfen?
Grüße
Suso

NACHTRAG: wie gesagt, mein Aktueller Test läuft mit 10.000 Zeichen. Allerdings habe ich bei meinem Test die Daten nicht mit php geschrieben sondern per copy/paste.

  1. Hello,

    Ganz einfache Frage:

    Frage ist mehrteilig und von Dir nicht genau genut vorbereitet und gestellt.

    Wieviele Zeichen darf ich in meinen .txt Dateien pro Zeile benutzen?

    1. Was ist ein Zeichen?
    2. Was ist eine Zeile und wodurch wird die begrenzt?
    3. Wieviele Bytes passen in eine Textdatei und wieviele Zeichen sind das dann?
    4. Welches OS/Filesystem wird verwendet?
    5 ...

    Textarea und die Übermittlung der Daten per HTTP/s begründen dann schon wieder das nächste Fragenpaket:

    1. Welche Browser-Beschränkungen ligen in der Praxis vor?
    2. Welche Übertragungsmethode wird gewählt?
    3. welche Beschränkungen liegen im Server (z.B. Apache)?
    4. welche Beschränkungen setzt die Scriptsprache (hier php.ini)
    5. welche Beschrängungen werden bei HTTP/s in der Praxis durch Proxies gesetzt?
    6 ...

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

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

      Frage ist mehrteilig und von Dir nicht genau genut vorbereitet und gestellt.

      Das wusste ich natürlich nicht. Entschuldige.

      1. Was ist ein Zeichen?

      Das sind für mich 23. Und jetzt kommen zwei :)

      1. Was ist eine Zeile und wodurch wird die begrenzt?

      Zeilenumbruch Steuerzeichen ist CR.LF

      1. Wieviele Bytes passen in eine Textdatei und wieviele Zeichen sind das dann?

      4 mal hebbedihepp und eins im Sinn = Das war meine Frage.

      1. Welches OS/Filesystem wird verwendet?

      Schätze mal Linux (laut phpinfo(); von bplaced.de

      5 ...

      JA?

      Textarea und die Übermittlung der Daten per HTTP/s begründen dann schon wieder das nächste Fragenpaket:

      1. Welche Browser-Beschränkungen ligen in der Praxis vor?

      Würde mich ebenfalls interessieren.

      1. Welche Übertragungsmethode wird gewählt?

      POST. Finde in der phpinfo() kein Parameter post.max_value_length (lt.google jener welcher)

      1. welche Beschränkungen liegen im Server (z.B. Apache)?

      Würde mich auch interessieren.

      1. welche Beschränkungen setzt die Scriptsprache (hier php.ini)

      Dito.

      1. welche Beschrängungen werden bei HTTP/s in der Praxis durch Proxies gesetzt?

      nur HTTP

      6 ...

      genervt?

      Ok, also ich kann die Fragen eben nicht beantworten. Wie sollte ich vorgehen? Gibts eine "idiotensichere" Variante?
      Antwort (vorweggenommen, daher gar nicht mehr komisch): "Gibs programmieren auf, Junge!"

      1. @@Suso:

        nuqneH

        1. Was ist ein Zeichen?
          Das sind für mich 23. Und jetzt kommen zwei :)

        Die Frage war nicht so trivial. Vielleicht geht es dir ja gar nicht um die Anzahl der Zeichen, sondern um die Anzahl der Bytes.

        'Grüße' sind UTF-8-codiert 7 Bytes.

        Und wieviel Zeichen sind 'a' gefolgt von U+0308 combining diaeresis? 2  oder doch nur eins ('ä')?

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
      2. Hello,

        Hallo,

        Frage ist mehrteilig und von Dir nicht genau genut vorbereitet und gestellt.

        Das wusste ich natürlich nicht. Entschuldige.

        1. Was ist ein Zeichen?
          Das sind für mich 23. Und jetzt kommen zwei :)

        Gunnar hat Dich schon auf die Codierung gestupst. Recherchiere hier etwas besser.

        1. Was ist eine Zeile und wodurch wird die begrenzt?
          Zeilenumbruch Steuerzeichen ist CR.LF

        Es gibt Filesysteme/Programmiersysteme, die Textdateien nur mit einem 0x10 (Unixoide) begrenzen, andere benutzten ein 0x13 (MAC bis ?), noch andere die Sequenz 0x13 0x10 (Win-DOS) und noch andere machen es ganz anders.

        1. Wieviele Bytes passen in eine Textdatei und wieviele Zeichen sind das dann?
          4 mal hebbedihepp und eins im Sinn = Das war meine Frage.

        Wenn Du 1. und 2. und 4. genauer liest, wird Dir auffallen, dass die Einfluss auf 3. haben. Die maximale Größe einer Textdatei (in Bytes) ist begrenzt vom Filesystem. Bei Windoofs 32 und FAT32 sind das üblicherweise 2^32 Zeichen, also 4.294.967.296 Bytes. Es passt daher keine ganze DVD in eine Datei. Das ist bei Windoofs uns NTFS schon wieder anders. Die Grenze habe ich vergessen. Sie liegt erheblich höher.

        1. Welches OS/Filesystem wird verwendet?
          Schätze mal Linux (laut phpinfo(); von bplaced.de

        Und das Filesystem?

        5 ...
        JA?

        Mal selber ein bisschen nachdenken? Es gibt leider immer mehr Kriterien, als man sie im Augenblick bedacht hat ;-)

        Textarea und die Übermittlung der Daten per HTTP/s begründen dann schon wieder das nächste Fragenpaket:

        1. Welche Browser-Beschränkungen ligen in der Praxis vor?
          Würde mich ebenfalls interessieren.
        1. Welche Übertragungsmethode wird gewählt?
          POST. Finde in der phpinfo() kein Parameter post.max_value_length (lt.google jener welcher)

        Wie wäre es dann mit
        http://de.php.net/manual/en/ini.core.php#ini.memory-limit
        http://de.php.net/manual/en/ini.core.php#ini.post-max-size
        http://de.php.net/manual/en/info.configuration.php#ini.max-input-time
        http://de.php.net/manual/en/info.configuration.php#ini.max-execution-time

        Mindestens diese vier beeinträchtigen Deine maximale Übertragungs- und Verarbeitungsgröße.

        1. welche Beschränkungen liegen im Server (z.B. Apache)?
          Würde mich auch interessieren.

        Dann lies dort bitte nach, wenn es die obigen Werte überschreitet.
        Der Server hat eigene Beschränkungen für den maxilmalen Post

        1. welche Beschränkungen setzt die Scriptsprache (hier php.ini)
          Dito.

        Siehe z.B. 2.

        1. welche Beschrängungen werden bei HTTP/s in der Praxis durch Proxies gesetzt?
          nur HTTP

        Bei email ist die Zeilenlänge beschränkt, auch wenn die meisten Systeme diese Beschränkung heute nicht mehr einhalten müssen.

        Bei den Browsern gab es etliche, die mehr als 32.768 Bytes inclusive der Bytes für das Zeilenumbruchzeichen übel genommen haben.

        6 ...
        genervt?

        Wer? Du oder ich? Mach Dir nichts draus. Du hast gefragt und das hast Du jetzt davon ;-))

        Ok, also ich kann die Fragen eben nicht beantworten. Wie sollte ich vorgehen? Gibts eine "idiotensichere" Variante?

        Benutze die Suchmaschine(n) deiner Wahl und gib dort dein Anliegen unter Zustatz der zusätzlichen Erkenntnisse aus diesem Thread ein. Und wenn Du fündig geworden bist, dann lass uns bitte daran teilhaben.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

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

          1. Was ist eine Zeile und wodurch wird die begrenzt?
            Zeilenumbruch Steuerzeichen ist CR.LF

          Es gibt Filesysteme/Programmiersysteme, die Textdateien nur mit einem 0x10 (Unixoide) begrenzen, andere benutzten ein 0x13 (MAC bis ?), noch andere die Sequenz 0x13 0x10 (Win-DOS) und noch andere machen es ganz anders.

          Das war natürlich Käse...

          0xA oder #10, 0xD oder #13. Aber das hast Du sicherlich schon selber gemerkt ;-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

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

          nuqneH

          Gunnar hat Dich schon auf die Codierung gestupst. Recherchiere hier etwas besser.

          Er sagt’s …

          Bei Windoofs 32 und FAT32 sind das üblicherweise 2^32 Zeichen, also 4.294.967.296 Bytes.

          … und meint in einem Atemzug, 2³² Zeichen wären 2³² Bytes, tsts.

          Es mag Zeichencodierungen geben, bei denen das so ist, aber deren Existenz sollte man einfach mal vergessen.

          Bei UTF-16 sind es halb so viele Bytes (für Zeichen aus der BMP), bei UTF-8 lässt sich das nicht sagen.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hello Gunnar,

            Gunnar hat Dich schon auf die Codierung gestupst. Recherchiere hier etwas besser.

            Er sagt’s …

            Bei Windoofs 32 und FAT32 sind das üblicherweise 2^32 Zeichen, also 4.294.967.296 Bytes.

            … und meint in einem Atemzug, 2³² Zeichen wären 2³² Bytes, tsts.

            Aua! Natürlich Bytes. Wieviele Zeichen daraus nun gebildet werden können, darum ging es ja gerade. Nur gut, dass Du auf mich aufpasst :-))

            Es mag Zeichencodierungen geben, bei denen das so ist, aber deren Existenz sollte man einfach mal vergessen.

            Bei UTF-16 sind es halb so viele Bytes (für Zeichen aus der BMP), bei UTF-8 lässt sich das nicht sagen.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

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

    Wieviele Zeichen darf ich in meinen .txt Dateien pro Zeile benutzen?

    soviel du willst.
    Zumindest die Speicherung als Textdatei gibt keine Grenzen vor. Wenn es für deine Anwendung günstig ist, Tausende von Zeichen in eine Zeile zu schreiben, dann kannst du das tun.

    was passiert, wenn der User in der textarea 50.000 Zeichen eingibt? Ich weiß, dass ich es per php abfragen könnte und ab 5.000 eine Meldung ausgeben könnte, aber das will ich gar nicht: ich möchte die Höchstgrenze kennen!

    Das hat aber nichts mit Textdateien zu tun - hier liegt die Grenze eher beim Browser, eventuell beim Server, und ist abhängig von der verwendeten Methode (GET oder POST).

    Meine Recherche ergab diesmal nichts. Mein Editor (PSPad 4.5) ist eben bei 4000 Zeichen abgestürzt

    Das dürfte aber eigentlich nicht vorkommen!

    In den php Befehlen habe ich nur bei fgets() einen Parameter gefunden.

    Auch fread() hat einen Parameter, der die maximale(!) Anzahl Bytes angibt, die mit einem Aufruf gelesen werden sollen. Allerdings gibt fread() unter Umständen auch weniger zurück; AFAIK maximal 8192 Bytes auf einen Rutsch, auch wenn du mehr bestellst. Allerdings kümmert sich fread() nicht um Zeilengrenzen.

    Wie sieht das bei file() aus?

    Weiß ich nicht mit Sicherheit. Aber da file() nur ein Array aus Strings zurückgibt, und die Länge eines Strings in PHP nicht explizit beschränkt ist, sollte auch file() kein Problem mit extrem langen Zeilen haben. Das sollte man aber durchaus gründlich testen, wenn das ein realistischer Anwendungsfall ist.

    Und vor allem: gibt es irgendeinen Schreibbefehl, der bei vielen ZEichen versagt.

    Nicht dass ich wüsste.

    Ciao,
     Martin

    --
    Lieber eine Fliege im Porzellanladen
    als ein Elefant in der Suppe.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Wieviele Zeichen darf ich in meinen .txt Dateien pro Zeile benutzen?
      soviel du willst.

      aahhh ... :genieß:

      Zumindest die Speicherung als Textdatei gibt keine Grenzen vor. Wenn es für deine Anwendung günstig ist, Tausende von Zeichen in eine Zeile zu schreiben, dann kannst du das tun.

      Ich setze (meinen Usern) ungern Grenzen. Es sei denn, es besteht eine Gefahr für die Datenbanken.

      was passiert, wenn der User in der textarea 50.000 Zeichen eingibt? Ich weiß, dass ich es per php abfragen könnte und ab 5.000 eine Meldung ausgeben könnte, aber das will ich gar nicht: ich möchte die Höchstgrenze kennen!

      Das hat aber nichts mit Textdateien zu tun - hier liegt die Grenze eher beim Browser, eventuell beim Server, und ist abhängig von der verwendeten Methode (GET oder POST).

      Wie ist das bei POST? Mein Hoster hat post.max_value_length nicht gesetzt.

      Meine Recherche ergab diesmal nichts. Mein Editor (PSPad 4.5) ist eben bei 4000 Zeichen abgestürzt

      Das dürfte aber eigentlich nicht vorkommen!

      Hab ich ihm auch schon gesagt :rolleyes: Er gelobt Besserung!

      Wie sieht das bei file() aus?
      Weiß ich nicht mit Sicherheit. Aber da file() nur ein Array aus Strings zurückgibt, und die Länge eines Strings in PHP nicht explizit beschränkt ist, sollte auch file() kein Problem mit extrem langen Zeilen haben. Das sollte man aber durchaus gründlich testen, wenn das ein realistischer Anwendungsfall ist.

      MAche ich.

      Und vor allem: gibt es irgendeinen Schreibbefehl, der bei vielen ZEichen versagt.

      Nicht dass ich wüsste.

      Vielen Dank für diese ausführlichen Informationen.

      1. @@Suso:

        nuqneH

        :rolleyes:

        Zum Glück macht die Forumsoftware daraus keinen animierten Smiley. :hüpf:

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. :rolleyes:

          Zum Glück macht die Forumsoftware daraus keinen animierten Smiley. :hüpf:

          Ja zum Glück.