Dennis: Zeile in Textdatei löschen - aber wie

0 163

Zeile in Textdatei löschen - aber wie

Dennis
  • php
  1. 0
    Harry
    1. 0
      Dennis
      1. 0
        Fabian Transchel
        1. 0
          Dennis
          1. 0
            Dennis
    2. 0
      Auge
  2. 0
    Tom
    1. 0
      Harry
      1. 0
        Tom
        1. 0
          Tom
        2. 0
          Harry
          1. 0
            Tom
            1. 0
              Harry
              1. 0
                Tom
                1. 0

                  Nervende Werbung

                  Dennis
                  • meinung
                  1. 0
                    Fabian Transchel
                    1. 0
                      Dennis
                  2. 0
                    Schuer
                    1. 0
                      Tom
                      1. 0
                        Schuer
                        1. 0
                          Tom
    2. 0
      Dennis
      1. 0
        Tom
        1. 0
          Dennis
          1. 0
            Tom
            1. 0
              Dennis
              1. 0
                Tom
                1. 0
                  Dennis
                  1. 0
                    Tom
                    1. 0
                      Dennis
                      1. 0
                        Tom
                        1. 0
                          Dennis
                          1. 0
                            Tom
                            1. 0
                              Dennis
                              1. 0
                                Tom
                                1. 0
                                  Dennis
                                  1. 0

                                    safe Mode

                                    Dennis
                                  2. 0
                                    Tom
                                    1. 0
                                      Dennis
                                      1. 0

                                        Geschafft!!! Aber nun weiter...

                                        Dennis
                                        1. 0
                                          Tom
                                          1. 0

                                            Verschieben von Daten - Archivierung

                                            Dennis
                                            1. 0
                                              Tom
                                              1. 0
                                                Dennis
                                                1. 0
                                                  Tom
                                                  1. 0
                                                    Tom
                                                    1. 0
                                                      Dennis
                                                      1. 0
                                                        Dennis
                                                        1. 0

                                                          News Script

                                                          Dennis
                                                          1. 0

                                                            File Locking, Fehlerbehandlung

                                                            Tom
                                                            1. 0
                                                              Dennis
                                                              1. 0
                                                                Tom
                                                                1. 0
                                                                  Dennis
                                                                  1. 0
                                                                    Tom
                                                                    1. 0
                                                                      Tom
                                                                      1. 0
                                                                        Dennis
                                                                        1. 0
                                                                          Dennis
                                                                          1. 0
                                                                            Tom
                                                                            1. 0
                                                                              Dennis
                                                                              1. 0
                                                                                Tom
                                                                                1. 0
                                                                                  Dennis
                                                                                  1. 0
                                                                                    Tom
                                                                                    1. 0
                                                                                      Dennis
                                                                                      1. 0
                                                                                        Tom
                                                                                        1. 0
                                                                                          Dennis
                                                                                          1. 0
                                                                                            Tom
                                                                                            1. 0
                                                                                              Dennis
                                                                                              1. 0
                                                                                                Tom
                                                                                                1. 0
                                                                                                  Dennis
                                                                                                  1. 0
                                                                                                    Tom
                                                                                                    1. 0
                                                                                                      Dennis
                                                                                                      1. 0
                                                                                                        Tom
                                                                                                        1. 0

                                                                                                          Haaaalol, sieht uns jemand?

                                                                                                          Tom
                                                                                                          • zu diesem forum
                                                                                                          1. 0

                                                                                                            Haaa *lol*, hier liest keiner mehr :-(

                                                                                                            Dennis
                                                                                                            1. 0

                                                                                                              HAAAALLOOO, SIEHT UNS KEINER? Wertebereich von Schlüsseln

                                                                                                              Tom
                                                                                                              • datenbank
                                                                                                              1. 0
                                                                                                                Vinzenz
                                                                                                              2. 0
                                                                                                                Vinzenz
                                                                                                              3. 0
                                                                                                                Vinzenz
                                                                                                                1. 0
                                                                                                                  Tom
                                                                                                        2. 0

                                                                                                          Functionen, Archivierung

                                                                                                          Dennis
                                                                                                          1. 0
                                                                                                            Tom
                                                                                                            1. 0
                                                                                                              Dennis
                                                                                                              1. 0

                                                                                                                Tom?

                                                                                                                Dennis
                                                                                                                1. 0
                                                                                                                  Tom
                                                                                                                  1. 0

                                                                                                                    Projekt Flatfiles: Datensicherung

                                                                                                                    Tom
                                                                                                                  2. 0
                                                                                                                    Tom
                                                                                                                    1. 0
                                                                                                                      Dennis
                                                                                                                      1. 0
                                                                                                                        Tom
                                                                                                                        1. 0

                                                                                                                          Schnelles und speicherplatzsparendes Speichern in Flatfiles

                                                                                                                          Dennis
                                                                                                                          1. 0

                                                                                                                            Speichern in Flatfiles

                                                                                                                            Tom
                                                                                                                            1. 0
                                                                                                                              Dennis
                                                                                                                              1. 0
                                                                                                                                Tom
                                                                                                                                1. 0
                                                                                                                                  Dennis
                                                                                                                                  1. 0

                                                                                                                                    Tom?

                                                                                                                                    Dennis
                                                                                                                                    1. 0
                                                                                                                                      Dennis
                                                                                                                                      1. 0
                                                                                                                                        Arx
                                                                                                                                        1. 0

                                                                                                                                          Flatfile Funktionen

                                                                                                                                          Dennis
                                                                                                                                          1. 0
                                                                                                                                            Arx
                                                                                                                                            1. 0
                                                                                                                                              Dennis
                                                                                                                                              1. 0
                                                                                                                                                Arx
                                                                                                                                                1. 0
                                                                                                                                                  Dennis
                                                                                                                                                  1. 0
                                                                                                                                                    Arx
                                                                                                                                                    1. 0
                                                                                                                                                      Dennis
                                                                                                                                                      1. 0

                                                                                                                                                        Signatur

                                                                                                                                                        Arx
                                                                                                                                                        • zu diesem forum
                                                                                                                                                        1. 0
                                                                                                                                                          Dennis
                                                                                                                                                          1. 0
                                                                                                                                                            Arx
                                                                                                                                                            1. 0
                                                                                                                                                              Dennis
                                                                                                                                                              1. 0
                                                                                                                                                                Dennis
                                                                                                                                                                1. 0
                                                                                                                                                                  Arx
                                                                                                                                                              2. 0
                                                                                                                                                                Arx
                                                                                                                                                                1. 0
                                                                                                                                                                  Dennis
                                                                                                                                                                  1. 0
                                                                                                                                                                    Arx
                                                                                                                                                                    1. 0
                                                                                                                                                                      Arx
                                                                                                                                                                      1. 0
                                                                                                                                                                        Dennis
                                                                                                                                                                        1. 0
                                                                                                                                                                          Arx
                                                                                                                                                                          1. 0
                                                                                                                                                                            Dennis
                                                                                                                                                                            1. 0
                                                                                                                                                                              Arx
                                                                                                                                                                              1. 0
                                                                                                                                                                                Dennis
                                                                                                                                                                                1. 0
                                                                                                                                                                                  Arx
                                                                                                                                                                                  1. 0
                                                                                                                                                                                    Dennis
                                                                                                                                                                                    1. 0
                                                                                                                                                                                      Arx
                                                                                                                                                                                      1. 0
                                                                                                                                                                                        Dennis
                                                                                                                                                                                        1. 0
                                                                                                                                                                                          Arx
                                                                                                                                                                                          1. 0
                                                                                                                                                                                            Dennis
                                                                                                                                                                                            1. 0
                                                                                                                                                                                              Tom
                                                                                                                                                                                              1. 0
                                                                                                                                                                                                Dennis
                                                                                                                                                                                                1. 0
                                                                                                                                                                                                  Tom
                                                                                                                                                                                        2. 0
                                                                                                                                                                                          Thomas J.S.
                                                                                                                                                                                          1. 0
                                                                                                                                                                                            Dennis
                                                                                                                                                                                            1. 0
                                                                                                                                                                                              Thomas J.S.
                                                                                                                                                                                              1. 0
                                                                                                                                                                                                Dennis
                                                                                                                                                                    2. 0
                                                                                                                                                                      Dennis
                                                                                                                                                                      1. 0
                                                                                                                                                                        Arx
                                                                                                                                                                        1. 0

                                                                                                                                                                          Dies ist ein Test

                                                                                                                                                                          Dennis
                                                                                                                                                                          1. 0
                                                                                                                                                                            Arx
                                                                                                                                                                            1. 0
                                                                                                                                                                              Dennis
                                                                                                                                                                              1. 0
                                                                                                                                                                                Jan R.
                                                                                                                                                                                1. 0
                                                                                                                                                                                  Dennis
                                                                                                                                          2. 0
                                                                                                                                            Tom
                                                                                                                                  2. 0
                                                                                                                                    Tom
                                                                                                                                    1. 0
                                                                                                                                      Dennis
                                                                                                                                      1. 0
                                                                                                                                        Dennis
                                                                                                                                        1. 0
                                                                                                                                          Dennis
                                                                                                                                          1. 0
                                                                                                                                            Dennis
                                                                                                                                            1. 0
                                                                                                                                              Tom
                                                                                                                                              1. 0
                                                                                                                                                Dennis
                                                                                                                                                1. 0
                                                                                                                                                  Tom
                                                                                        2. 0
                                                                                          Tom
                                                                                          1. 0

                                                                                            Speichern in Flatfiles: Performance

                                                                                            Tom
                                                                        2. 0
                                                                          Tom
                2. 0

                  WER DAS HIER LIEST BITTE MELDEN

                  HILFE
                  • zur info
    3. 0
      Arx
      1. 0
        Dennis
  3. 0

    HALLO - Problem Wertebereich von Schlüsseln

    Dennis
    • datenbank
    1. 0
      Thomas J.S.
      1. 0
        Dennis
        1. 0
          Thomas J.S.
          1. 0
            Dennis
        2. 0
          Andreas Korthaus
          1. 0
            Dennis
          2. 0
            Tom
            1. 0
              Andreas Korthaus

Hi liebes Forum,

ich bin (immer noch) dabei, mir ein Gästebuch in PHP zu schreiben. Mittlerweile bin ich beim Admin-Bereich, wo man einzelne Beiträge löschen können soll.

Dabei komme ich aber nicht so ganz weiter: Jeder Eintrag ist ein einer Textdatei eine Zeile. Ich komme nun mit einer Variablen an, welche die Zeilennummer enthält, welche gelöscht werden soll.
Ich weiß aber nicht, wie ich am besten eine bestimmte Zeile aus einer Textdatei löschen soll. Der Rest sollte dann wieder zusammenrücken.

Wie mache ich das am besten?

MfG, Dennis.

--
Hinweise:
Signatur 2 von 3:
Die EU und die neuen Mitgliedslnder:
http://www.riehle-web.com/pkprojekt/
Oder doch mehr in HTML interessiert?
http://tutorial.riehle-web.com
  1. Holladiewaldfee,

    Ich weiß aber nicht, wie ich am besten eine bestimmte Zeile aus einer Textdatei löschen soll. Der Rest sollte dann wieder zusammenrücken.

    Lies die Datei mit file() ein und schreibe das Array mit einer Schleife und fopen() / fwrite() in die Datei zurück. Dabei lässt Du die gewünschte Zeile einfach aus.

    Ciao,

    Harry

    --
      Bald kommt die Waldfee ... (Projektphase: Layout)
      Bis dahin:
      http://harry.ilo.de/projekte/berge/
    1. Hi Harry

      Lies die Datei mit file() ein und schreibe das Array mit einer Schleife und fopen() / fwrite() in die Datei zurück. Dabei lässt Du die gewünschte Zeile einfach aus.

      Du dachtest dir das wahrscheinlich so:
      fwrite($array[0])
      usw.

      Das geht aber nicht so wirklich, da ich nicht weiß, wieviele Datenzeilen ich habe. ich müsste also irgendwie eine For-Schleife machen.

      MfG, Dennis.

      --
      Hinweise:
      Signatur 3 von 3:
      Fragen zu Formularen?
      http://tutorial.riehle-web.com hilft!
      1. Hallo Dennis,

        Du dachtest dir das wahrscheinlich so:
        fwrite($array[0])
        usw.

        Das geht aber nicht so wirklich, da ich nicht weiß, wieviele Datenzeilen ich habe. ich müsste also irgendwie eine For-Schleife machen.

        Hilft $num = count($array); vielleicht? ;-)

        Mache dich mit den Grundlegenden Array-Funktionen vertraut. Und lerne, mit der foreach-Schleife umzugehen.

        Grüße aus Barsinghausen,
        Fabian

        1. Hi Fabian Transchel

          Hilft $num = count($array); vielleicht? ;-)

          Jups, das müsste gehen *g*, wie doof von mir....

          Mache dich mit den Grundlegenden Array-Funktionen vertraut. Und lerne, mit der foreach-Schleife umzugehen.

          Hast du da mal noch was Lesestoff zum Thema For- und Foreach-Schleife? Wo liegt da eigentlich expliziet der Unterschied?

          MfG, Dennis.

          --
          Hinweise:
          Signatur 2 von 3:
          Die EU und die neuen Mitgliedslnder:
          http://www.riehle-web.com/pkprojekt/
          Oder doch mehr in HTML interessiert?
          http://tutorial.riehle-web.com
          1. Hi Dennis,

            Hast du da mal noch was Lesestoff zum Thema For- und Foreach-Schleife? Wo liegt da eigentlich expliziet der Unterschied?

            Mittlerweile weiß ich es selber *stolzsei*:

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
            Zufällige Hinweise:
            ------------------------
            Wer die </faq/> gelesen hat, ist klueger!
            ... und wei wie man Links macht ;-)
    2. Hallo

      Ich weiß aber nicht, wie ich am besten eine bestimmte Zeile aus einer Textdatei löschen soll. Der Rest sollte dann wieder zusammenrücken.

      Lies die Datei mit file() ein und schreibe das Array mit einer Schleife und fopen() / fwrite() in die Datei zurück. Dabei lässt Du die gewünschte Zeile einfach aus.

      Noch 'ne andere Möglichkeit:

      • Einlesen mit: file($datei)
      • Löschen der Zeile mit: array_splice($inhalt_der_datei,$zeilen_nr,1)
      • Neuschreiben der Datei per: fopen($datei,"w") ... u.s.w. u.s.f.

      Tschö, Auge

      --
      Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
      (Victor Hugo)
  2. Hello,

    Wie mache ich das am besten?

    Ganz anders!

    Wenn ich meinen Artikel zum Safe Mode fertig habe, widme ich mich dem lange versprochenen "Speichern in Flat-Files".

    Nur soviel vorab.

    Wieviel Einträge erwartest Dur im Gästebuch? mehr als 1000 im Jahr?

    Definiere einen Datensatz. Waas muss das Gästebuch enthalten?

    $_book = array;
      $_book[$x] = array;
      $_book[$x]['ip']
                ['time']
                ['email']
                ['http']
                ['name']
                ['msg']
                ['imgs'] = array();
                ['imgs'][1]['src']
                ['imgs'][1]['alt']
                ['imgs'][1]['title']
                ['imgs'][1]['text']

    ['reply']
                ['userappend']
                ['lock']
                ['delete']

    Nur so als Idee.

    Dann kannst Du das gesamte Gästebuch bis ca. 2MB Gesamtumfang als "Superarray" aufbauennund komplett abspeichern. Das hat den Vorteil, dass man sich keine Gedanken uner das Speicherformat machen muss.

    Das Array wird serialisiert und abgespeichert. Bis zu ca. 2MB Nutzdaten geht das auf normalen heute üblichen System in Nullkommanix.

    Man muss sich eigentlich nur über das Locking wirkliche Gedanken machen. Alles andee ist Billigprogrammierung.

    Kannst Du mir noch folgen?

    Wenn ja, dann kannst Du kja den Co-Autor bei "Speichern in Flat-Files" machen. Schau Dir mal http://selfhtml.bitworks.de Safe Mode an, on man das verstehen kann. Das ist zu ca. 1/4 fertig. Die Tools und Tipps und Tests fehlen noch. Und die Scripte dazu. In der Art sollte auch das "Wegschreiben und Holen" stattfinden.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
      Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
      Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Holladiewaldfee,

      Dann kannst Du das gesamte Gästebuch bis ca. 2MB Gesamtumfang als "Superarray" aufbauennund komplett abspeichern. Das hat den Vorteil, dass man sich keine Gedanken uner das Speicherformat machen muss.

      Ich finde, daß die Idee durchaus Nachteile hat.
      Im alten CSV-Stil gespeichert kann nachher jedes Programm die Datensätze auslesen, mit der serialize-Lösung bist Du auf PHP zementiert, es sei denn, Du hast Lust, die ganzen Funktionen in einem anderen Programm nachzubilden.

      Natürlich könnte er den ganzen Kram auch als XML speichern, das ist aber glaube ich mit Kanonen auf Spatzen geschossen.

      Das Array wird serialisiert und abgespeichert. Bis zu ca. 2MB Nutzdaten geht das auf normalen heute üblichen System in Nullkommanix.

      So ganz habe ich nicht mitbekommen, was da die Vorteile gegenüber der klassischen CSV-Lösung sein sollen.

      Ciao,

      Harry

      --
        Bald kommt die Waldfee ... (Projektphase: Layout)
        Bis dahin:
        http://harry.ilo.de/projekte/berge/
      1. Hello,

        So ganz habe ich nicht mitbekommen, was da die Vorteile gegenüber der klassischen CSV-Lösung sein sollen.

        Versuch doch z.B. mal, in einer CSV-Datei eine Textarea mit Umbrüchen abzulegen oder ei Feld mit einem Komma drin oder eben dem Trennzeichen abzulegen. Da muss ziemlich viel rumstressen.

        Ich habe alle Low-Level Möglichkeiten, die PHP zulässt, ausprobiert.

        Das Beste wäre immer noch Random Access, festes Feldformat, fester Statzaufbau. Dann muss man uch nicht immer die ganze datei einlesen und kann auch mit Flatfiles 100.000 Datensätze verwalten. Aber PHP unterstützt keine Records oder Structures. Auch das habe ich nachgebildet. Da es aber im Interpreter läuft, während serialize und unserialize al OpCode laufen, dauert es ungefähr 8 bis 12 mal so lange. Das muss man nicht haben.

        CSV kann man ja leicht als Import- und Exportformat zur Verfügung stellen. Ein solches Modul zusätzlich zu schreiben, wird ja wohl nicht problematisch sein.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
          Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
          Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hello,

          das wichtigste habe ich ja überhaupt vergessen.

          Die Array-Lösung bietet ein objektorientiertes, variantes Satzformat an. Das istsehr praktisch, da man mit Flatfiles ja nicht gerne normalisiert, sondern die Referenzen lieber zusammenhält.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
            Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
            Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        2. Holladiewaldfee,

          Versuch doch z.B. mal, in einer CSV-Datei eine Textarea mit Umbrüchen abzulegen oder ei Feld mit einem Komma drin oder eben dem Trennzeichen abzulegen. Da muss ziemlich viel rumstressen.

          PHP hält von vornherein eine Funktion zum Parsen von CSV-Dateien bereit (fgetcsv). Das Gegenstück (fputcsv) findet sich in den User-Kommentaren etwas weiter unten. Somit sollten auch Zeilenumbrüche kein Problem mehr sein ... auch wenn natürlich dann die Datei nicht mehr so sauber aussieht. Alternativ könnte man die "kritischen" Felder auch durch base64_encode() jagen, dann wäre die Sache mit den Zeilenumbrüchen sowieso gegessen.

          CSV kann man ja leicht als Import- und Exportformat zur Verfügung stellen. Ein solches Modul zusätzlich zu schreiben, wird ja wohl nicht problematisch sein.

          Nö. Aber ich finde es trotzdem praktisch, wenn die Daten von vorneherein in einem Format verwaltet werden, das anderen Applikationen den Zugriff darauf erlaubt, selbst wenn diese Applikation "Mensch" heißt. Vor allem dann, wenn sich keine signifikanten Performance- oder Größenunterschiede ergeben.

          Ciao,

          Harry

          --
            Bald kommt die Waldfee ... (Projektphase: Layout)
            Bis dahin:
            http://harry.ilo.de/projekte/berge/
          1. Hello,

            Versuch doch z.B. mal, in einer CSV-Datei eine Textarea mit Umbrüchen abzulegen oder ei Feld mit einem Komma drin oder eben dem Trennzeichen abzulegen. Da muss ziemlich viel rumstressen.

            PHP hält von vornherein eine Funktion zum Parsen von CSV-Dateien bereit (fgetcsv). Das Gegenstück (fputcsv) findet sich in den User-Kommentaren etwas weiter unten. Somit sollten auch Zeilenumbrüche kein Problem mehr sein ... auch wenn natürlich dann die Datei nicht mehr so sauber aussieht. Alternativ könnte man die "kritischen" Felder auch durch base64_encode() jagen, dann wäre die Sache mit den Zeilenumbrüchen sowieso gegessen.

            Was erzählst Du da? In Textdateien, und CSV gehört zur dieser Klasse, werden Datensätze (also Zeilen) bestimmungsgemäß durch ein _Zeilenendezeichen_ abgeschlossen. Zeilenendezeichen nennt man trivial auch Zeilenumbruch. Wenn nun innerhalb des Datenstromes eines Datensatzes ein solches Zeichen enthalten ist, dann ist aus Sicht der Datei der Datensatz einer Textdatei an dieser Stelle zu Ende. Aus eins mach also zwei oder drei...

            Das gleiche gilt analog für Feldtrennzeichen. Auch die dürfen im Datenfeld nicht enthalten sein. Es gibt dann zwar die "ich dreh mich im Kresi Technik", sprich "Escape-Zeichen", aber dann dürfen die wieder nicht einfach so im Stream vorkommen. Man muss den Stream also sowieso bereinigen.

            Dann kann man auch die extrem leistungsstarken Array-Funktionen von PHP benutzen und hat alle Probleme auf einmal gelöst. Wenn Dir das nicht gefällt, kannst Du ja weiterhin CSV benutzen mit allen beschriebenen Problemen.

            Da das in diesem Thread aber schon genug beschrieben wurde, wie man es "normal" löst, habe ich beschrieben, wie man es intelligent löst. *!*

            Nö. Aber ich finde es trotzdem praktisch, wenn die Daten von vorneherein in einem Format verwaltet werden, das anderen Applikationen den Zugriff darauf erlaubt, selbst wenn diese Applikation "Mensch" heißt. Vor allem dann, wenn sich keine signifikanten Performance- oder Größenunterschiede ergeben.

            Ich habe noch mehrere Kisten mit Karteikarten. Die sind ca. 20 Jahre alt. Die Daten darauf sind noch zu ca. 70 Prozent brauchbar für mich. Ich kann sie noch lesen, auch bei Kerzenschein und ohne Strom. Solche "Dateien" finde ich ich klasse.

            Ach, bevor Du mir hier nochmal antwortest, schlag doch lieber den MySQL-Leuten mal vor, ihre Datenbank auf CSV auf Karteikarten umzustellen, damit man sie ggf. auch mit der Lupe lesen kann. *grummel*

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
              Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
              Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Holladiewaldfee,

              Was erzählst Du da? In Textdateien, und CSV gehört zur dieser Klasse, werden Datensätze (also Zeilen) bestimmungsgemäß durch ein _Zeilenendezeichen_ abgeschlossen. Zeilenendezeichen nennt man trivial auch Zeilenumbruch. Wenn nun innerhalb des Datenstromes eines Datensatzes ein solches Zeichen enthalten ist, dann ist aus Sicht der Datei der Datensatz einer Textdatei an dieser Stelle zu Ende. Aus eins mach also zwei oder drei...

              Ich kenn die genaue CSV-Spec nicht. Alles was ich hier schreibe, sind Erfahrungswerte. Und die besagen, daß man durchaus einen Zeilenumbruch in einer CSV-Datei unterbringen kann, nämlich dann, wenn man das Ganze in Anführungszeichen packt (Stichwort "Enclosure"). Vgl. auch http://de3.php.net/manual/en/function.fgetcsv.php.

              Das gleiche gilt analog für Feldtrennzeichen. Auch die dürfen im Datenfeld nicht enthalten sein. Es gibt dann zwar die "ich dreh mich im Kresi Technik", sprich "Escape-Zeichen", aber dann dürfen die wieder nicht einfach so im Stream vorkommen. Man muss den Stream also sowieso bereinigen.

              Nein, kein Escape-Zeichen ... Der "Trick" mit den Anführungszeichen.

              Dann kann man auch die extrem leistungsstarken Array-Funktionen von PHP benutzen und hat alle Probleme auf einmal gelöst. Wenn Dir das nicht gefällt, kannst Du ja weiterhin CSV benutzen mit allen beschriebenen Problemen.

              Es geht mir darum, eine Alternative aufzuzeigen - mit all ihren Vor- und Nachteilen.

              Da das in diesem Thread aber schon genug beschrieben wurde, wie man es "normal" löst, habe ich beschrieben, wie man es intelligent löst. *!*

              Schön ... ich bin also doof, weil ich eine andere Meinung habe, die ich auch noch begründen kann. Wie Du meinst ...

              Ich habe noch mehrere Kisten mit Karteikarten. Die sind ca. 20 Jahre alt. Die Daten darauf sind noch zu ca. 70 Prozent brauchbar für mich. Ich kann sie noch lesen, auch bei Kerzenschein und ohne Strom. Solche "Dateien" finde ich ich klasse.

              Was hab ich gelacht ...
              So weit ich weiß bietet MySQL übrigens die Möglichkeit, seine Dateien im XML-Format abzuspeichern ... wahrscheinlich damit man sie sich ausdrucken, in eine Schublade stecken und 100 Jahre später bei Kerzenschein lesen kann.

              Ach, bevor Du mir hier nochmal antwortest, schlag doch lieber den MySQL-Leuten mal vor, ihre Datenbank auf CSV auf Karteikarten umzustellen, damit man sie ggf. auch mit der Lupe lesen kann. *grummel*

              Ganz toll ... :-(
              Damit können wir uns dann ja die Diskussion sparen.

              Ciao,

              Harry

              --
                Bald kommt die Waldfee ... (Projektphase: Layout)
                Bis dahin:
                http://harry.ilo.de/projekte/berge/
              1. Hello,

                Ganz toll ... :-(
                Damit können wir uns dann ja die Diskussion sparen.

                Heute ja. Gerne. Sonst immer.
                Ist ja nix gegen einzuwenden, dass Du "deine" methode vorstellt, dann aber bitte auch mit den Nachteilen und Besonderheiten.

                Ich habe nur meine "andere" Methode vorgetellt, und daran wa eigentlich nichts zu diskutieren, sonst hättest Du ja was gefunden. Du bist ja nicht von Media Markt... *g*

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                  Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                  Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                1. Hi Tom

                  Du bist ja nicht von Media Markt... *g*

                  25 Jahre! Jubiläum!

                  @Media Markt:
                  DAS NERVT! ÜBERALL HÖRT MAN ES "KAUFEN MARSCH; MARSCH".

                  Das ist doch wohl kindisch, oder?

                  MfG, Dennis.

                  --
                  Hinweise:
                  Signatur 3 von 3:
                  Fragen zu Formularen?
                  http://tutorial.riehle-web.com hilft!
                  1. Hallo,

                    @Media Markt:
                    DAS NERVT! ÜBERALL HÖRT MAN ES "KAUFEN MARSCH; MARSCH".

                    Das ist doch wohl kindisch, oder?

                    Ja. Ebenso wie es solche Postings sind.[1]

                    [1] Ich habe nachdem ich den Titel des Postings gesehen habe darauf wetten können, dass du mit "nervende Werbung" Tom was böses willst, aber stattdessen ist alles, was du mir erzählst, dass Mediamarkt eine neue Werbekampagne hat. Danke, ich habe gerne geklickt.

                    Grüße aus Barsinghausen,
                    Fabian

                    1. Hi Fabian Transchel

                      Ich habe nachdem ich den Titel des Postings gesehen habe darauf wetten können, dass du mit "nervende Werbung" Tom was böses willst, aber stattdessen ist alles, was du mir erzählst, dass Mediamarkt eine neue Werbekampagne hat. Danke, ich habe gerne geklickt.

                      Das Posting war eigentlich mehr als Anreiz/Frage gedacht, was ich von den ständigen Jubiäums (oder Jubiläen?) haltet, Beispiel Sat1, RTL und jetzt eben u.a. auch MediaMarkt.

                      MfG, Dennis.

                      --
                      Hinweise:
                      Signatur 2 von 3:
                      Die EU und die neuen Mitgliedslnder:
                      http://www.riehle-web.com/pkprojekt/
                      Oder doch mehr in HTML interessiert?
                      http://tutorial.riehle-web.com
                  2. Hallo,

                    @Media Markt:
                    Das ist doch wohl kindisch, oder?

                    nur mal nebenbei: der Slogan "Ich bin doch nicht blöd" hat bei Deutschlands Verbrauchern den höchsten Wiedererkennungswert, wie eine Studie des 'Handelsblatts' und des Marktforschungsunternehmens Dialego ergeben hat. 44% aller Deutschen über 14 Jahre können den Spruch auf Anhieb dem richtigen Unternehmen zuordnen. (http://de.internet.com/index.php?id=2028382&section=Marketing-Statistics)

                    Reichlich blöd, aber reichlich effektiv.

                    Gruß,
                    _Dirk

                    1. Hello,

                      nur mal nebenbei: der Slogan "Ich bin doch nicht blöd" hat bei Deutschlands Verbrauchern den höchsten Wiedererkennungswert, wie eine Studie des 'Handelsblatts' und des Marktforschungsunternehmens Dialego ergeben hat. 44% aller Deutschen über 14 Jahre können den Spruch auf Anhieb dem richtigen Unternehmen zuordnen. (http://de.internet.com/index.php?id=2028382&section=Marketing-Statistics)

                      Reichlich blöd, aber reichlich effektiv.

                      Und er führt auf jeden fall bei den intellektuelleren Verbrauchern, von denen es doch täglich mehr gibt, zur kritischen Auseinandersetzung mit der Frage: "bin ich eigentlich blöd, wenn ich kritiklos bei MonsterMarkt kaufe? Sollte ich nicht doch mal den kleinen Fachhändler neben fragen?" und häufig dann auch zu dem Aha-Erlebnis, dass es der kleine Fachhändler nebenan tatsächlich zum gleichen Preis kann und zudem noch die bessere Beratung und den schnelleren Service hat.

                      Liebe Grüße aus http://www.braunschweig.de

                      Tom

                      --
                      [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                        Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                        Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      1. Hallo,

                        Und er führt auf jeden fall bei den intellektuelleren Verbrauchern, von denen es doch täglich mehr gibt, zur kritischen Auseinandersetzung

                        natürlich wirkt er auch oft - zu recht - abschreckend, doch die große Masse spricht positiv drauf an. Ähnliche Merkmale findet man doch etwa in den Charts, in denen wirklich blödes und flach produziertes Gedüdel in immer größeren Mengen und mit immer geringerer Haltbarkeit vorhanden ist. Oder auch auf dem Goldeselmarkt der Klingeltöne fürs Handy, deren Anbieter sich gegenseitig in der Dummheit und Dreistigkeit ihrer Werbung übertreffen. Oder etwa in Fernsehshows, in denen sich der grundlegende Nährwert an Unterhaltung darin definiert, dass C- bis F-Promis versuchen, langweilige Wörter zu buchstabieren oder Fitnessübungen nachturnen.

                        Ich glaube nicht, dass der Effekt derjenigen, die diese Werbung in die andere Richtung (nämlich zum Fachhändler) drückt, größer ist als der Ansturm der großen Masse auf die Prospekte des roten Blödmarkts. Aber schön wäre es natürlich, da gebe ich dir recht :-)

                        Gruß,
                        _Dirk

                        1. Hello,

                          natürlich wirkt er auch oft - zu recht - abschreckend, doch die große Masse spricht positiv drauf an. Ähnliche Merkmale findet man doch etwa in den Charts, in denen wirklich blödes und flach produziertes Gedüdel in immer größeren Mengen und mit immer geringerer Haltbarkeit vorhanden ist. Oder auch auf dem Goldeselmarkt der Klingeltöne fürs Handy, deren Anbieter sich gegenseitig in der Dummheit und Dreistigkeit ihrer Werbung übertreffen. Oder etwa in Fernsehshows, in denen sich der grundlegende Nährwert an Unterhaltung darin definiert, dass C- bis F-Promis versuchen, langweilige Wörter zu buchstabieren oder Fitnessübungen nachturnen.

                          da sehe ich auch eine große Gefahr. Die Ursache für diesen Trend liegt aber sicherlich in der (fehlenden) Rechtsprechung. Geschäfte werden in diesem Bereich eben immer öfter von den MonsterMärkten gemacht, die das Recht selber festlegen und es dann zur Abschreckung auch durch alle Instanzen und jahre verteidigen. Ich bin der Meinung, dass unserem Rechtssystem hie eine geeignete Entschädigungskomponente fehlt. Wenn ein mit Milliarden bewertetes Unternehmen einen mit 30.000 Euro zu bewertenden Privatmann den prozessualen Garaus macht und nach sieben Jahren und allen Inatanzen verliert, müssste es zusätzlich zum Prozessgegenstand zu einer Wiedergutmachung von (Umsatz_Unternehmen/Umsatz_Privatmann)* Instanz*Dauer verdonnert werden. Umgekehrt natürlich genauso. Das würde die Kaschubenwirtschaft erheblich verringern, die Schmiergelder für unsee Politiker für nicht gehabte Ideen fpr Gesetzesnovellierung allerdings auch versiegen lassen.

                          Liebe Grüße aus http://www.braunschweig.de

                          Tom

                          --
                          [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                            Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                            Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hi Tom

      Ich hab jetzt ja schon aller mitgelesen, was ihr hier geschrieben habt, hab aber erst jetzt zeit gefunden, dir (ausfürhlich) zu antworten.

      Wie mache ich das am besten?
      Ganz anders!

      Das ist ja schon mal sehr aufschlussreich *g*

      Wenn ich meinen Artikel zum Safe Mode fertig habe, widme ich mich dem lange versprochenen "Speichern in Flat-Files".
      Nur soviel vorab.

      Schön. Ich habe mir da jetzt auch mal das http://selfhtml.bitworks.de/speichern.php angesehen, was ja wohl hierzu passt, oder?

      Wieviel Einträge erwartest Dur im Gästebuch? mehr als 1000 im Jahr?

      Ne, eigentlich nicht. Vielleicht 20 im Monat => 240 im Jahr.

      Dann kannst Du das gesamte Gästebuch bis ca. 2MB Gesamtumfang als "Superarray" aufbauennund komplett abspeichern. Das hat den Vorteil, dass man sich keine Gedanken uner das Speicherformat machen muss.

      Stellst du dir das als ein Array vor, in dem alle Einträge sind, oder für jeden Eintrag ein Array?

      Das Array wird serialisiert und abgespeichert. Bis zu ca. 2MB Nutzdaten geht das auf normalen heute üblichen System in Nullkommanix.

      Damit würde das ganze Array dann in einer Textdatei in einer Zeile stehen? Richtig?
      Und einlesen würde man das ganze mit fopen() und fread() (nicht mit file, weil ja die Zeilen keine rolle spielen) und dann wieder unserializeieren?

      Man muss sich eigentlich nur über das Locking wirkliche Gedanken machen. Alles andee ist Billigprogrammierung.

      Ähm ....... richtig!

      Kannst Du mir noch folgen?

      Nach dem ich die Funktion serialize() nachgeschlagen habe - problemlos.

      Wenn ja, dann kannst Du ja den Co-Autor bei "Speichern in Flat-Files" machen.

      Hey, da hätt ich doch sogar noch meinen Spaß dran :-)

      Schau Dir mal http://selfhtml.bitworks.de Safe Mode an, ob man das verstehen kann. Das ist zu ca. 1/4 fertig. Die Tools und Tipps und Tests fehlen noch. Und die Scripte dazu.

      Das hat jetzt aber nichts mit meinem Problem zu tun - oder liege ich da etwa falsch?
      Hm, ich habs noch nicht alles durchgelesen, mehr überflogen, aber es scheint doch recht verstädnlich zu sein.
      Vielleicht fehlt noch ein bisschen über das eigentliche Wirken von SafeMode - was kann zum Beispiel passieren, wenn dieser nicht aktiviert ist etc.

      In der Art sollte auch das "Wegschreiben und Holen" stattfinden.

      Was du anderweitig als "Speichern in Flat-Files" beschreibst ;-)

      MfG, Dennis.

      --
      Hinweise:
      Signatur 1 von 3:
      Meine Homepage: http://www.riehle-web.com
      Tutorial: http://tutorial.riehle-web.com
      1. Hello,

        Wie mache ich das am besten?
        Ganz anders!
        Das ist ja schon mal sehr aufschlussreich *g*

        Ja, anders ist eben nicht "wie es alle machen"...

        Wenn ich meinen Artikel zum Safe Mode fertig habe, widme ich mich dem lange versprochenen "Speichern in Flat-Files".
        Nur soviel vorab.
        Schön. Ich habe mir da jetzt auch mal das http://selfhtml.bitworks.de/speichern.php angesehen, was ja wohl hierzu passt, oder?

        Ja, ein wenig schon. Da habe ich eine ähnliche Technik eingesetzt. Allerdings gibt es da nicht mehrere "Datensätze", sondern eben nur einen einzigen.

        Stellst du dir das als ein Array vor, in dem alle Einträge sind, oder für jeden Eintrag ein Array?

        Man kann, wenn man nicht wieder Stress haben will, nur _ein_ Superarray aufbauen und nicht eines für jeden Datensatz, da man sonst ja wieder Probleme mit den Satzendezeichen bekommt. Ein CRLF (als Beispiel) könnte ja auch im Array wieder als Datenwert vorkommen.

        Da die Länge der Datensätze bei PHP-"Arrays" absolut wahlfrei ist, weiß man dann nicht, wo ein Satz zuende ist. Man muss also sowieso die gesamte Datei sperren, einlesen, verarbeiten, zurückschreiben und wieder freigeben.

        Damit würde das ganze Array dann in einer Textdatei in einer Zeile stehen? Richtig?

        Richtig. Da es sich ja nicht mehr um eine Textdatei handelt, sondern eine "formatfreie Binärdatei" (das Format ist nur implizit vorhanden und kann bei jedem update wechseln), gibt es keine "Zeilen".

        Und einlesen würde man das ganze mit fopen() und fread() (nicht mit file, weil ja die Zeilen keine rolle spielen) und dann wieder unserializeieren?

        Öffnen mit fopen(...,'a+') -> Zerstörungsfrei
        Sperren mit flock()
        Satzzeiger auf Anfang mit fseek()
        Vollständig einlesen mit fread()
        unserialize()

        Änderungen vornehmen im Array() <<== darum geht es dabei nur!
                                             Das ist nämlich bequem.

        serialize()
        Satzzeiger auf Anfang mit fseek()
        schreiben mit fwrite()
        Trimmen mit ftruncate()
        Schließen mit fclose(), das flock(...,LOCK_UN) kann man sich schenken.

        Und nun darf der nächste...

        Der oben beschriebene Vorgang dauert selbst bei 2MB großen Dateien mit ca. 1000 Datensätzen nicht länger als 1sec, es sei denn, Du hast den Apachen auf nem 386er mit 8MB installiert *gg*.

        Man muss sich eigentlich nur über das Locking wirkliche Gedanken machen. Alles andee ist Billigprogrammierung.
        Ähm ....... richtig!

        Habe ich eigentlich oben ausreichend beschrieben, wie es richtig[tm] gemacht wird.

        Wenn ja, dann kannst Du ja den Co-Autor bei "Speichern in Flat-Files" machen.
        Hey, da hätt ich doch sogar noch meinen Spaß dran :-)

        Schön. Denn da müssen wir ja alle Methoden vorstellen, auch wenn sie eigentlich nur von Harry benutzt werden *zyn,zyn*.

        Schau Dir mal http://selfhtml.bitworks.de Safe Mode an, ob man das verstehen kann. Das ist zu ca. 1/4 fertig. Die Tools und Tipps und Tests fehlen noch. Und die Scripte dazu.
        Das hat jetzt aber nichts mit meinem Problem zu tun - oder liege ich da etwa falsch?

        Nee, das war nur wegen Co-Autor, weil ich die Sachen ja manchmal recht überwändlich ausdrücke...

        Hm, ich habs noch nicht alles durchgelesen, mehr überflogen, aber es scheint doch recht verstädnlich zu sein.
        Vielleicht fehlt noch ein bisschen über das eigentliche Wirken von SafeMode - was kann zum Beispiel passieren, wenn dieser nicht aktiviert ist etc.

        Siehst Du, da haben wir doch den Nutzen eines Co-Autors schon. So muss das dann auch bei den Dateien laufen.

        In der Art sollte auch das "Wegschreiben und Holen" stattfinden.
        Was du anderweitig als "Speichern in Flat-Files" beschreibst ;-)

        Genau.

        Noch was zu einem wesentlichen Vorteil der objektorientierten Speicherung der Daten: Du kannst auch klassenverweise mit abspeichern, Anzeigefunktionen, Prüffunktionen, etc. Du kannst in einem Datensatz kein Bild speichern un im nächsten drei, bzw. die Referenzen darauf. Die Bilder gehören nicht in die Datei, da sie vom Anzeigeprogramm sowieso "lose" benötigt werden. Du musst beim Design des Arrays eben immer nur genau überlegen, ob Du das Teilobjekt als einweriges oder als (mögliches) mehrwertiges anlegst.

        Ich hatt ja so eine Struktur schon angedeutet. Übrigens könnte nun die Frage kommen, ob man die Arrays assoziativ oder indiziert aufbauen sollte. Angesichts der Vorteile beim Zugriff über Namen und der monströsen Hauptspeicher und Festplatten plädiedre ich für assoziative Arrays. Wenn nämlich in einem Datensatz ein Teilobjekt nicht vorkommt, kostet es auch keinen Platz. Man muss nun nur seine Bearbeitungsfunktionen so erziehen, dass die eben immer vorher gucken... muss ich nun ein gBild anzeigen oder keins oder fünf Foreach() machts möglich.

        Nun will ich aber hier nicht das ganze Script in ein Posting schreiben. Ich hoffe aber, dass Du es mit Ikea halten kannst jetzt: EEntdecke die Möglichkeiten"

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
          Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
          Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hi Tom

          Das ist ja schon mal sehr aufschlussreich *g*
          Ja, anders ist eben nicht "wie es alle machen"...

          Hm, so langsam erkenne ich auch die Vorteile bei deiner Methode. Man kann halt ganz einfach auf alle Elemente zugreifen. Man muss im String nicht nach besonderen Zeichen suchen und diese umwandeln, man hat immer eine schöne Struktur.

          Ich habe mir da jetzt auch mal das http://selfhtml.bitworks.de/speichern.php angesehen, was ja wohl hierzu passt, oder?
          Ja, ein wenig schon. Da habe ich eine ähnliche Technik eingesetzt. Allerdings gibt es da nicht mehrere "Datensätze", sondern eben nur einen einzigen.

          Aber darauf aufbauend lässt sich ja recht "einfach" ein Gästebuch schreiben. Und dazu wolltest du ja auch einen Future-Artikel schreiben.

          Stellst du dir das als ein Array vor, in dem alle Einträge sind, oder für jeden Eintrag ein Array?
          Man kann, wenn man nicht wieder Stress haben will, nur _ein_ Superarray aufbauen und nicht eines für jeden Datensatz, da man sonst ja wieder Probleme mit den Satzendezeichen bekommt. Ein CRLF (als Beispiel) könnte ja auch im Array wieder als Datenwert vorkommen.

          Richtig, du würdest also empfehlen, ein Superarray aufzubauen?

          Damit würde das ganze Array dann in einer Textdatei in einer Zeile stehen? Richtig?
          Richtig. Da es sich ja nicht mehr um eine Textdatei handelt, sondern eine "formatfreie Binärdatei" (das Format ist nur implizit vorhanden und kann bei jedem update wechseln), gibt es keine "Zeilen".

          Was ist denn eine "formatfreie Binärdatei"? Etwas, wo du irgendeine Dateiendung dranhängst? Meinst du das? Also nicht .txt, sonder zum Beispiel .dennis, ja?

          Öffnen mit fopen(...,'a+') -> Zerstörungsfrei
          Sperren mit flock()
          Satzzeiger auf Anfang mit fseek()
          Vollständig einlesen mit fread()
          unserialize()

          Ich persöhnlich würde erst kurz vor dem Schreiben flock() machen.
          Dann ist es kürzer gesperrt, beim Lesen können die sich doch nicht in die Quere kommen, oder?

          Änderungen vornehmen im Array() <<== darum geht es dabei nur!
                                               Das ist nämlich bequem.

          _Sehr_ bequem!

          serialize()
          Satzzeiger auf Anfang mit fseek()
          schreiben mit fwrite()
          Trimmen mit ftruncate()
          Schließen mit fclose(), das flock(...,LOCK_UN) kann man sich schenken.

          Hm, kleine Frage: Was, wenn das neue Array nun kürzer ist als das alte. Bei deiner Methode mit fseek() und fwrite(), würde dann da am Ende nicht der Rest des alten, längeren Arrays stehen bleiben?
          Warum nicht den File vorher schließen, eneut öffnen und zwar mit der Fuktion, das die dateilänge auf 0 Bytes gesetzt wird (das war glaube ich "w")?

          Der oben beschriebene Vorgang dauert selbst bei 2MB großen Dateien mit ca. 1000 Datensätzen nicht länger als 1sec, es sei denn, Du hast den Apachen auf nem 386er mit 8MB installiert *gg*.

          Ich glaube die Dinger existierten noch vor meiner Zeit ;-)

          Hey, da hätt ich doch sogar noch meinen Spaß dran :-)
          Schön. Denn da müssen wir ja alle Methoden vorstellen, auch wenn sie eigentlich nur von Harry benutzt werden *zyn,zyn*.

          Prima. Was macht denn ein Co-Autor so genau? Bzw. was stellst du dir unter dem Tun eines Co-Autors vor?
          Wenn du willst könnte ich ja so ein bisschen Texte schreiben, bezüglich Vor- und Nachteile der verschiedenen Methoden.

          Aber vielleicht sollten wir da mal per E-Mail drüber reden; Hier meine E-Mail:
          webmaster | at | riehle-web.com

          Vielleicht fehlt noch ein bisschen über das eigentliche Wirken von SafeMode - was kann zum Beispiel passieren, wenn dieser nicht aktiviert ist etc.
          Siehst Du, da haben wir doch den Nutzen eines Co-Autors schon. So muss das dann auch bei den Dateien laufen.

          du musst dir im Prinzip überlegen, wenn du damit ansprechen willst: Die Leute, die schon Halb-Profis sind, und denen du nur noch etwas über SafeMode beibringen willst, oder die, die nicht wissen was SafeMode ist, die es außer mal im Forum noch nie gehört haben, aber wissbegierig sind es zu erfahren.
          Wenn ich mir halt vorstelle, ich käme da an und ich wüsste gar nichts von SafeMode (ich weiß ja auch so nicht viel davon ;-) ), würde ich glaube ich danach nicht viel mehr verstehen.
          Das ist das, wo ich meinte, da fehlt eventuell noch eine kleine Einleitung.

          Ich hatt ja so eine Struktur schon angedeutet. Übrigens könnte nun die Frage kommen, ob man die Arrays assoziativ oder indiziert aufbauen sollte.

          Wo lag da jetzt noch mal der Unterschied im Detail?

          Angesichts der Vorteile beim Zugriff über Namen und der monströsen Hauptspeicher und Festplatten plädiedre ich für assoziative Arrays. Wenn nämlich in einem Datensatz ein Teilobjekt nicht vorkommt, kostet es auch keinen Platz. Man muss nun nur seine Bearbeitungsfunktionen so erziehen, dass die eben immer vorher gucken... muss ich nun ein Bild anzeigen oder keins oder fünf Foreach() machts möglich.

          Du meinst, man sollte möglichst wenig in die Dateien speichern? Also zum Beispiel kein html Code, für Links, weil man ihn nacher noch dazufügen kann. Ebenso für Bilder. (?)

          Nun will ich aber hier nicht das ganze Script in ein Posting schreiben. Ich hoffe aber, dass Du es mit Ikea halten kannst jetzt: "Entdecke die Möglichkeiten"

          I'll try!

          MfG, Dennis.

          --
          Machen wir doch mal zur Feier des Tages keine Signatur *g*
          1. Hello,

            Hm, so langsam erkenne ich auch die Vorteile bei deiner Methode. Man kann halt ganz einfach auf alle Elemente zugreifen. Man muss im String nicht nach besonderen Zeichen suchen und diese umwandeln, man hat immer eine schöne Struktur.

            Ja. Man muss vielleicht gelegentlich die älteren Beiträge ins Archiv schicken, damit die Datei nicht größer als ca. 2MB wird.

            Richtig, du würdest also empfehlen, ein Superarray aufzubauen?

            Ja, aber siehe vorige Bemerkung.

            Was ist denn eine "formatfreie Binärdatei"? Etwas, wo du irgendeine Dateiendung dranhängst? Meinst du das? Also nicht .txt, sonder zum Beispiel .dennis, ja?

            Die Endung ist frei wählbar. Man sollte je nach Betriebssytem aber bestimmte Konventionen einhalten. Eine solche formatfreie Binärdatei hat daher häufig die Endung ".dat". ".txt", ".asc" und ".csv" sind eben eher vorbehalten für die von Harry beschriebene Lösung. Du könntst sie ja mit ".aol" kennzeichen *gg* für "Array Organized List".

            Öffnen mit fopen(...,'a+') -> Zerstörungsfrei
            Sperren mit flock()
            Satzzeiger auf Anfang mit fseek()
            Vollständig einlesen mit fread()
            unserialize()
            Ich persöhnlich würde erst kurz vor dem Schreiben flock() machen.
            Dann ist es kürzer gesperrt, beim Lesen können die sich doch nicht in die Quere kommen, oder?

            Geanau das ist falsch. Stell Dir vor, Du liest, während schon jemand schreibt. Nach Deiner Methode wäre die Datei in diesem Moment ja noch nicht gesperrt. Aber die Thematik der Zeit-Zustandsdiagramm und des "richtigen" Lockings wir ein großes Kapitel in dem Artikel einnehmen. Selbst die Überlegung, mit welchem Mode (r,w,a) die Datei geöffnet wird, lässt keinerlei Raum, wenn man die Datei selber als Sperrobjekt nutzen will.

            Änderungen vornehmen im Array() <<== darum geht es dabei nur!
                                                 Das ist nämlich bequem.
                                                   _Sehr_ bequem!

            serialize()
            Satzzeiger auf Anfang mit fseek()
            schreiben mit fwrite()
            Trimmen mit ftruncate()
            Schließen mit fclose(), das flock(...,LOCK_UN) kann man sich schenken.

            Hm, kleine Frage: Was, wenn das neue Array nun kürzer ist als das alte. Bei deiner Methode mit fseek() und fwrite(), würde dann da am Ende nicht der Rest des alten, längeren Arrays stehen bleiben?

            Darum trimmt man sie ja vor der Freigabe mit ftruncate().

            Warum nicht den File vorher schließen, eneut öffnen und zwar mit der Fuktion, das die dateilänge auf 0 Bytes gesetzt wird (das war glaube ich "w")?

            Weil man sie dann nicht selber als Sperrobjekt nutzen kann, sondern eine Hilfsdatei benötigt (so wie in speichern.php beschrieben)

            Der oben beschriebene Vorgang dauert selbst bei 2MB großen Dateien mit ca. 1000 Datensätzen nicht länger als 1sec, es sei denn, Du hast den Apachen auf nem 386er mit 8MB installiert *gg*.
            Ich glaube die Dinger existierten noch vor meiner Zeit ;-)

            Prima. Was macht denn ein Co-Autor so genau? Bzw. was stellst du dir unter dem Tun eines Co-Autors vor?
            Wenn du willst könnte ich ja so ein bisschen Texte schreiben, bezüglich Vor- und Nachteile der verschiedenen Methoden.

            • jede Idee registrieren (auch jetzt schon)
            • Fragen sammeln
            • Gegenversuche auf anders eingerichten Systemen machen
            • Die vorhandene Literatur gegenlesen
            • die Sache mit eigenen Worten nochmal formulieren
            • Fehler finden, für die der Autor schon zu betriebsblind ist
            • ...

            Aber vielleicht sollten wir da mal per E-Mail drüber reden; Hier meine E-Mail:
            webmaster | at | riehle-web.com

            Die allgemeinen Dinge sollten wir ruhig hier diskutieren. Es wird ja nichts Geheimes werden.

            [...]

            du musst dir im Prinzip überlegen, wenn du damit ansprechen willst: Die Leute, die schon Halb-Profis sind, und denen du nur noch etwas über SafeMode beibringen willst, oder die, die nicht wissen was SafeMode ist, die es außer mal im Forum noch nie gehört haben, aber wissbegierig sind es zu erfahren.

            ... oder ihn durch eine Fehlermeldung kennenlernen (sofern sie die denn eingeschaltet haben) und nun daran verzweifeln.

            Wenn ich mir halt vorstelle, ich käme da an und ich wüsste gar nichts von SafeMode (ich weiß ja auch so nicht viel davon ;-) ), würde ich glaube ich danach nicht viel mehr verstehen.

            Meisnt Du damit jetzt meinen ersten Entwurf http://selfhtml.bitworks.de oder nur allgemein?

            Das ist das, wo ich meinte, da fehlt eventuell noch eine kleine Einleitung. Ach so, also doch die wachsende Doku. Ich arbeite ja noch daran.

            Ich hatt ja so eine Struktur schon angedeutet. Übrigens könnte nun die Frage kommen, ob man die Arrays assoziativ oder indiziert aufbauen sollte.
            Wo lag da jetzt noch mal der Unterschied im Detail?

            indiziert:
            [0] => 'Hans';
            [1] => 'Frieda';
            [2] => 'Müller';

            assoziiert:
            ['vorname'] => 'Hans';
            ['vorname_der_mutter'] => 'Frieda';
            ['nachname'] => 'Müller';

            Indizierte Arrays enthalten Positionsparameter, assoziierte Arrays enthalten Optionsparameter. Den technischem Unterschied im Hintergrund bekommen wir bei PHP nicht mit. Außerdem sind "Arrays" in PHP sowie keine Arrays (angereihte Strukturen gleicher Definition) sondern verkettete Listen (Bäume). Sonst gäbe es noch den Unterschied: Zugriff auf indizierte Arrays per Random Access, Zugriff aus assoziierte Arrays per Sequential Search oder Binary Search.

            Angesichts der Vorteile beim Zugriff über Namen und der monströsen Hauptspeicher und Festplatten plädiedre ich für assoziative Arrays. Wenn nämlich in einem Datensatz ein Teilobjekt nicht vorkommt, kostet es auch keinen Platz. Man muss nun nur seine Bearbeitungsfunktionen so erziehen, dass die eben immer vorher gucken... muss ich nun ein Bild anzeigen oder keins oder fünf Foreach() machts möglich.
            Du meinst, man sollte möglichst wenig in die Dateien speichern? Also zum Beispiel kein html Code, für Links, weil man ihn nacher noch dazufügen kann. Ebenso für Bilder. (?)

            Ja, das auch, aber ich meinte die Varianz der Datensätze, die durch Namen sehr viel leichter möglich ist, als bei Indexen. Deine Idee führt zur Klassifizierung von Elementen. Das geht dann schon in die Richtung von totaler Trennung von Inhalt und Format (versucht man bei HTML<->CSS ja auch). Das ist grundsätzlich nicht falsch, wenn man sich nicht einen dabei abkrampft. Keep ist Simple.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
              Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
              Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hi Tom

              Ja. Man muss vielleicht gelegentlich die älteren Beiträge ins Archiv schicken, damit die Datei nicht größer als ca. 2MB wird.

              Auf einer Privat-Seite müsste es doch reichen, jeden Monat als eine Datei zu archivieren, oder?

              Da hätte ich dann nochmal eine Frage; Was hälst du für besser?
              a) So hab ich das auch schon mal ausprobiert, die entsprechenden Dateien werden, wenn sie alt sind verschoben und nach Ordner Jahr/Dateiname Monat abgelegt.
              Dann gibt es ein PHP Script, welches mit index.php?jahr=xxx&monat=xx aufgerufen werden kann, welches die Datein einliest und ausgibt. Sind keine GET Variablen dran, listet es alle vorhandenen Jahre auf, bei Klick auf Jahr die Monate.
              b) Wenn eine Datei fällig fürs achiv ist, wird eine .html Datei erzeugt, wo der Code dann richtig reingeschrieben wird. Über Links von der index.php im Archiv kann man dann zu allen Monaten gelangen.
              Eventuell auflistung von Jahren wie oben, ansonsten manuell.

              Du könntst sie ja mit ".aol" kennzeichen *gg* für "Array Organized List".

              Man sollte das leben halt mit Humor angehen ;-)

              Geanau das ist falsch. Stell Dir vor, Du liest, während schon jemand schreibt. Nach Deiner Methode wäre die Datei in diesem Moment ja noch nicht gesperrt. Aber die Thematik der Zeit-Zustandsdiagramm und des "richtigen" Lockings wir ein großes Kapitel in dem Artikel einnehmen. Selbst die Überlegung, mit welchem Mode (r,w,a) die Datei geöffnet wird, lässt keinerlei Raum, wenn man die Datei selber als Sperrobjekt nutzen will.

              Aber wenn ich zum Beispiel eine Datei habe, die _nur_ ausgeben soll, so brauche ich da doch nicht lock() verwenden, oder?
              Oder käme es dann trotzdem zu Problemen, wenn ich gerade auslese, und ein anderer schreiben will?

              Hm, kleine Frage: Was, wenn das neue Array nun kürzer ist als das alte. Bei deiner Methode mit fseek() und fwrite(), würde dann da am Ende nicht der Rest des alten, längeren Arrays stehen bleiben?
              Darum trimmt man sie ja vor der Freigabe mit ftruncate().

              Achso, da müsste man dann ftruncate(filesize()) verwenden, oder was verwendet man am besten, um die Länge der Datei herauszufinden?

              Warum nicht den File vorher schließen, eneut öffnen und zwar mit der Fuktion, das die dateilänge auf 0 Bytes gesetzt wird (das war glaube ich "w")?
              Weil man sie dann nicht selber als Sperrobjekt nutzen kann, sondern eine Hilfsdatei benötigt (so wie in speichern.php beschrieben)

              Das habe ich jetzt noch nicht ganz verstanden. _Weshalb_ braucht man dann eine Hilfsdatei?

              Was macht denn ein Co-Autor so genau?
              [...]

              OK, ich werds mir merken ;-)

              Die allgemeinen Dinge sollten wir ruhig hier diskutieren. Es wird ja nichts Geheimes werden.

              Hm, es gibt nur so Leute, die sich immer beschweren, dass das Forum für den häufigen/anhaltenden Nachrichtenaustausch nicht gedacht ist (was ja auch stimmt).
              Und wenn dieser Thread dann hier weg ist, dann muss man halt immer wieder einen neuen aufmachen.

              Meinst Du damit jetzt meinen ersten Entwurf http://selfhtml.bitworks.de oder nur allgemein?

              Genauer gesagt von http://selfhtml.bitworks.de/Safe_Mode.doc? Ja, ich meinte den ersten Entwurf davon. Es ist vielleicht stellenweise etwas zu sehr gefachsimpelt - aber wie gesagt, dass kommt auf die Zielgruppe an.
              Aber du willst doch das mit dem SafeMode auch als Feature Artikel reinbringen, oder? Dann musst du das ja noch alles in HTML-Form bringen. Oder willst du das als .doc Dokumentation ins Netzt stellen?

              Wo lag da jetzt noch mal der Unterschied im Detail?
              indiziert:
              [0] => 'Hans';
              assoziiert:
              ['vorname'] => 'Hans';

              Achso, assoziiert ist also das wo eine Wirkliche Name = Wert Zuweisung vorhanden ist.
              Ich kannte das beides, was du geschrieben hast. Aber mir war nicht klar, was was ist und wie es heißt *g*

              Ja, das auch, aber ich meinte die Varianz der Datensätze, die durch Namen sehr viel leichter möglich ist, als bei Indexen. Deine Idee führt zur Klassifizierung von Elementen. Das geht dann schon in die Richtung von totaler Trennung von Inhalt und Format (versucht man bei HTML<->CSS ja auch). Das ist grundsätzlich nicht falsch, wenn man sich nicht einen dabei abkrampft. Keep ist Simple.

              Eigentlich dürfte das ja nicht so schwer sein, so könnte man vielleicht bei einem Gästebuch den Aubau des Arrays machen:

              $riesengroßes_Supperarray
                [ID des Postings]
                   [Angaben des Besuchers]
                       [Name]     => ...
                       [E-Mail]   => ...
                       [Homepage] => ...
                       [Ort]      => ...
                   [Einträge des Besuchers]
                       [datum]    => ...
                       [zeit]     => ...
                       [eintrag]  => ...

              Hab ich da noch irgendwas wichtiges vergessen, was man ein Besucher eigeben können sollte?

              Beim Schreiben müsste man erst count($riesengroßes_Superarray) machen, und dann die nächsthöhere ID nehmen und den Eintrag erzeugen. Dann schließlich ist Gästebuch schreiben.

              Beim Lesen/Ausgeben müsste man eine For-Schleife nehmen:
              for($x=0,$x<count($riesengroßes_Superarray),$x++) {
                //Hier kommen dann die Ausgaben, z.B:
                echo "Eintrag von: ";
                echo $riesengroßes_Supperarray[$x][Angaben des Besuchers][Name];
                //usw mit allen Angaben
              }

              Natürlich fehlen hier noch sachen wie die '', es dürfen keine Leerzeichen in den Variablen sein usw. aber das ist ja nur zur Übersicht.
              Das würde doch grundliegend so gehen, oder sehe ich da irgendwas falsch?

              Jetzt noch mal von meinem Gästebuch weg, zu deinem Feature Artikel über Speichern in Flatfiles:
              Was hast du denn bis jetzt schon dazu alles? Hast du schon Texte geschrieben? Was beabsichtigst du da eigentlich so zu schreiben? Willst du es anhand eines Beispiels erklären, wenn ja an welchem?

              Sonst könnte ich eventuell ja noch ein Beispielscript als Ergänzung zu deinem Feature-Artikel schreiben, wo ich dann z.B. ein Gästebuch auf PHP Basis nehmen würde.

              MfG, Dennis.

              --
              Hinweise:
              Signatur 3 von 3:
              Fragen zu Formularen?
              http://tutorial.riehle-web.com hilft!
              1. Hello Dennis,
                hello Forum,

                Ja. Man muss vielleicht gelegentlich die älteren Beiträge ins Archiv schicken, damit die Datei nicht größer als ca. 2MB wird.
                Auf einer Privat-Seite müsste es doch reichen, jeden Monat als eine Datei zu archivieren, oder?

                Du sprachst doch von ca. 240 Beiträgen im Jahr. Die würden mit ca. 1.000 Byte Beitrag zuzüglich Bildern (werden nur die Referenzen in der Haupt-Datei gespeichert) und 100 Bytes Verwaltungsinformatiion und vielleicht im Mittel 200 Bytes Stellungnahme des Guestbook-Admins --> 1.400 Bytes pro Beitrag ergeben --> 336kBytes im Jahr! Es würde also vollkommen reichen, jeweils den 13. Monat ins Archiv zu verfrachten. Die Archivierungs-Push-Funktion sollte unabhängig von der Save-Funktion sein, also entschichtet. Dann kann man dynamsich entscheiden, ob nun immer der 13. Monat oder dr 6. Monat verschobenn wird und ob das Archiv auf der anderen Seite jährlich, halbjährlich, vierteljährlich oder monatlich oder, oder oder organisiert werden muss. Also immer hübsch Input-Trigger und Output-Handler der Funktionen trennen.

                Da hätte ich dann nochmal eine Frage; Was hälst du für besser?
                a) So hab ich das auch schon mal ausprobiert, die entsprechenden Dateien werden, wenn sie alt sind verschoben und nach Ordner Jahr/Dateiname Monat abgelegt.
                Dann gibt es ein PHP Script, welches mit index.php?jahr=xxx&monat=xx aufgerufen werden kann, welches die Datein einliest und ausgibt. Sind keine GET Variablen dran, listet es alle vorhandenen Jahre auf, bei Klick auf Jahr die Monate.
                b) Wenn eine Datei fällig fürs achiv ist, wird eine .html Datei erzeugt, wo der Code dann richtig reingeschrieben wird. Über Links von der index.php im Archiv kann man dann zu allen Monaten gelangen.
                Eventuell auflistung von Jahren wie oben, ansonsten manuell.

                Siehe oben. Wenn du sie EVA-Regel einhältst (auch wenn die aus dem Museum stammt), kann dir eigentlich nicht viel Böses widerfahren Und dann ist das auch schon mal einen "SelfHTML Creativ" wert.

                Du könntst sie ja mit ".aol" kennzeichen *gg* für "Array Organized List".
                Man sollte das leben halt mit Humor angehen ;-)

                Nur!

                [...]

                Oder käme es dann trotzdem zu Problemen, wenn ich gerade auslese, und ein anderer schreiben will?

                In einer "Nur Ausgabe Datei" darf niemand schreiben. Das "Nur Ausgabe" bezieht sich dann auf die "OnTime". In der "OffTime" kann ein Einzelnutzer damit machen, was er will.

                [...]

                Darum trimmt man sie ja vor der Freigabe mit ftruncate().
                Achso, da müsste man dann ftruncate(filesize()) verwenden, oder was verwendet man am besten, um die Länge der Datei herauszufinden?

                Nein.

                $_filedata = serialize($_supermonsterarray);
                ...
                $trunc_ok = ftruncate($fh, strlen($filedata));

                denn filesize() wäre ja die aktuelle Dateigröße. Das wäre aber der alte allokierte Filespace VOR dem truncate(). Das könntest Du Dir also damit schenken, denn "$len = $len" kann man sich auch schenken.

                [...sperren...]

                Das habe ich jetzt noch nicht ganz verstanden. _Weshalb_ braucht man dann eine Hilfsdatei?

                Bitte die Frage in die Liste aufnehmen. Die Antwort dauert länger.

                Die allgemeinen Dinge sollten wir ruhig hier diskutieren. Es wird ja nichts Geheimes werden.
                Hm, es gibt nur so Leute, die sich immer beschweren, dass das Forum für den häufigen/anhaltenden Nachrichtenaustausch nicht gedacht ist (was ja auch stimmt).

                Solange das vorangeht, wird sich niemand zu Recht beschweren. Und die "Zensur" ggen Nörgler und Destrukteusen ist ja in der letzten Zeit auch schaärfer geworden. Ich ´sehe da keine Gefahr. Schließlich kan und soll jede(r) InteressentIn seine Fragen und Anregungen dazu beitragen. Starke Thread-Drift wäre dann alllerdings wirklich lästig.

                Und wenn dieser Thread dann hier weg ist, dann muss man halt immer wieder einen neuen aufmachen.

                Der wird aber nicht weg sein, solange wir einen konstruktiven Dialog führen.

                Aber du willst doch das mit dem SafeMode auch als Feature Artikel reinbringen, oder? Dann musst du das ja noch alles in HTML-Form bringen. Oder willst du das als .doc Dokumentation ins Netzt stellen?

                Ich werde da protieren, wenn es soweit fertig sit. Ist nur Gewohnheitssache. Ich habe bisher zu ca. 60 Themen insgesamt ca 7.000 Kapitel (a 30 Siten im Mittel) mit Word erstellt. Da stellt man nicht plötzlich um auf Tech, genauso wie andersherum.

                Für die Entwicklung eines dynamischen Handbuches muss man dann aber bestimmt auch einredaktionssytem anpassen oder entwickeln.

                Eigentlich dürfte das ja nicht so schwer sein, so könnte man vielleicht bei einem Gästebuch den Aubau des Arrays machen:

                $riesengroßes_Supperarray
                  [ID des Postings]
                     [Angaben des Besuchers]
                         [Name]     => ...
                         [E-Mail]   => ...
                         [Homepage] => ...
                         [Ort]      => ...
                     [Einträge des Besuchers]
                         [datum]    => ...
                         [zeit]     => ...
                         [eintrag]  => ...

                Hab ich da noch irgendwas wichtiges vergessen, was man ein Besucher eigeben können sollte?

                Wenn Du etwas vergessen hättest, wäre das bei assoziativen Arrays nicht schlimm. Man könnte das Feld (Subarray) später erweitern. Das Script dazu muss natürlich auch angepasst werden. Aber es wäre i.d.R. abwärtskompatibel. Ein neues Script könnte auch deine alten Archive lesen, ohne sie konvertieren zu müssen.

                Beim Schreiben müsste man erst count($riesengroßes_Superarray) machen, und dann die nächsthöhere ID nehmen und den Eintrag erzeugen. Dann schließlich ist Gästebuch schreiben.

                Ich würde da einen Schritt weitergehen und einen Meta-Record vorschalten über die Datei. Da steht dann auch die letzte vergebene ID drin. So wäre es leicht möglich, Sätze zu löschen, ohne mit der ID durcheinander zu kommen.

                Das Lesen wird sicher auch ein eigenes Kapitel beötigen, da ja "seitenweise" schon ein wesentliches Thema ist. Mir fällt noch ein dazu "Leserechte des Benutzers"

                Jetzt noch mal von meinem Gästebuch weg, zu deinem Feature Artikel über Speichern in Flatfiles:
                Was hast du denn bis jetzt schon dazu alles? Hast du schon Texte geschrieben? Was beabsichtigst du da eigentlich so zu schreiben? Willst du es anhand eines Beispiels erklären, wenn ja an welchem?

                Ich ahe viele Ideen im Kopf und auf Papier und im Rechner dazu. Wenn ich die hier jetzt aber so zwischendurch strukturiert auflisten sollte, wäre schon wieder eine Woche weg. Ich muss das erst sichten und sortieren.

                Du könntest aber Deine Sicht der Problematik und Lösungsansätze mit heutigem Timestamp schon mal aufschreiben. Du wirst diese Erkenntnisse (über dich, die sind ja auch in Grenzen verallgemeinerbar) später nur schwer nachvollziehen können.

                Sonst könnte ich eventuell ja noch ein Beispielscript als Ergänzung zu deinem Feature-Artikel schreiben, wo ich dann z.B. ein Gästebuch auf PHP Basis nehmen würde.

                Ja. Erstmal einkleines einfaches. Dann die Gedanken dazu notien und ausarbeiten, dann ein komplexeres, dann wiede die Gedanken dazu, usw. So entsteht ein gutes Tutorial. man darf am Anfang auch ruhig Fehler drin ahben, muss den Leuten nur sagen, dass das schon ganz nett ist, aber nicht für den Produktivbetrieb geeignet.

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                  Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                  Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                1. Hi Tom

                  Auf einer Privat-Seite müsste es doch reichen, jeden Monat als eine Datei zu archivieren, oder?
                  Du sprachst doch von ca. 240 Beiträgen im Jahr. Die würden mit ca. 1.000 Byte Beitrag zuzüglich Bildern (werden nur die Referenzen in der Haupt-Datei gespeichert)

                  Also die URLs werden in der Haupt Datei gespeichert. Würdest du dem User die Möglichkeit geben, ein Bild upzuloaden? Oder soll er nur einen Link zu einem Bild angeben können? Oder soll er gar kein Bild angeben können?

                  ... und 100 Bytes Verwaltungsinformatiion und vielleicht im Mittel 200 Bytes Stellungnahme des Guestbook-Admins --> 1.400 Bytes pro Beitrag ergeben --> 336kBytes im Jahr! Es würde also vollkommen reichen, jeweils den 13. Monat ins Archiv zu verfrachten.

                  Mit anderen Worten: Pro Jahr eine Datei im Archiv.

                  Die Archivierungs-Push-Funktion sollte unabhängig von der Save-Funktion sein, also entschichtet.

                  Mit entschichtet meinst du, dass sie nicht serealize() gespeichert werden soll, sondern als sinnvoller Text, eventuell als .html-Datei?

                  Dann kann man dynamsich entscheiden, ob nun immer der 13. Monat oder der 6. Monat verschobenn wird und ob das Archiv auf der anderen Seite jährlich, halbjährlich, vierteljährlich oder monatlich oder, oder oder organisiert werden muss. Also immer hübsch Input-Trigger und Output-Handler der Funktionen trennen.

                  Ich habe noch nicht ganz verstanden, wie du dir das vom Aufbau her vorstellst, mit dem dynamisch entscheiden.

                  Da hätte ich dann nochmal eine Frage; Was hälst du für besser?
                  Siehe oben. Wenn du sie EVA-Regel einhältst (auch wenn die aus dem Museum stammt), kann dir eigentlich nicht viel Böses widerfahren Und dann ist das auch schon mal einen "SelfHTML Creativ" wert.

                  Was ist denn die EVA-Regel? Hab ich noch nie von gehört.

                  Achso, da müsste man dann ftruncate(filesize()) verwenden?
                  Nein.

                  Oh, stimmt, Denkfehler meinerseits.

                  [...sperren...]

                  Das habe ich jetzt noch nicht ganz verstanden. _Weshalb_ braucht man dann eine Hilfsdatei?
                  Bitte die Frage in die Liste aufnehmen. Die Antwort dauert länger.

                  Und soll auch in den Feature-Artikel.

                  [...HTML-Form...]
                  Ich werde da protieren, wenn es soweit fertig ist. Ist nur Gewohnheitssache. Ich habe bisher zu ca. 60 Themen insgesamt ca 7.000 Kapitel (a 30 Siten im Mittel) mit Word erstellt. Da stellt man nicht plötzlich um auf Tech, genauso wie andersherum.

                  Das Ganze muss dann ja aber auch noch die das SelfHTML-Feature-Artikel-Layout. Wird bestimmt ne Menge Arbeit das alles rüberzuschreiben.
                  Wenn du willst, kann ich dir da ja ein bisschen helfen.

                  [...SuperRiesegroßesMegaArray...]
                  Hab ich da noch irgendwas wichtiges vergessen, was man ein Besucher eigeben können sollte?
                  Wenn Du etwas vergessen hättest, wäre das bei assoziativen Arrays nicht schlimm. Man könnte das Feld (Subarray) später erweitern. Das Script dazu muss natürlich auch angepasst werden. Aber es wäre i.d.R. abwärtskompatibel. Ein neues Script könnte auch deine alten Archive lesen, ohne sie konvertieren zu müssen.

                  Alte Archive existieren bis jetzt noch nicht, aber wenn mann z.B. ein Gästebuch erstellt, und später noch zusätzlich ein Eingabefeld für den User "Bild URL" macht, kann man die alten Daten trotzdem mit dem Gleichen Script auswerten - klar.

                  Beim Schreiben müsste man erst count($riesengroßes_Superarray) machen, und dann die nächsthöhere ID nehmen und den Eintrag erzeugen. Dann schließlich ist Gästebuch schreiben.
                  Ich würde da einen Schritt weitergehen und einen Meta-Record vorschalten über die Datei. Da steht dann auch die letzte vergebene ID drin. So wäre es leicht möglich, Sätze zu löschen, ohne mit der ID durcheinander zu kommen.

                  Das habe ich jetzt wieder nicht so ganz verstanden, da mit Meta-Record kein Begriff ist. Werden denn gelöschte IDs erneut vergeben? Es wäre vielleicht besser "nein", da man sonst die die Ausgabe nicht so leicht nach Eintragszeitpunkt ordnen kann.

                  Das Lesen wird sicher auch ein eigenes Kapitel beötigen, da ja "seitenweise" schon ein wesentliches Thema ist. Mir fällt noch ein dazu "Leserechte des Benutzers"

                  Genau, ich stelle mir das so vor, wie ich es auch schon realisiert habe, allerdings nicht mit deiner Methode in eine Textdatei zu schreiben:
                  Es gibt eine Datei, wo man ins Gästebuch eintragen kann, unter den Eingabefeldern werden die letzten beiden Monate aufgelistet.
                  Dann gibt es das Archiv, wo alle Monate auf einer Seite sind, und einzeln aufgerufen werden können.
                  Schließlich gibt es noch einen Admin Bereich, wo man einzelne Postings aus den letzten beiden Monaten löschen oder editieren kann. Oder man kann auch irgendeinen beliebigen Monat (der bereits im Archiv ist) löschen.

                  Sonst könnte ich eventuell ja noch ein Beispielscript als Ergänzung zu deinem Feature-Artikel schreiben, wo ich dann z.B. ein Gästebuch auf PHP Basis nehmen würde.
                  Ja. Erstmal einkleines einfaches. Dann die Gedanken dazu notien und ausarbeiten, dann ein komplexeres, dann wiede die Gedanken dazu, usw. So entsteht ein gutes Tutorial. man darf am Anfang auch ruhig Fehler drin ahben, muss den Leuten nur sagen, dass das schon ganz nett ist, aber nicht für den Produktivbetrieb geeignet.

                  Ich dachte daran, eine kleine Einleitung zu erstellen. Da fängt man ganz langsam an, Datein in eine Textdatei zu speichern.
                  Daran könnte man auch gleichzeitig die verschiedenen Methoden erwähnen, und deren Vor- und Nachteile nennen. Ich dachte da, erst eine kleine Notitz einfach zeilenweise in eine Textdatei zu schreiben -> Damit kann man aber noch keine verschiedenen Felder o.ä. machen. Dann mit einem Trennzeichen zu schreiben, und beim Einlesen der Datei nach dem Trennzeichen in Unterrarrays zu zerlegen -> auch nocht nicht so toll. Dann wird noch CSV erwähnt, was ja dem vorherigen ähnlich ist, gleicher Nachteil, Vorteil kann man ich Exel importieren.
                  Dann am Ende wird deine Lösung von dir vorgestellt. Du kannst Codebeispiel etc schreiben und die Vorteile noch mal genau erklären.

                  Ich hoffe, du konntest mir wenigstens einigermaßen folgen.

                  MfG, Dennis.

                  --
                  Hinweise:
                  Signatur 1 von 3:
                  Meine Homepage: http://www.riehle-web.com
                  Tutorial: http://tutorial.riehle-web.com
                  1. Hello Dennis,

                    eine Bitte zu Anfang: Leerzeilen kosten nur ca. zwei Bytes im Archiv. Also sei bitte nicht so sparsam mit der Absatzbildung. man kann dann ein Posting viel leichter lesen, wenn zwichen Frage und Antwort immer eine Leerzeile und zwischen den einzelnen Pärchen immer zwei (oder mehr) Leerzeilen stehen.

                    Also die URLs werden in der Haupt Datei gespeichert. Würdest du dem User die Möglichkeit geben, ein Bild upzuloaden? Oder soll er nur einen Link zu einem Bild angeben können? Oder soll er gar kein Bild angeben können?

                    Das ist schon Philosophie. Sicher gibt es mehrere Lösungswege. Alle sind diskussionswürdig. Was aber auf keinen Fall, in die Datei gehört, ist das Bild selbst, denn ein Browser fordert ja jedes Bild über eine URi mit einem eigenen Request an. Es wäre doch dumm, wenn für ein Bild von 100kByte eine Stream-Datei von 50MByte geöffnet werden müsste. Außerdem hatten wir ja 2MByte für die Datei als "Archivschwelle" festgelegt.

                    ... und 100 Bytes Verwaltungsinformatiion und vielleicht im Mittel 200 Bytes Stellungnahme des Guestbook-Admins --> 1.400 Bytes pro Beitrag ergeben --> 336kBytes im Jahr! Es würde also vollkommen reichen, jeweils den 13. Monat ins Archiv zu verfrachten.
                    Mit anderen Worten: Pro Jahr eine Datei im Archiv.

                    Pro Jahr eine Datei im Archiv, die jeden Monat um einen Monat wächst.

                    Die Archivierungs-Push-Funktion sollte unabhängig von der Save-Funktion sein, also entschichtet.
                    Mit entschichtet meinst du, dass sie nicht serealize() gespeichert werden soll, sondern als sinnvoller Text, eventuell als .html-Datei?

                    Nein, ich meine, dass das Ereignis, das das abtrennen von einem Monat von der aktuellen Datei auslöst nichts damit zu tun hat, wann und ob eine neue Archivdatei angelegt wird oder siee reorganisiert werden muss oder der Monat nur eingepflegt wird. Die Applikation (Funktionensatz) in der Mitte ist da also die Schnittstelle oder besser Verbindungsstelle.

                    Da hätte ich dann nochmal eine Frage; Was hälst du für besser?
                    Siehe oben. Wenn du sie EVA-Regel einhältst (auch wenn die aus dem Museum stammt), kann dir eigentlich nicht viel Böses widerfahren Und dann ist das auch schon mal einen "SelfHTML Creativ" wert.
                    Was ist denn die EVA-Regel? Hab ich noch nie von gehört.

                    Asbach HTML gibts nur, wenn einem so was Gutes widerfährt...
                    Eingabe - Verarbeitung - Ausgabe
                    Gute alte Batchprogrammierung, die für Dialogprogramm auf PCs lange Zeit nicht mehr eingehalten wurde. Es ist auf einer geschlossenen Maschine auch nicht notwendig. Da kann man on the fly reagieren, also auf jede Taste...

                    Beim Schreiben müsste man erst count($riesengroßes_Superarray) machen, und dann die nächsthöhere ID nehmen und den Eintrag erzeugen. Dann schließlich ist Gästebuch schreiben.
                    Ich würde da einen Schritt weitergehen und einen Meta-Record vorschalten über die Datei. Da steht dann auch die letzte vergebene ID drin. So wäre es leicht möglich, Sätze zu löschen, ohne mit der ID durcheinander zu kommen.
                    Das habe ich jetzt wieder nicht so ganz verstanden, da mit Meta-Record kein Begriff ist. Werden denn gelöschte IDs erneut vergeben? Es wäre vielleicht besser "nein", da man sonst die die Ausgabe nicht so leicht nach Eintragszeitpunkt ordnen kann.

                    Meta-Daten sind "Daten über Daten", also keine eigentlichen Nutzdaten, sondern eine Bewertung der Darstellung. Die Satznummer gehört ja auch nicht nicht zu den Nutzdaten, denn sie hat überhaupt keinen Nutzen für das Objekt selbst. Sie hat erst Nutzen für den Verwalter der Objekte. Und da hast Du es richtig verstanden, dass man eine einmal vergebene ID kein zweites Mal vergeben sollte, jedenfalls nicht innerhalb einer angemessenen Sperrzeit.

                    Liebe Grüße aus http://www.braunschweig.de

                    Tom

                    --
                    [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                      Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                      Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    1. Hi Tom!

                      Das SelfHTML Forum ist (endlich) wieder da und auch merklich schneller. So weit so gut.

                      Jetzt aber mal zum Feature Artikel: Wie weit bist du? Hast du den Safe Mode schon fertig?
                      Ich hatte dir da zwar mal eine E-Mail geschrieben, aber vielleicht ist die ja nicht angekommen.

                      Ich hab jetzt schon mal ein bisschen überlegt, wie man den Aufbau des Feature Artikels gestalten könnte und wozu man so alles was schreiben sollte.

                      Bis denne mal,
                      MfG, Dennis.

                      --
                      Hinweise:
                      Fragen zu Formularen beantwortet http://tutorial.riehle-web.com
                      Meine HP: http://www.riehle-web.com
                      1. Hello Dennis,

                        Ich hab jetzt schon mal ein bisschen überlegt, wie man den Aufbau des Feature Artikels gestalten könnte und wozu man so alles was schreiben sollte.

                        Ich habe den Artikel über den Safe_mode noch nicht weiterentwickelt, weil mir noch ein paar Antworten von "Standard-Hoster"-Usern fehlen. Die Tipps, Tricks und Tests Ecke sollte ja nicht irgendwelche Sachen enthalten, die gar keiner bracuht, sondern praxisgerecht sein.

                        Liebe Grüße aus http://www.braunschweig.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        1. Hi Tom,

                          Ich habe den Artikel über den Safe_mode noch nicht weiterentwickelt, weil mir noch ein paar Antworten von "Standard-Hoster"-Usern fehlen. Die Tipps, Tricks und Tests Ecke sollte ja nicht irgendwelche Sachen enthalten, die gar keiner bracuht, sondern praxisgerecht sein.

                          Soso, du sagst mir dann also Bescheid, wenn du mit dem Safe Mode fertig bist?
                          Mal schauen, wenn ich Zeit habe, mache ich vielleicht noch etwas an dem Speichern weiter.
                          Meine E-Mail hast du ja glaub ich.

                          MfG, Dennis.

                          --
                          Signatur 1 von 3:
                          Meine Homepage: http://www.riehle-web.com
                          Tutorial: http://tutorial.riehle-web.com
                          1. Hello,

                            Soso, du sagst mir dann also Bescheid, wenn du mit dem Safe Mode fertig bist?
                            Mal schauen, wenn ich Zeit habe, mache ich vielleicht noch etwas an dem

                            Und in Thread http://forum.de.selfhtml.org/my/?t=82370&m=479705 steht auch schon wieder 'was zum Sammeln.

                            Liebe Grüße aus http://www.braunschweig.de

                            Tom

                            --
                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                            Nur selber lernen macht schlau
                            1. Hi Tom,

                              Und in Thread http://forum.de.selfhtml.org/my/?t=82370&m=479705 steht auch schon wieder 'was zum Sammeln.

                              Werds mir merken.

                              Jetzt hab ich aber noch ein Problem. Ich bin gerade dabei mir einen News Bereich einzurichten, und das hier ist mein Code zum Abspeichern. Frage an den Profi ;-) : Wo liegt der Fehler?

                              $daten = array( "autor" => $_POST['autor'],
                                    "thema" => $_POST['thema'],
                                    "datum" => date("d.m.y"),
                                    "news"  => $_POST['news']  );

                              $fp = fopen("aktuell.txt","a+");

                              flock($fp,2);

                              $string_packed = fread($fp,filesize("aktuell.txt"));
                                $string = unserialize($string_packed);

                              $x = count($string) +1;
                                $string["beitrag$x"] = $daten;

                              $string_packed_neu = serialize($string);
                                fseek($fp,0);
                                fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                              flock($fp,3);
                                fclose($fp);

                              Zuerst werden Formulardaten übernommen (ungeprüft, da ich sie selber eingebe - prüfung kommt später)
                              Dann wollte ich eigentlich die Textdatei öffnen/anlegen und sie auslesen. Eine Ausgabe von $string_packed am Ende beweißt auch, dass das geklappt hat.
                              Eine Ausgabe von $string gibt Array her - auch klar, muss auch so sein (sonst hat was nicht geklappt *g*) aber...

                              Irgendwie habe ich das Gefühl, dass er die alten Daten im neuen String nicht im einbezieht, wenn man sich die Textdatei anschaut sieht man dort:
                              a:1:  undsoweiter...
                              und dahinter das gleiche nochmal mit den neuen Werten -> Das ist aber falsch. Er soll ja schließlich die sachen ins alte Array übernehmen.

                              Sicherlich ist da irgendwo ein kleiner Denkfehler. Vermutlich bei den Änderungen im Array, aber ich kriegs zum Verrecken nicht raus wo.
                              Ist die Art, wie ich die Daten ändern wollte falsch?

                              MfG, Dennis.

                              --
                              Signatur 2 von 3:
                              Die EU und die neuen Mitgliedslnder:
                              http://www.riehle-web.com/pkprojekt/
                              Oder doch mehr in HTML interessiert?
                              http://tutorial.riehle-web.com
                              1. Hello,

                                Wo liegt der Fehler?

                                $daten = array( "autor" => $_POST['autor'],
                                      "thema" => $_POST['thema'],
                                      "datum" => date("d.m.y"),
                                      "news"  => $_POST['news']  );

                                $fp = fopen("aktuell.txt","a+");

                                flock($fp,2);

                                #mimm lieber die Konstanten:
                                    flock($fp,LOCK_EX);

                                oder wenn Du nur lesen willst reicht auch LOCK_SH

                                hier fehlt ein fseek($fp,0,SEEK_SET);

                                Nach einem  open a+ steht der Zeiger ja hinten

                                $string_packed = fread($fp,filesize("aktuell.txt"));
                                  $string = unserialize($string_packed);

                                Das ist kein String und sollte deshalb auch nicht so genannt wrden:

                                $_data = unserialize($string_packed);

                                $x = count($string) +1;
                                  $string["beitrag$x"] = $daten;

                                bisschen ungeschickt

                                $_data[] = ... # würde die Daten automatisch anhängen.

                                allerdings sollte man die eindeutige ID schon mit abspeichern

                                das geht am Besten, wenn man die letzte ID mit abspeichert.

                                $string_packed_neu = serialize($string);
                                  fseek($fp,0);
                                  fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                hier fehlt noch ein ftruncate, falls man nicht hinzugefügt sondern

                                geändert oder gelöscht hat.

                                flock($fp,3);

                                das ist obsolete, wenn Du die Datei gleich schließt, wird automatisch entsperrt.

                                fclose($fp);

                                Teil doch Deine das Array:

                                $_meta = array();
                                $_meta['lastid'] = 0;  # das ist der Startwert.

                                $_data = array();
                                $_data[$id]['vorname'] = ...
                                $_data[$id]['datum'] = ...

                                Da Du mit LOCK_EX vor dem Lesen arbeitest, ist die ID auf jeden Fall gültig.

                                Also

                                • öffnen
                                • sperren
                                • auslesen
                                • deserialisieren
                                • letzte ID auslesen
                                • ID erhöhen und zurückschreiben
                                • neunen Datensatz mit neuer ID einfügen
                                • serialisieren
                                • zurückschreiben
                                • schließen

                                Liebe Grüße aus http://www.braunschweig.de

                                Tom

                                --
                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                Nur selber lernen macht schlau
                                1. Hi Tom,

                                  Erst eine Frage: Hat der Unterstrich vor data eine tiefere Bedeutung? Oder machst du das halt nur einfach so? $_data

                                  Ich hab jetzt eigentlich alles laut deinen Anweisungen gemacht:

                                  $fp = fopen("aktuell.txt","a+");

                                  flock($fp,LOCK_EX);
                                    fseek($fp,0,SEEK_SET);

                                  $string_packed = fread($fp,filesize("aktuell.txt"));
                                    $_data = unserialize($string_packed);

                                  $_data[] = $daten;

                                  $string_packed_neu = serialize($_data);
                                    fseek($fp,0,SEEK_SET);
                                    fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                  $test = ftruncate($fp,strlen($string_packed_neu));
                                    fclose($fp);

                                  Nachdem ich nun aber zweimal abgeschickt habe steht in der Textdatei:

                                  a:1:{i:0;a:4:{s:5:"autor";s:1:"1";s:5:"thema";s:1:"1";s:5:"datum";s:8:"15.06.04";s:4:"news";s:1:"1";}}a:2:{i:0;a:4:{s:5:"autor";s:1:"1";s:5:"thema";s:1:"1";s:5:"datum";s:8:"15.06.04";s:4:"news";s:1:

                                  Es scheint mir, als ob der das neue einfach hintendran gesetzt hat, und dann eben wie gewünscht abgeschnitten hat. Aber warum zum Teufel setzt der das hintendran?
                                  Ich bin da irgendwie mit meinem Latein am Ende - oder besser gesagt mit meinen PHP Künsten ;-)

                                  Teil doch Deine das Array:

                                  $_meta = array();
                                  $_data = array();

                                  Da haben wir dann zwei Arrays - wo speicherst du das Array _meta ab? Als Unterarray von _data? Oder in einer anderen Text-/Binärdatei?

                                  MfG, Dennis.

                                  --
                                  Signatur 3 von 3:
                                  Fragen zu Formularen?
                                  http://tutorial.riehle-web.com hilft!
                                  1. Hi Tom,

                                    Zu deinem Artikel zum Safe Mode, ich hab hier noch etwas gefunden, was ich für sehr verständlich halte: http://www.dynamic-webpages.de/php/features.safe-mode.php

                                    MfG, Dennis.

                                    --
                                    Signatur 2 von 3:
                                    Die EU und die neuen Mitgliedslnder:
                                    http://www.riehle-web.com/pkprojekt/
                                    Oder doch mehr in HTML interessiert?
                                    http://tutorial.riehle-web.com
                                  2. Hello,

                                    Erst eine Frage: Hat der Unterstrich vor data eine tiefere Bedeutung? Oder machst du das halt nur einfach so? $_data

                                    Ich kennzeichne so die Arrays, angelehnt an $_POST ...
                                    Normale Skalare heißen dann eben $skalar
                                    PHP kennt ja intern nur diese zwei Typen und dann natürlich Funktionen, Klassen Konstanten etc.

                                    Ich hab jetzt eigentlich alles laut deinen Anweisungen gemacht:

                                    $fp = fopen("aktuell.txt","a+");

                                    flock($fp,LOCK_EX);
                                      fseek($fp,0,SEEK_SET);

                                    $string_packed = fread($fp,filesize("aktuell.txt"));
                                      $_data = unserialize($string_packed);

                                    $_data[] = $_daten;

                                    $string_packed_neu = serialize($_data);
                                      fseek($fp,0,SEEK_SET);
                                      fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                    $test = ftruncate($fp,strlen($string_packed_neu));
                                      fclose($fp);

                                    Nachdem ich nun aber zweimal abgeschickt habe steht in der Textdatei:

                                    a:1:{i:0;a:4:{s:5:"autor";s:1:"1";s:5:"thema";s:1:"1";s:5:"datum";s:8:"15.06.04";s:4:"news";s:1:"1";}}a:2:{i:0;a:4:{s:5:"autor";s:1:"1";s:5:"thema";s:1:"1";s:5:"datum";s:8:"15.06.04";s:4:"news";s:1:

                                    Es scheint mir, als ob der das neue einfach hintendran gesetzt hat, und dann eben wie gewünscht abgeschnitten hat. Aber warum zum Teufel setzt der das hintendran?

                                    Weil das $_data[] = $_satz;  den Satz immer hinten an das Datenarray anhängt.

                                    Wenn Du gezielt ein Arrayelement verändern willst, musst Du den Index angeben

                                    $_data[27] = $_satz;

                                    würde den neuen oder veränderten Datensatz auf Index 27, also auf die 28. Stelle (wenn noch kein Element fehlt) schreiben.

                                    Teil doch Deine das Array:

                                    $_meta = array();
                                    $_data = array();

                                    irgendwie ganz am Anfang, wenn die Datei noch nicht da war...

                                    $_file = array();
                                    $_file['meta'] = array();
                                    $_file['data'] = array();

                                    $_file['meta']['lastid'] = 0;
                                    $_file['meta']['lastupdate'] = date(...);

                                    für den ersten Datensatz:

                                    $_file['meta']['lastid']++;
                                    $id       = $_file['meta']['lastid'];
                                    $lastdate = $_file['meta']['lastupdate'];  # für die Anzeige merken
                                    $_file['meta']['lastupdate'] = date(...);  # für die Veränderung speichern

                                    $_file['data'][$id]['autor'] = $_POST['autor']; # vergiss stripslashes() nicht
                                    ...

                                    $filestream = serialize...

                                    Und weg damit.

                                    Wie du siehst: Array in Array in Array...

                                    datei --+---[meta]--+----[lastid]----'4'
                                              |           +----[lastdate]--'20040615'
                                              |
                                              |
                                              +---[data]--+----[0]--+--[autor]----'thomas'
                                            ( | )         |         +--[titel]----'speichern in Flatfiles'
                                            ( | )         |         +--[test]-----'blablabla'
                                              v           |
                                             usw.         |
                                                          +----[3]--
                                                          |
                                                          |
                                                          |
                                                          |
                                                          +----[4]--

                                    Datensatz 1 und 2 wurden schon gelöscht. Schade eigentlich. Trotzdem wissen wir, dass die nächste ID die 5 sein muss. Ist doch klasse, oder?

                                    Liebe Grüße aus http://www.braunschweig.de

                                    Tom

                                    --
                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                    Nur selber lernen macht schlau
                                    1. Hi Tom,

                                      $_data[] = $_daten;

                                      Ganz nebenbei: Das muss bei mir schon $daten heißen, weil die Variable oben (Array) nicht $_daten sonder eben $daten heißt.

                                      Es scheint mir, als ob der das neue einfach hintendran gesetzt hat, und dann eben wie gewünscht abgeschnitten hat. Aber warum zum Teufel setzt der das hintendran?

                                      Weil das $_data[] = $_satz;  den Satz immer hinten an das Datenarray anhängt.

                                      Und was muss ich dann jetzt für einen Code nehmen? Ich will nichts anderes, als dem Array, dem Hauptarray ein weiteres Unterarray dazuzufügen.

                                      Wenn Du gezielt ein Arrayelement verändern willst, musst Du den Index angeben
                                        $_data[27] = $_satz;

                                      Das ist klar.

                                      Wie du siehst: Array in Array in Array...

                                      datei --+---[meta]--+----[lastid]----'4'
                                                |           +----[lastdate]--'20040615'
                                                |
                                                +---[data]--+----[0]--+--[autor]----'thomas'
                                              ( | )         |         +--[titel]----'speichern in Flatfiles'
                                              ( | )         |         +--[test]-----'blablabla'
                                                v           |
                                               usw.         |
                                                            +----[3]--
                                                            |
                                                            +----[4]--

                                      Datensatz 1 und 2 wurden schon gelöscht. Schade eigentlich. Trotzdem wissen wir, dass die nächste ID die 5 sein muss. Ist doch klasse, oder?

                                      Sicherlich ist das alles Klasse, aber ich krieg es nicht gebacken, das Array $daten als neues Unterarary in $_data zu packen ohne die ID zur Hand zu haben.
                                      Geht das ohne ID absolut nicht? Es muss doch möglich sein, ein Unterarray hinzuzufügen, und wieder neu abszuspeichern.

                                      Außerdem schenit das Problem bei mir mehr da zu liegen, dass der das neue nicht an den Anfang der Textdatei schreibt! Obwohl ein fseek da ist.

                                      MfG, Dennis.

                                      --
                                      Signatur 1 von 3:
                                      Meine Homepage: http://www.riehle-web.com
                                      Tutorial: http://tutorial.riehle-web.com
                                      1. Hi Tom,

                                        Es scheint mir, als ob der das neue einfach hintendran gesetzt hat, und dann eben wie gewünscht abgeschnitten hat. Aber warum zum Teufel setzt der das hintendran?

                                        Weil das $_data[] = $_satz;  den Satz immer hinten an das Datenarray anhängt.

                                        Und was muss ich dann jetzt für einen Code nehmen? Ich will nichts anderes, als dem Array, dem Hauptarray ein weiteres Unterarray dazuzufügen.

                                        Das war es, wo ich nicht weiterwusste. Vielleicht haben wir uns da auch mißverstanden.
                                        Jetzt habe ich aber eine funktionierende Lösung gefunden:

                                        $fp = fopen("aktuell.txt","a+");

                                        flock($fp,LOCK_EX);
                                          fseek($fp,0,SEEK_SET);

                                        $string_packed = fread($fp,filesize("aktuell.txt"));
                                          $_data = unserialize($string_packed);

                                        $_data[] = $daten;

                                        $string_packed_neu = serialize($_data);

                                        ftruncate($fp,0);
                                          fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                        fclose($fp);

                                        Meine Lösung ist diese: Ich habe einfach bevor ich die daten in die Textdatei reingeschrieben habe (Und da war immer das Problem: Der hat in der Textdatei die alten Daten nicht überschrieben und durch das anschließende ftruncate waren dann von den neuen Daten nur die Hälfte da) die Länge der alten Textdatei auf 0 Bytes gesetzt habe.
                                        Somit werden die neuen Daten ganz einfach wieder an den Anfang geschrieben.

                                        Trotzdem würde es mich jetzt noch interessieren, warum deine Methode bei mir nicht geklappt hat. Habe ich dich mißverstanden? Wo war der Fehler? Oder hast du dich falsch ausgedrück? Oder kann es sein, dass etwas bei mir lokal nicht so klappt, wie man will?

                                        MfG, Dennis.

                                        --
                                        Signatur 3 von 3:
                                        Fragen zu Formularen?
                                        http://tutorial.riehle-web.com hilft!
                                        1. Hello,

                                          fseek($fp,0,SEEK_SET);

                                          ftruncate($fp,0);
                                            fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                          fclose($fp);

                                          Saubere Lösung. Spart ein Statement und eine Dateioperation.
                                          Der Satzzeiger sollte aber immer innerhalb des erlaubten Bereichs stehen. Wenn man also auf 0 kürzt, dann vorher auf 0 stellen.

                                          Trotzdem würde es mich jetzt noch interessieren, warum deine Methode bei mir nicht geklappt hat. Habe ich dich mißverstanden? Wo war der Fehler? Oder hast du dich falsch ausgedrück? Oder kann es sein, dass etwas bei mir lokal nicht so klappt, wie man will?

                                          Das könnte auch der Fehler bei meiner Variante sein. Da steht der Zeiger ja hinter der letzen Position...

                                          Liebe Grüße aus http://www.braunschweig.de

                                          Tom

                                          --
                                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                          Nur selber lernen macht schlau
                                          1. Hi Tom,

                                            fseek($fp,0,SEEK_SET);

                                            ftruncate($fp,0);
                                              fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                            fclose($fp);

                                            Saubere Lösung. Spart ein Statement und eine Dateioperation.
                                            [...] Fehler bei meiner Variante [...]

                                            Mit anderen Worten: Diese Lösung ist durchaus ok und kann als einwandfrei funktionierend angesehen werden.

                                            Sag mal, stören in so einem Ding eigentlich Zeilenumbrüche? Also ich meine in dem Abgespeicherten?
                                            Und " bzw. ' solle man doch auf jeden Fall vorher umwandeln, oder?

                                            Nun zur Ausgabe:
                                            Das müsste mit einer einfache For-Schleife einwandfrei gehen. Und wenn ich für die index.php nur die beiden neuesten News haben will, schaue ich einfach die höchste vergebene ID nach und gebe diese und diese -1 aus.

                                            Was mir mehr sorgen bereitet, ist die Archvivierung.
                                            Der eigentliche Code selber dürfte nicht schwer sein, vielleicht sogar Billigprogrammierung, wie du sagst. Die Frage ist mehr, wo der Code aufgerufen wird?
                                            Prima wäre es da natürlich, wenn einem Crown Jobs zur Verfügng stünden, da könnte man immer ein "Archivierungs Script" z.B. Mitternachts aufrufen und fertig.

                                            Wie aber hier? Auf der Seite, auf der auch die News ausgegeben werden?
                                            Was wenn da mal (kann ja mal sein) das Script über 1 Monat nicht aufgerufen wurde?

                                            Da bräuchte man dann eine Methode die Daten zu vergleichen. Ich habe mit "Datumen" (btw. was ist der plural von Datum? daten?) in PHP noch nicht viel gearbeitet.
                                            Wie kann man Daten vergleichen? Also eine If Abfrage, wenn Datum älter als vor 30 Tagen -> archivieren?

                                            Da gibt es doch diesen Zeitstempel oder so. Das ist unformatiert so eine Kette wie 23953490 oder irgendwas eben.
                                            Ist es da so, dass ältere Daten immer kleiner (bzw. größer) sind als neue Daten?

                                            MfG, Dennis.

                                            --
                                            Signatur 3 von 3:
                                            Fragen zu Formularen?
                                            http://tutorial.riehle-web.com hilft!
                                            1. Hello,

                                              fseek($fp,0,SEEK_SET);

                                              ftruncate($fp,0);
                                                fwrite($fp,$string_packed_neu,strlen($string_packed_neu));

                                              fclose($fp);

                                              Saubere Lösung. Spart ein Statement und eine Dateioperation.
                                              [...] Fehler bei meiner Variante [...]

                                              Mit anderen Worten: Diese Lösung ist durchaus ok und kann als einwandfrei funktionierend angesehen werden.

                                              Mit dem fseek() vor dem truncate ja.

                                              Sag mal, stören in so einem Ding eigentlich Zeilenumbrüche? Also ich meine in dem Abgespeicherten?
                                              Und " bzw. ' solle man doch auf jeden Fall vorher umwandeln, oder?

                                              Nein eben nicht, da die Daten streng serialisiert werden.

                                              Aber man deshalb die Datei immer nur vollständig auslesen und mus immer das gesamte Array, bestend aus den Metadaten UND den Datensätzen serialisieren/deserialisieren.

                                              Nun zur Ausgabe:
                                              Das müsste mit einer einfache For-Schleife einwandfrei gehen. Und wenn ich für die index.php nur die beiden neuesten News haben will, schaue ich einfach die höchste vergebene ID nach und gebe diese und diese -1 aus.

                                              Nimm nicht for() sondern foreach() und break;

                                              Oder schau Dir die Funktionen reset(), next(), prex(), pos(), end() usw. an. Da kannst Du dann eine nicht dedizierte Schleife (mit while()) aufbauen. Es gibt nur noch ein Problem: Wie stellt man den Zeiger eines Arrays exact auf einen bekannten Key?

                                              Das muss ich nochmal überprüfen.

                                              Prima wäre es da natürlich, wenn einem Crown Jobs zur Verfügng stünden, da könnte man immer ein "Archivierungs Script" z.B. Mitternachts aufrufen und fertig.

                                              Speicher doch einfach in [Meta][lastsave] den letzten Savelauf ab. Bei jedem Aufruf lässt Du einfach prüfen, wann das letzte Mal wieviele Sätze abgetrennt wurden. Wenn dann vier Wochen lang kein Aufruf erfolgte, hat sich an der Sicherung doch auch nix geändert. Oder Du machst das einfach vom Überlaufen abhängig. Immer wenn 105 Sätze erreicht sind, werden die 5 ältesten abgetrennt und weggesichert - oder so ähnlich.

                                              Liebe Grüße aus http://www.braunschweig.de

                                              Tom

                                              --
                                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                              Nur selber lernen macht schlau
                                              1. Hi Tom,

                                                Saubere Lösung. Spart ein Statement und eine Dateioperation.

                                                Mit dem fseek() vor dem truncate ja.

                                                Mir fällt noch ein: Man sollte überprüfen, ob das Locking true zurückgibt, und wenn nicht es später noch einmal probieren.

                                                Ich dachte da an:
                                                  $fp = fopen("aktuell.txt","a+");
                                                  while($fp == false) {
                                                     sleep(1);
                                                     $fp = fopen("aktuell.txt","a+");
                                                  }

                                                Was hälst du davon?

                                                Sag mal, stören in so einem Ding eigentlich Zeilenumbrüche? Also ich meine in dem Abgespeicherten?
                                                Und " bzw. ' solle man doch auf jeden Fall vorher umwandeln, oder?

                                                Nein eben nicht, da die Daten streng serialisiert werden.

                                                Ich kann also mit gutem Gewissen (fast) alle Zeichen ganz einfach abspeichern. Ich brauch also vor dem Abpseichern eigentlich nichts umzuwandeln - zumindesten theorethisch nicht.

                                                Nun zur Ausgabe:
                                                Das müsste mit einer einfache For-Schleife einwandfrei gehen. Und wenn ich für die index.php nur die beiden neuesten News haben will, schaue ich einfach die höchste vergebene ID nach und gebe diese und diese -1 aus.

                                                Nimm nicht for() sondern foreach() und break;

                                                Ok, ich versuche es mal. Allerdings weiß ich das break noch nicht einzuordnen - wo brauche ich das?

                                                foreach($datei['_data'] as $key) {
                                                     echo $key['name'];
                                                     echo $key['datum'];
                                                     //für alle Unterarrays und Felder
                                                     echo $key['nachricht'];
                                                }

                                                Ich denke mir das da oben so:
                                                In dem Array $datei['_data'] gibt es die indexierten Zuweisungen, also 0,1,2,3 ....

                                                Was ich oben machen will - kA ob das Script das auch will ;-) - ist, alle Nacheinander auszugeben.
                                                Geht das? Wohl eher nicht. Wo ist der Fehler?

                                                Speicher doch einfach in [Meta][lastsave] den letzten Savelauf ab. Bei jedem Aufruf lässt Du einfach prüfen, wann das letzte Mal wieviele Sätze abgetrennt wurden. Wenn dann vier Wochen lang kein Aufruf erfolgte, hat sich an der Sicherung doch auch nix geändert. Oder Du machst das einfach vom Überlaufen abhängig. Immer wenn 105 Sätze erreicht sind, werden die 5 ältesten abgetrennt und weggesichert - oder so ähnlich.

                                                Letzteres sagt mir nicht so zu, ersteres schon eher.
                                                Ich könnte jedem Beitrag noch in einem Unterarray den UNIX Timestamp mitgeben. Dann müsste ich doch eigentlich abfragen können, ob der Timestamp 30 x 24 x 60 x 60 Sekunden älter ist als der Aktuelle, und wenn er älter ist, wird dieser Beitragt archiviert.
                                                Oder?

                                                MfG, Dennis.

                                                --
                                                Signatur 1 von 3:
                                                Meine Homepage: http://www.riehle-web.com
                                                Tutorial: http://tutorial.riehle-web.com
                                                1. Hello,

                                                  Mir fällt noch ein: Man sollte überprüfen, ob das Locking true zurückgibt, und wenn nicht es später noch einmal probieren.

                                                  Ich dachte da an:
                                                    $fp = fopen("aktuell.txt","a+");
                                                    while($fp == false) {
                                                       sleep(1);
                                                       $fp = fopen("aktuell.txt","a+");
                                                    }

                                                  Was hälst du davon?

                                                  So ist es nicht vollständig und Dein Script hängt sich dann auf.

                                                  Ich suche mal:

                                                  #--------------------------------------------------------------------
                                                  function writelock($lockfile)  ### aus speichern.php ###
                                                  {
                                                    # Lockdatei öffnen oder anlegen
                                                    for ($x=0;$x<5;$x++)
                                                    {
                                                      if($lh = @fopen($lockfile,"a+")) break;
                                                      usleep(8000);  ## 8ms warten bis zum nächsten Versuch
                                                    }

                                                  if (!$lh) return false;

                                                  # Lockversuch
                                                    for ($x=0;$x<5;$x++)
                                                    {
                                                      if (@flock($lh,LOCK_EX + LOCK_NB)) return $lh;
                                                      usleep(8000);  ## 8ms warten bis zum nächsten Versuch
                                                    }
                                                    return false;
                                                  }
                                                  ------------------------------------------------------

                                                  [...]

                                                  Ich kann also mit gutem Gewissen (fast) alle Zeichen ganz einfach abspeichern. Ich brauch also vor dem Abpseichern eigentlich nichts umzuwandeln - zumindesten theorethisch nicht.

                                                  Mir fällt da nix ein. In einem Array dürfen ja alle zeichen als Wert drinstehen.

                                                  Die Sache mit der intelligenten Anzeige überlege ich mir noch.
                                                  Man möchte ja irgendwie bkättern können und immer nur 5 Sätze oder so anzeigen.

                                                  [...sichern...]

                                                  Letzteres sagt mir nicht so zu, ersteres schon eher.
                                                  Ich könnte jedem Beitrag noch in einem Unterarray den UNIX Timestamp mitgeben. Dann müsste ich doch eigentlich abfragen können, ob der Timestamp 30 x 24 x 60 x 60 Sekunden älter ist als der Aktuelle, und wenn er älter ist, wird dieser Beitragt archiviert.
                                                  Oder?

                                                  z.B. Das ist Philosphie. Aber man sollte seine Gedanken schriftlich niederlegen, damit man später noch durchsteigt.

                                                  Liebe Grüße aus http://www.braunschweig.de

                                                  Tom

                                                  --
                                                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                  Nur selber lernen macht schlau
                                                  1. Hello,

                                                    Mist, da fehlt noch was:

                                                    #--------------------------------------------------------------------
                                                    function writelock($lockfile)  ### aus speichern.php ###
                                                    {
                                                      # Lockdatei öffnen oder anlegen
                                                      for ($x=0;$x<5;$x++)
                                                      {
                                                        if($lh = @fopen($lockfile,"a+")) break;
                                                        usleep(8000);  ## 8ms warten bis zum nächsten Versuch
                                                      }

                                                    if (!$lh) return false;

                                                    # Lockversuch
                                                      for ($x=0;$x<5;$x++)
                                                      {
                                                        if (@flock($lh,LOCK_EX + LOCK_NB)) return $lh;
                                                        usleep(8000);  ## 8ms warten bis zum nächsten Versuch
                                                      }

                                                    close($fh);    ### sonst entsteht ein "Lost Handle"

                                                    return false;
                                                    }

                                                    Sixte woll... Da finde ich doch immer noch Denkfehler.

                                                    Liebe Grüße aus http://www.braunschweig.de

                                                    Tom

                                                    --
                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                    Nur selber lernen macht schlau
                                                    1. Hi Tom,

                                                      So ist es nicht vollständig und Dein Script hängt sich dann auf.

                                                      Stimmt, es würde unendlich lang probieren die Datei zu öffnen. Könnte zu einer Endlosschleife werden.
                                                      Jedoch möchte ich es trotzdem noch einmal selber probieren, diesmal mit einer do...while Schleife:

                                                      $x = 0;

                                                      do {
                                                         $fp = fopen("aktuell.txt","a+");
                                                         if(!$fp) break;
                                                         $x++;
                                                      } while($x<5);

                                                      Das müsste doch auch gehen, da er durch das break die Schleife wenn Datei geöffnet verlässt und außerdem abricht, wenn $x < 5 zu false wird.

                                                      #--------------------------------------------------------------------
                                                      function writelock($lockfile)  ### aus speichern.php ###
                                                      {
                                                        # Lockdatei öffnen oder anlegen
                                                        for ($x=0;$x<5;$x++)
                                                        {
                                                          if($lh = @fopen($lockfile,"a+")) break;
                                                          usleep(8000);  ## 8ms warten bis zum nächsten Versuch

                                                      //Geht auf Windows laut SelfPHP nicht, weshalb ich
                                                                //sleep() verwendet habe.

                                                      }

                                                      if (!$lh) return false;

                                                      # Lockversuch
                                                        for ($x=0;$x<5;$x++)
                                                        {
                                                          if (@flock($lh,LOCK_EX + LOCK_NB)) return $lh;
                                                          usleep(8000);  ## 8ms warten bis zum nächsten Versuch

                                                      //s.o.

                                                      }

                                                      fclose($lh);

                                                      //muss doch fclose heißen und nicht close, oder?

                                                      return false;
                                                      }

                                                      Die Sache mit der intelligenten Anzeige überlege ich mir noch.
                                                      Man möchte ja irgendwie bkättern können und immer nur 5 Sätze oder so anzeigen.

                                                      Hm, dürfte etwas komplizierter werden, wobei die Idee...

                                                      Man müsste mit der Last ID arbeiten. Dann zeigt man eben nur den Beitrag an, plus die soundsovielten davor, was sich durch eine Variable am Anfang des Scriptes konfigurieren lassen sollte.
                                                      Mit dem Blättern...., könnte schwieriger werden. Es wäre sicherlich zu machen, dass man das Script mit einer GET Variablen hintendran aufruft, z.B. ?sec=1 wären die ersten soundsovielten Beitrage, 2 wären die nächsten soundsovielten Beitrage. Nachteil: sec=1 sind heute die und morgen ganz andere Nachrichten.

                                                      Ich könnte jedem Beitrag noch in einem Unterarray den UNIX Timestamp mitgeben. Dann müsste ich doch eigentlich abfragen können, ob der Timestamp 30 x 24 x 60 x 60 Sekunden älter ist als der Aktuelle, und wenn er älter ist, wird dieser Beitragt archiviert.

                                                      z.B. Das ist Philosphie. Aber man sollte seine Gedanken schriftlich niederlegen, damit man später noch durchsteigt.

                                                      Also das heißt, dieser UNIX Timestamp sind die Anzahl von Sekunden seit der UNIX Startepoche oder so. Ältere Daten müssten somit kleiner sein also neuere, womit man die prima vergleichen könnte.

                                                      An den aktuellen Timestamp ranzukommen ist nicht schwer: time() lautet der Befehl. Was ich aber noch nicht gefunden habe, die Funktion, die aus diesen Zahlen dann wieder etwas "lesbares" macht.
                                                      Was muss man da verwenden?

                                                      MfG, Dennis.

                                                      --
                                                      [remote-signature:http://riehle-web-modellbahn.s4.cybton.com/signatur/test.php]
                                                      1. Hi Dennis,

                                                        $x = 0;

                                                        do {
                                                           $fp = fopen("aktuell.txt","a+");
                                                           if(!$fp) break;

                                                        //Fehler! es muss if($fp) heißen

                                                        $x++;
                                                        } while($x<5);

                                                        [...ausgabe...]
                                                        das Problem bleibt weiterhin bestehen

                                                        An den aktuellen Timestamp ranzukommen ist nicht schwer: time() lautet der Befehl. Was ich aber noch nicht gefunden habe, die Funktion, die aus diesen Zahlen dann wieder etwas "lesbares" macht.
                                                        Was muss man da verwenden?

                                                        Also ehrlich, Dennis du bist dumm, da verwendet man doch einfach date("...", $timestamp) !

                                                        MfG, Dennis.

                                                        --
                                                        Signatur 1 von 3:
                                                        Meine Homepage: http://www.riehle-web.com
                                                        Tutorial: http://tutorial.riehle-web.com
                                                        1. Hi Tom,

                                                          Ich habe jetzt mittlerweile das alles soweit gebracht, dass ich folgendes habe:

                                                          • Eine .htaccess geschützts Verzeichnis zum Anlegen und löschen von News (2 Dateien)
                                                          • Eine Datei short.php, welche die letzen 2 News ausgibt, diese Datei wird in alle Seiten dynamisch
                                                              eingebunden [1]
                                                          • Eine Datei, welche die neuesten fünf News ausgibt und auf Klick alle News in aktuell.txt, auf
                                                              zweiten Klick kann man noch nach neueste oder älteste zuerst ordnen.

                                                          [1] Ich habe das so gelöst:
                                                              - die letzte ID wird ausgelesen und die News ausgegeben
                                                              - ID -1 wird ausgegeben, wenn nicht vorhanden ID -2, sonst -3 oder -4

                                                          Sicherlich nicht perfekt, eine For Schleife wäre besser, hab ich aber noch keine Zeit zu gehabt.

                                                          An den aktuellen Timestamp ranzukommen ist nicht schwer: time() lautet der Befehl.

                                                          Und jegliche Zeitdaten werden im UNIX Format gespeichert. Der Vorteil dabei ist, dass man nach belieben Tag-Monat-Jahr oder Jahr-Monat-Tag oder sonst was augeben kann.

                                                          Ist dir mittlerweile noch was eingefallen bzw. hast du was probiert zur Seitenweisen darstellung der News bzw. wichtiger ist es für ein Gästebuch?

                                                          Über die Archivierung müsste man sich da dann auch noch Gedanken machen. Da bin ich gerade dabei.

                                                          MfG, Dennis.

                                                          --
                                                          Signatur 1 von 3:
                                                          Meine Homepage: http://www.riehle-web.com
                                                          Tutorial: http://tutorial.riehle-web.com
                                                          1. Hello Dennis,

                                                            ich habe gerade mal die Scripte überflogen und mir ein paar Gedanken dabei gemacht.

                                                            Im Prinzip könnte man die Lesbarkeit des Quelltextes noch verbessern ;-)

                                                            ...und eine etwas bessere Aufteilung in Funktionen ist empfehlenswert. Das soll man zwar auch nicht übertragen, weil jedes Load einer Funktion auch teuer ist, aber die Fehlerbehandlung wird dadurch vereinfacht und übersichtlicher. Bei fehler wird einfach der Funktionsblock beendet mit Fehlernummer; sonst benötigt man meistens komplizierte Bedingungs-Verschachtelungen.

                                                            Und ein Denkfehler ist mir noch aufgefallen, der auch unbedingt in das wachsende Artikel-Konzept rein muss:

                                                            Thema File-Locking:
                                                            -------------------

                                                            if($fp)
                                                            {
                                                              for($x=0;$x<5;$x++)
                                                              {
                                                                if(flock($fp,LOCK_SH)) break;
                                                                usleep(8000);
                                                              }

                                                            ...

                                                            }
                                                            -------------------

                                                            Die Locking-Funktion hat eine eigene eingebaute Idle-Funktion. Wenn man flock() aufruft, bleibt die Kontrolle solange in der Funktion, bis der Lockversuch Erfolg hatte, oder die maximale Script-Laufzeit erreicht ist.

                                                            Wenn man nun den User nicht solange warten lassen will (das sind dann bei Default 30 Sekunden), baut man eben eine eigene Schleifenkonstruktion um den Lockverssuch gherum, so wie Du das getan hast. Allerdings muss man der Funktion dann sagen, dass sie nicht mehr automatisch solange warten soll, bis es passt...

                                                            --------------------------
                                                            if($fp)
                                                            {
                                                              $lock = false;        # Kontrollschalter, ob Locking klappt
                                                              for($x=0;$x<5;$x++)
                                                              {
                                                                $lock = (flock($fp,LOCK_SH + LOCK_NB));
                                                                if ($lock) break;
                                                                usleep(8000);
                                                              }

                                                            if ($lock)
                                                              {
                                                                # ...
                                                              }
                                                              else
                                                              {
                                                                # Fehlerbehandlung
                                                              }

                                                            fclose($fp);
                                                            }

                                                            ---------------------------

                                                            Durch das Addieren des NonBlock-Bits weiß die Funktion nun, dass sie nicht warten soll, sondern false zurückgeben soll, wenn das Handle mit LOCK_EX belegt ist. Theoretisch ist es zu diesem Moment auch möglich, dass die Datei gar nicht mehr da ist. Das bedeutet, dass man alle Operationen mit dem Handle also trotzdem unter Fehlerbehandlung stellen muss.

                                                            Außerdem sit es wenig sinnvoll, normal weiter zu arbeiten, wenn das Locking nicht geklappt hat. Also muss man sich den Erfolg merken und nochmals abprüfen.

                                                            Im Prinzip sind "echte" Funktionen für den Computeralltag ungeeignet, denn jede Funktion müsste mindestens zwei Rückgabewerte haben:

                                                            1. Funktionsergebnis
                                                            2. Fehlernummer

                                                            Dafür muss also für größere Projekte ein einheitliches Konzept her. Ich habe mir angewöhnt (bzw. bin noch dabei), das Arbeitsergebnis der Funktion über einen Call-by-Reference zurückzugeben und die Fehlernummer als herkömmliches Funktionsergebnis. Das hat bei den klassischen Programmiersprachen auch den Vorteil, dass man variante Records als Arbeitsergebnis nutzen kann, und so die Haltbarkeit des Codes (Abwärtskompatibilität) erhöht.

                                                            Soviel zum Thema Locking und Fehlerbehandlung.
                                                            Ich bitte höflichst um Korrektur durch unsere Regulars... ;-)

                                                            Liebe Grüße aus http://www.braunschweig.de

                                                            Tom

                                                            --
                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                            Nur selber lernen macht schlau
                                                            1. Hi Tom,

                                                              ich habe gerade mal die Scripte überflogen und mir ein paar Gedanken dabei gemacht.

                                                              Im Prinzip könnte man die Lesbarkeit des Quelltextes noch verbessern ;-)

                                                              Hm, kann man natürlich machen, wobei...

                                                              ...und eine etwas bessere Aufteilung in Funktionen ist empfehlenswert.

                                                              ...mir das so in Functionen unterteilt eher schwer fällt zu vestehen (wenn das Script unbekannt ist), als wenn es in einem durch geht.
                                                              Btw hatte ich diese Kommentare ja nur noch schnell für dich zum schnelleren Verstehen eingefügt.

                                                              Das soll man zwar auch nicht übertragen, weil jedes Load einer Funktion auch teuer ist, aber die Fehlerbehandlung wird dadurch vereinfacht und übersichtlicher. Bei fehler wird einfach der Funktionsblock beendet mit Fehlernummer; sonst benötigt man meistens komplizierte Bedingungs-Verschachtelungen.

                                                              Sicherlich, das hat auch seine Vorteile.

                                                              Und ein Denkfehler ist mir noch aufgefallen, der auch unbedingt in das wachsende Artikel-Konzept rein muss:

                                                              Thema File-Locking:

                                                              if($fp)
                                                              {
                                                                for($x=0;$x<5;$x++)
                                                                {
                                                                  if(flock($fp,LOCK_SH)) break;
                                                                  usleep(8000);

                                                              // Hier hatte ich doch schon mal angemerkt, dass laut http://www.selfphp.de/funktionsreferenz/sonstige_funktionen/usleep.php#beschreibung
                                                                    // diese Funkction unter Windows nicht läuft.
                                                                    // Warum also nicht sleep() nehmen, was funktionieren soll?

                                                              }

                                                              ...

                                                              }

                                                              Die Locking-Funktion hat eine eigene eingebaute Idle-Funktion. Wenn man flock() aufruft, bleibt die Kontrolle solange in der Funktion, bis der Lockversuch Erfolg hatte, oder die maximale Script-Laufzeit erreicht ist.

                                                              Idle? Und du meinst jetzt, das oben ist falsch, da dort bei fehlerhaftem Locking einfach fortgefahren wird? Ja, stimmt.

                                                              Wenn man nun den User nicht solange warten lassen will (das sind dann bei Default 30 Sekunden), baut man eben eine eigene Schleifenkonstruktion um den Lockverssuch gherum, so wie Du das getan hast. Allerdings muss man der Funktion dann sagen, dass sie nicht mehr automatisch solange warten soll, bis es passt...


                                                              if($fp)
                                                              {
                                                                $lock = false;        # Kontrollschalter, ob Locking klappt
                                                                for($x=0;$x<5;$x++)
                                                                {
                                                                  $lock = (flock($fp,LOCK_SH + LOCK_NB));
                                                                  if ($lock) break;
                                                                  usleep(8000);
                                                                }

                                                              if ($lock)
                                                                {
                                                                  # ...
                                                                }
                                                                else
                                                                {
                                                                  # Fehlerbehandlung
                                                                }

                                                              fclose($fp);
                                                              }


                                                              Durch das Addieren des NonBlock-Bits weiß die Funktion nun, dass sie nicht warten soll, sondern false zurückgeben soll, wenn das Handle mit LOCK_EX belegt ist. Theoretisch ist es zu diesem Moment auch möglich, dass die Datei gar nicht mehr da ist. Das bedeutet, dass man alle Operationen mit dem Handle also trotzdem unter Fehlerbehandlung stellen muss.

                                                              Achso, das meintest du mit Denkfehler. Stimmt, da wäre es natürlich blöd, wenn er 30 Sekunden warten um von alleine neu versuchen zu locken.
                                                              Ist halt besser, wenn man alles von Hand macht und weniger auf automatik setzt ;-)

                                                              Außerdem sit es wenig sinnvoll, normal weiter zu arbeiten, wenn das Locking nicht geklappt hat. Also muss man sich den Erfolg merken und nochmals abprüfen.

                                                              s.o.

                                                              Soviel zum Thema Locking und Fehlerbehandlung.
                                                              Ich bitte höflichst um Korrektur durch unsere Regulars... ;-)

                                                              Korrektur durch unsere Regulars? Du meinst ich soll das Script jetzt mal ausbessern und dir erneut zuschicken? OK, ich hab grad etwas Zeit, kann das also Problemlos machen.

                                                              Btw: Bist du schon mit deiner Blättern Funktion bei der Ausgabe weitergekommen? Zusätzlich müsste man noch die Archvierungsfunktion einbauen. Ich würde sagen, soviele News hat man nicht. Man dürfte an die 2000 News in eine Datei kriegen, somit würde eine Datei pro Jahr reichen. Also müsste man schauen, alle News deren UNIX Stempel 30 x 24 x 60 x 60 Sekunden kleiner ist als der aktuelle (30 Tage) werden in eine Textdatei geschrieben, welche date("y",$timestamp).".txt" heißt, also z.B. 2004.txt (oder .dat o.ä.). Mach ich dann jetzt mal.

                                                              Deine Kommentare in meine Script:
                                                              ---------------------------------

                                                              Die Zeit würde ich einmal bestimmen und mir merken

                                                              damit sie überall gleich ist und man auch feststellen kann

                                                              welches der letzte veränderte Datensatz ist

                                                              Das macht sicherlich Sinn, am Anfang  $time = time(); zu sagen und dann immer die Zeit zu verwenden.

                                                              In der Datei haben Tags eigentlich nichts zu suchen.

                                                              Zum Speichern in Textdateien würde ich das

                                                              "\r\n", "\r", "\n" gegen ein chr(127) ersetzen (hier nicht notwendig)

                                                              und erst bei der Anzeige der Daten wieder zurückübersetzen in "\r\n",

                                                              anschließend die entities mit htmlentities() umwandeln, und dann nl2br() nutzen,

                                                              falls die Darstellung im HTML-Text steht oder auch nicht, wenn

                                                              die Darstellung in der Textarea stattfinden soll.

                                                              Also folgendes machen:
                                                               str_replace("\r\n",chr(127));
                                                               str_replace("\r",chr(127));
                                                               str_replace("\n",chr(127));

                                                              Bei der Ausgabe:
                                                               str_replace(chr(127),"\r\n");
                                                               htmlentities($string,ENT_QUOTES);
                                                              Und um in HTML darzustellen noch ein
                                                               nl2br();
                                                              hinterher.

                                                              --------------------

                                                              So, dann setze ich mich jetzt mal dran, und bastle da weiter dran rum.
                                                              Der Rest war doch OK im Script, oder? Und in den anderen Scripten?

                                                              MfG, Dennis.

                                                              --
                                                              Signatur 3 von 3:
                                                              Fragen zu Formularen?
                                                              http://tutorial.riehle-web.com hilft!
                                                              1. Hello,

                                                                Im Prinzip könnte man die Lesbarkeit des Quelltextes noch verbessern ;-)

                                                                Hm, kann man natürlich machen, wobei...

                                                                Damit meinte ich

                                                                • Absätze
                                                                • Kommentare
                                                                • Trennlinien
                                                                • und eine Abweichugn vom PEAR-Standard für den Beginn von
                                                                    Funktionen und Blöcken

                                                                function blah()
                                                                  {
                                                                    ...
                                                                  }

                                                                anstelle von

                                                                function blah() {
                                                                      ...
                                                                  }

                                                                ...und eine etwas bessere Aufteilung in Funktionen ist empfehlenswert.

                                                                ...mir das so in Functionen unterteilt eher schwer fällt zu vestehen (wenn das Script unbekannt ist), als wenn es in einem durch geht.
                                                                Btw hatte ich diese Kommentare ja nur noch schnell für dich zum schnelleren Verstehen eingefügt.

                                                                Das wird sich ändern, wenn wir aus deinen vier Scripten eins machen, ggf. später mit mehrenen LIBs, die dann für den jeweiligen Zweck included werden.

                                                                usleep(8000);
                                                                      // Hier hatte ich doch schon mal angemerkt, dass laut http://www.selfphp.de/funktionsreferenz/sonstige_funktionen/usleep.php#beschreibung
                                                                      // diese Funkction unter Windows nicht läuft.
                                                                      // Warum also nicht sleep() nehmen, was funktionieren soll?

                                                                Ja, das hatte ich aber nicht angemeckert. Eine Sekunde Verzögerung ist aber schon sehr lang. Und sleep() kann doch nur Ssekunden, oder? Es gibt anber jetzt viele neue Funktionen. Ich ahbe heute Morgen mal durchgschaut. Ich muss PHP demnächst neu lernen, insbesondere in Zusammenhang mit MySQL >= 4.1.x und PHP 5 ...

                                                                Achso, das meintest du mit Denkfehler. Stimmt, da wäre es natürlich blöd, wenn er 30 Sekunden warten um von alleine neu versuchen zu locken.
                                                                Ist halt besser, wenn man alles von Hand macht und weniger auf automatik setzt ;-)

                                                                Genau. Das Script wäre dann ja sowieso zuende und die Schleife um das LOCK nutzlos, das sie gar nicht mehr ausgeführt würde.

                                                                Ich bitte höflichst um Korrektur durch unsere Regulars... ;-)

                                                                Korrektur durch unsere Regulars? Du meinst ich soll das Script jetzt mal ausbessern und dir erneut zuschicken? OK, ich hab grad etwas Zeit, kann das also Problemlos machen.

                                                                Nein, ich meinte die paar wenigen Stammposter, die immer mal so nett sind, mir meine Fehler oder ungeschickten Ausformulierungen zu korrigieren. Drum bin ich ja irgendwie hier. Ich will auch noch was lernen ;-))

                                                                Btw: Bist du schon mit deiner Blättern Funktion bei der Ausgabe weitergekommen?

                                                                Ja, eine ganz einfache habe ich quasi fertig. Die intelligente kosatet abe noch viel Schweiß.

                                                                Zusätzlich müsste man noch die Archvierungsfunktion einbauen.

                                                                Benötigt werden:

                                                                fertig

                                                                • Create File       *

                                                                • Alter File

                                                                • Rec_list_show

                                                                • Rec_show          x

                                                                • Rec_insert        x

                                                                • Rec_update

                                                                • Rec_delete        x

                                                                • Rec_copy

                                                                Dann irgend eine Suchfunktion, mit der man Datensätze finden kann und eine Ergebnisliste zusammenstellen kann.

                                                                Also folgendes machen:
                                                                 str_replace("\r\n",chr(127));
                                                                 str_replace("\r",chr(127));
                                                                 str_replace("\n",chr(127));

                                                                Das kann man mit einem str_replace-Aufruf machen, wenn man sich ein Array mit den zu ersetzenden Werten baut. Sonst ist es OK. Allerdings solltest Du den "Haystack" auch angeben ;-))

                                                                Bei der Ausgabe:
                                                                 str_replace(chr(127),"\r\n");     # Haystack fehlt *gg*
                                                                 htmlentities($string,ENT_QUOTES);
                                                                Und um in HTML darzustellen noch ein
                                                                 nl2br();
                                                                hinterher.

                                                                Und dann schau nochmal http://forum.de.selfhtml.org/?t=82711&m=482382 an wegen Rec_Update.

                                                                Liebe Grüße aus http://www.braunschweig.de

                                                                Tom

                                                                --
                                                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                Nur selber lernen macht schlau
                                                                1. Hi Tom,

                                                                  • und eine Abweichugn vom PEAR-Standard für den Beginn von
                                                                      Funktionen und Blöcken

                                                                  Scheint dein Markenzeichen zu sein ;-)

                                                                  eine etwas bessere Aufteilung in Funktionen ist empfehlenswert.
                                                                  ... wenn wir aus deinen vier Scripten eins machen, ggf. später mit mehrenen LIBs, die dann für den jeweiligen Zweck included werden.

                                                                  Warum denn unbedingt ein Script? Also man brauch auf jeden Fall zwei Scripte, nämlich eines, was nur die neuesten beiden News zum Einbinden für die Seiten auf der Homepage ausgibt und eins für den eigenltichen News Bereich, wenn nicht gar ein eigenes für die Administration.

                                                                  Deshalb auch meine Frage vorhin mit dem session_start(). Ich wollte nämlich, dass der Moderator sich da anmelden kann, und dann kann er direkt im News Bereich auf die zusätzlich eingeblendeten Links klicken, um z.b. etwas zu löschen. Das insbesondere bei einem Gästebuch von Vorteil.

                                                                  Btw: Bist du schon mit deiner Blättern Funktion bei der Ausgabe weitergekommen?

                                                                  Ja, eine ganz einfache habe ich quasi fertig. Die intelligente kosatet abe noch viel Schweiß.

                                                                  So so, wie kompliziert muss dann wohl erst die "Intelligente" sein ;-) Kannst mir ja die Einfache mal zuschicken.

                                                                  Benötigt werden (Bitte vervolständigen):

                                                                  fertig    Zweck

                                                                  • Create File       *         Zum Erstellen von ??  Um das Newssystem zu installieren?

                                                                  • Alter File                  ??

                                                                  • Rec_list_show               Wo ist da der Unterschied zu dem drunter?

                                                                  • Rec_show          x         Zeigt die News/Beiträge an.

                                                                  • Rec_insert        x         Erstellt neue News.

                                                                  • Rec_update                  Soll das zum Ändern von News sein?

                                                                  • Rec_delete        x         Zum Löschen von News

                                                                  • Rec_copy                    ?? Kopieren aktueller News ins Archiv??

                                                                  Dann irgend eine Suchfunktion, mit der man Datensätze finden kann und eine Ergebnisliste zusammenstellen kann.

                                                                  Also folgendes machen:
                                                                  str_replace("\r\n",chr(127));
                                                                  str_replace("\r",chr(127));
                                                                  str_replace("\n",chr(127));

                                                                  Das kann man mit einem str_replace-Aufruf machen, wenn man sich ein Array mit den zu ersetzenden Werten baut. Sonst ist es OK. Allerdings solltest Du den "Haystack" auch angeben ;-))

                                                                  Uuups, wäre wirklich ganr sinnvoll PHP zu sagen, wo er replacen soll *gg*

                                                                  Bei der Ausgabe:

                                                                  str_replace(chr(127),"\r\n",$ausgabe);

                                                                  htmlentities($string,ENT_QUOTES);

                                                                  nl2br();

                                                                  Und dann schau nochmal http://forum.de.selfhtml.org/?t=82711&m=482382 an wegen Rec_Update.

                                                                  Da hast du aber eine Menge geschrieben. Tuen dir nicht irgendwann die Finger weh? Oder hast du schon Hornhaut an den Finger ;-))

                                                                  Da stand jetzt aber nichts wirklich neuen drin, sondern nur nochmal eine ausfürhliche Anleitung, wie und in welcher Reihenfolge man vorzugehen hat.

                                                                  So far, Dennis.

                                                                  --
                                                                  Signatur 1 von 3:
                                                                  Meine Homepage: http://www.riehle-web.com
                                                                  Tutorial: http://tutorial.riehle-web.com
                                                                  1. Hello,

                                                                    • und eine Abweichugn vom PEAR-Standard für den Beginn von
                                                                        Funktionen und Blöcken

                                                                    Scheint dein Markenzeichen zu sein ;-)

                                                                    Es lässt sich wesentlich leichter lesen!

                                                                    Warum denn unbedingt ein Script? Also man brauch auf jeden Fall zwei Scripte, nämlich eines, was nur die neuesten beiden News zum Einbinden für die Seiten auf der Homepage ausgibt und eins für den eigenltichen News Bereich, wenn nicht gar ein eigenes für die Administration.

                                                                    Weil man dann nur ein einziges einbinden muss. ALles andere läuft "automatisch"

                                                                    Benötigt werden (Bitte vervolständigen):

                                                                    fertig    Zweck

                                                                    • Create File       *         Zum Erstellen von beliebiger Files

                                                                    für Gästebücher, Shop, Newssystem...

                                                                    • Alter File                  man muss die Dateien doch auch

                                                                    ändern können, wenn ein Feld hinzukommt

                                                                    • Rec_list_show               Zeigt die Auswahlliste an und stellt

                                                                    die Blätterfunktion zur Verfügung

                                                                    • Rec_show          x         Zeigt _einen_  News/Beitrag an.
                                                                    • Rec_insert        x         Erstellt neue News.
                                                                    • Rec_update                  zum Ändern von Datnsätzen, z.B.

                                                                    Satz gesperrt, nur ändern durch...,
                                                                                                    Inhalt geprüft. usw.

                                                                    • Rec_delete        x         Zum Löschen von News
                                                                    • Rec_copy                    zum Duplizieren von Datensätzen

                                                                    um sie dann z.B. nur geringfügig zu
                                                                                                    ändern.

                                                                    Dann irgend eine Suchfunktion, mit der man Datensätze finden kann und eine Ergebnisliste zusammenstellen kann.

                                                                    Und dann schau nochmal http://forum.de.selfhtml.org/?t=82711&m=482382 an wegen Rec_Update.

                                                                    Da hast du aber eine Menge geschrieben. Tuen dir nicht irgendwann die Finger weh? Oder hast du schon Hornhaut an den Finger ;-))

                                                                    Nö. Ich denke ja zwischendurch auch und probier das mesite dann auch nochmal aus, damit es Hand und Fuß bekommt

                                                                    Da stand jetzt aber nichts wirklich neuen drin, sondern nur nochmal eine ausfürhliche Anleitung, wie und in welcher Reihenfolge man vorzugehen hat.

                                                                    Für dich vielleicht nicht. Wir hatte ja schon über die Maßnahmen beim Update gesprochen.

                                                                    Liebe Grüße aus http://www.braunschweig.de

                                                                    Tom

                                                                    --
                                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                    Nur selber lernen macht schlau
                                                                    1. Hello,

                                                                      ich habe mir noch ein paar Gedanken zum Thema conlict-counter für die Update-Funktion gemacht.

                                                                      list($usec, $sec) = explode(" ",microtime());
                                                                      $time = date("YmdHis").substr($usec,1,7);

                                                                      Dieser Zeitstempel müsste so reichen, damit Dateioperationen genügend fein unterscheiden werden können. Und man kann ihn auch zum Filtern benutzen, um z.B. alle Datensätze vom 10.06.2004 zu finden. Substring machts möglich...

                                                                      Nur rechnen kann man natürlich wieder nicht so einfach.

                                                                      Bin gespannt, swie lange diese Auflösung für den Stand der Technik ausreicht. Mehr als fünf Jahre?

                                                                      Liebe Grüße aus http://www.braunschweig.de

                                                                      Tom

                                                                      --
                                                                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                      Nur selber lernen macht schlau
                                                                      1. Hi Tom,

                                                                        Habe dir gerade mal wieder ein E-Mail geschrieben, und die Functionen Create und Delete reingetan, wie ich denke, dass sie sein müssen ;-)

                                                                        ich habe mir noch ein paar Gedanken zum Thema conlict-counter für die Update-Funktion gemacht.

                                                                        Ach du jemmineh, dein Fachchinesich wird ja immer schlimmer *gg*, conclict-counter?

                                                                        list($usec, $sec) = explode(" ",microtime());
                                                                        $time = date("YmdHis").substr($usec,1,7);

                                                                        Dieser Zeitstempel müsste so reichen, damit Dateioperationen genügend fein unterscheiden werden können. Und man kann ihn auch zum Filtern benutzen, um z.B. alle Datensätze vom 10.06.2004 zu finden. Substring machts möglich...

                                                                        Was enthalten die Variablen $usec und $sec?

                                                                        Nur rechnen kann man natürlich wieder nicht so einfach.

                                                                        Soll das Script die Zeit errechnen, die in $_file['data'][$id]['datum'] gespeichert werden soll?
                                                                        Oder ist das nur zur Verarbeitung?

                                                                        Bin gespannt, swie lange diese Auflösung für den Stand der Technik ausreicht. Mehr als fünf Jahre?

                                                                        Tja ;-)

                                                                        MfG, Dennis.

                                                                        --
                                                                        Signatur 3 von 3:
                                                                        Fragen zu Formularen?
                                                                        http://tutorial.riehle-web.com hilft!
                                                                        1. Hi Tom,

                                                                          list($usec, $sec) = explode(" ",microtime());
                                                                          $time = date("YmdHis").substr($usec,1,7);

                                                                          Ich habe jetzt verstanden, was dieses Teilscript macht: Es liefert dir einen Timestap (_nicht_ im UNIX Format, sondern eigenes Format) zurück, nach dem Thema JahrMonatTagStundeMinuteSekundeMillisekunden, also z.B. 20040620113610 plus Millisekunden wäre jetzt der Zeitpunkt.

                                                                          Nur rechnen kann man natürlich wieder nicht so einfach.

                                                                          Was heißt rechnen, du kannst diese Timestamps ja sehr einfach miteinander vergleichen, also $timestamp1 <= $timestamp2, aus dem Grund hast du dir es ja vermutlich auch ausgedacht.

                                                                          Was sich allerdings nicht mehr so gut machen lässt, ist die Anzeige vom Absendedatum der News. Drum habe ich mir jetzt folgendes überlegt:

                                                                          $_file  --+---[meta]--+----[created]----- $time       # wird später nicht mehr geändert?
                                                                                     |           +----[lastupdate]-- time()      # UNIX Stamp oder dein Stamp?
                                                                                     |           +----[lastid]------ '0'
                                                                                     |           +----[amount]------ '0'
                                                                                     |
                                                                                     |
                                                                                     +---[data]--+----[0]--+--[autor]------ 'thomas'
                                                                                                 |         +--[thema]------ 'Flatfiles'
                                                                                                 |         +--[news]------- 'blablabla'
                                                                                                 |         +--[datum]------ time()        # UNIX Stamp nur für Ausgabe
                                                                                                 |         +--[lastupdate]--'blablabla'   # Dein Stamp zum Vergleichen
                                                                                                 |
                                                                                                 |
                                                                                                 +----[3]-- usw.
                                                                                                 |
                                                                                                 +----[4]-- usw.

                                                                          Wie du siehst, hat jetzt jeder Datensatz zwei mal ein Datum da stehen. Das eine ist der UNIX Zeitstempel, den ich für die Ausgabe brauche, so will ich z.B. in short.php nur das Datum, dagegen im der Volldarstellung mit Uhrzeit und Stunde das Datum.

                                                                          Der andere Stamp ist dann dein Stamp, mit dem Script, was oben steht. Diesen kannst du/man dann problemlos zum Vergleichen der Timestamps nutzen.

                                                                          Alles klar soweit? Bist du damit einverstanden?

                                                                          MfG, Dennis.

                                                                          --
                                                                          Signatur 2 von 3:
                                                                          Die EU und die neuen Mitgliedslnder:
                                                                          http://www.riehle-web.com/pkprojekt/
                                                                          Oder doch mehr in HTML interessiert?
                                                                          http://tutorial.riehle-web.com
                                                                          1. Hello,

                                                                            Hi Tom,

                                                                            list($usec, $sec) = explode(" ",microtime());
                                                                            $time = date("YmdHis").substr($usec,1,7);

                                                                            Ich habe jetzt verstanden, was dieses Teilscript macht: Es liefert dir einen Timestap (_nicht_ im UNIX Format, sondern eigenes Format) zurück, nach dem Thema JahrMonatTagStundeMinuteSekundeMillisekunden, also z.B. 20040620113610 plus Millisekunden wäre jetzt der Zeitpunkt.

                                                                            Nur rechnen kann man natürlich wieder nicht so einfach.

                                                                            Was heißt rechnen, du kannst diese Timestamps ja sehr einfach miteinander vergleichen, also $timestamp1 <= $timestamp2, aus dem Grund hast du dir es ja vermutlich auch ausgedacht.

                                                                            Was sich allerdings nicht mehr so gut machen lässt, ist die Anzeige vom Absendedatum der News. Drum habe ich mir jetzt folgendes überlegt:

                                                                            $_file  --+---[meta]--+----[created]----- $time       # wird später nicht mehr geändert?
                                                                                       |           +----[lastupdate]-- time()      # UNIX Stamp oder dein Stamp?
                                                                                       |           +----[lastid]------ '0'
                                                                                       |           +----[amount]------ '0'
                                                                                       |
                                                                                       |
                                                                                       +---[data]--+----[0]--+--[autor]------ 'thomas'
                                                                                                   |         +--[thema]------ 'Flatfiles'
                                                                                                   |         +--[news]------- 'blablabla'
                                                                                                   |         +--[datum]------ time()        # UNIX Stamp nur für Ausgabe
                                                                                                   |         +--[lastupdate]--'blablabla'   # Dein Stamp zum Vergleichen
                                                                                                   |
                                                                                                   |
                                                                                                   +----[3]-- usw.
                                                                                                   |
                                                                                                   +----[4]-- usw.

                                                                            Wie du siehst, hat jetzt jeder Datensatz zwei mal ein Datum da stehen. Das eine ist der UNIX Zeitstempel, den ich für die Ausgabe brauche, so will ich z.B. in short.php nur das Datum, dagegen im der Volldarstellung mit Uhrzeit und Stunde das Datum.

                                                                            Der andere Stamp ist dann dein Stamp, mit dem Script, was oben steht. Diesen kannst du/man dann problemlos zum Vergleichen der Timestamps nutzen.

                                                                            Alles klar soweit? Bist du damit einverstanden?

                                                                            Müsste so reichen und funktioniert ja in der Funktion flat_update() auch schon zufriedenstellend. Ich würde da aber im Record auch nicht 'datum' schreiben, sondern analog zum File 'created'. Sonst steigt man da später irgendwann nicht mehr durch[1]. Ich tausche dann bei ['created'] noch den "Meinstamp" gegen den Unix_timestamp aus.

                                                                            [1] Ein zweites VBA wollte ich eigentlich nicht erfinden :-(

                                                                            Die Funktionssammlung stelle ich für die Interessierten dann nachher zum Download auf http://selfhtml.bitworks.de  Funktionen für Flatfiles bereit.

                                                                            Jetzt mache ich erstmal eine Test zur Ermittlung des Grenzwertes (Anzahl der DS im File) in Bezug auf die Antwortzeiten.

                                                                            Liebe Grüße aus http://www.braunschweig.de

                                                                            Tom

                                                                            --
                                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                            Nur selber lernen macht schlau
                                                                            1. Hi Tom,

                                                                              Müsste so reichen und funktioniert ja in der Funktion flat_update() auch schon zufriedenstellend. Ich würde da aber im Record auch nicht 'datum' schreiben, sondern analog zum File 'created'. Sonst steigt man da später irgendwann nicht mehr durch. Ich tausche dann bei ['created'] noch den "Meinstamp" gegen den Unix_timestamp aus.

                                                                              OK, created wird nur einmal belegt und mit dem UNXI Timestamp versehen. Drausfolgend erkenne ich, dass in deinem Script flat_box.php noch ein Fehler in Zeile 119 ist:

                                                                              $_file['meta']['created'] = $time;

                                                                              muss heißen:
                                                                              $_file['meta']['created'] = time();

                                                                              Hier noch mal die aktuallisierte Aufbaus Liste:

                                                                              $_file  --+---[meta]--+----[created]----- time()    # UNIX Stamp für Ausgabe
                                                                                         |           +----[lastupdate]-- $time     # Spezial Stamp für Technik/Vergleichen
                                                                                         |           +----[lastid]------ '0'
                                                                                         |           +----[amount]------ '0'
                                                                                         |
                                                                                         |
                                                                                         +---[data]--+----[0]--+--[autor]------ 'thomas'
                                                                                                     |         +--[thema]------ 'Flatfiles'
                                                                                                     |         +--[news]------- 'blablabla'
                                                                                                     |         +--[created]----- time()        # UNIX Stamp nur für Ausgabe
                                                                                                     |         +--[lastupdate]-- $time         # Spezial Stamp zum Vergleichen
                                                                                                     |
                                                                                                     |
                                                                                                     +----[3]-- usw.
                                                                                                     |
                                                                                                     +----[4]-- usw.

                                                                              Die Funktionssammlung stelle ich für die Interessierten dann nachher zum Download auf http://selfhtml.bitworks.de  Funktionen für Flatfiles bereit.

                                                                              Ok, aber das hat ja erst mal noch Zeit.

                                                                              MfG, Dennis.

                                                                              --
                                                                              Signatur 3 von 3:
                                                                              Fragen zu Formularen?
                                                                              http://tutorial.riehle-web.com hilft!
                                                                              1. Hello,

                                                                                OK, created wird nur einmal belegt und mit dem UNXI Timestamp versehen. Drausfolgend erkenne ich, dass in deinem Script flat_box.php noch ein Fehler in Zeile 119 ist:

                                                                                Ack;

                                                                                Für die Entstehungszeit der Datei reicht auch der Unix-Timestamp. Die Datensicherheit wird ja durch ['timestamp'] im "Meinstamp-Format" hergestellt.

                                                                                Was machen
                                                                                flat_insert()
                                                                                flat_delete()
                                                                                flat_select()

                                                                                ?

                                                                                Liebe Grüße aus http://www.braunschweig.de

                                                                                Tom

                                                                                --
                                                                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                Nur selber lernen macht schlau
                                                                                1. Hi Tom,

                                                                                  Für die Entstehungszeit der Datei reicht auch der Unix-Timestamp. Die Datensicherheit wird ja durch ['timestamp'] im "Meinstamp-Format" hergestellt.

                                                                                  Gut, Prima.

                                                                                  Was machen
                                                                                  flat_insert()
                                                                                  flat_delete()
                                                                                  flat_select()

                                                                                  ?

                                                                                  Um flat_select() habe ich mich noch gar nicht gekümmert, über flat_insert() habe ich nachgedacht und an flat_delete() sitze ich dran.

                                                                                  Btw. ist die Fuction flat_crate() jetzt so fertig?

                                                                                  function flat_create($path,$_recdata)      ## recdata enthält nur ein leeres Array, ggf später mit
                                                                                                                             ## mit $_recdata['fields']    Beschreibungen der Felder
                                                                                  {
                                                                                   if(file_exists($path) return 3;          ## Datei existiert schon
                                                                                   $fp = fopen($path,"a+");
                                                                                   if($fp)
                                                                                   {
                                                                                    $lock = false;        # Kontrollschalter, ob Locking klappt
                                                                                    for($x=0;$x<5;$x++)
                                                                                    {
                                                                                     $lock = (flock($fp,LOCK_EX + LOCK_NB));
                                                                                     if ($lock) break;
                                                                                     usleep(8000);
                                                                                    }
                                                                                    if ($lock)
                                                                                    {
                                                                                     if (filesize($path) > 0)         ## erneuter Test, da Zeit vergangen
                                                                                     {
                                                                                      fclose($fp);
                                                                                      return 3;
                                                                                     }

                                                                                  list($usec, $sec) = explode(" ",microtime());
                                                                                     $time = date("YmdHis") . substr($usec,1,7);      ## Spezail Zeitstempel

                                                                                  $_file = array();
                                                                                     $_file['meta'] = array();
                                                                                     $_file['data'] = array();

                                                                                  $_file['meta']['created'] = time();
                                                                                     $_file['meta']['lastupdate'] = $time;
                                                                                     $_file['meta']['lastid']    = 0;
                                                                                     $_file['meta']['amount']    = 0;

                                                                                  $_file_packed = serialize($_file);

                                                                                  fseek($fp,0);
                                                                                     fwrite($fp,$_file_packed,strlen($_file_packed));

                                                                                  fclose($fp);

                                                                                  return 0;  #Code für kein Fehler
                                                                                    }
                                                                                    else return 8; #Code für Locken Fehler
                                                                                   }
                                                                                   else return 5; #Code für Datei nicht geöffnet
                                                                                  }
                                                                                  MfG, Dennis.

                                                                                  --
                                                                                  Signatur 1 von 3:
                                                                                  Meine Homepage: http://www.riehle-web.com
                                                                                  Tutorial: http://tutorial.riehle-web.com
                                                                                  1. Hello,

                                                                                    an flat_create() kann ich so keine logsichen Fehler mehr erkennen. Wir müssen natürlich die Fehlerbehandlung noch überdenken und die automatischen Fehlermeldungen dann ausschalten.

                                                                                    Was kann alles passieren?

                                                                                    Pfad ist vorhanden, aber nicht beschreibbar
                                                                                    Pfad ist nicht vorhanden. Soll der dann angelegt werden?
                                                                                    Pfad ist nicht erstellbar mangels Rechten.

                                                                                    Datei ist nicht erstellbar mangels Rechten.

                                                                                    usw.

                                                                                    Was fällt Dir sonst noch ein?

                                                                                    Bei Linux gibt es wohl auch noch die Möglichkeit, dass man mit file_exists() nicht nachfragen kann, ob die datei da ist, aber man die Datei trotzdem nicht anlegen kann, weil sie schon vorhanden ist.

                                                                                    Das habe ich zwar neulich schon mal ausprobiert, aber natürlich ist die Doku dazu noch irgendwo eingepackt...

                                                                                    Liebe Grüße aus http://www.braunschweig.de

                                                                                    Tom

                                                                                    --
                                                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                    Nur selber lernen macht schlau
                                                                                    1. Hi Tom,

                                                                                      an flat_create() kann ich so keine logsichen Fehler mehr erkennen. Wir müssen natürlich die Fehlerbehandlung noch überdenken und die automatischen Fehlermeldungen dann ausschalten.

                                                                                      Was kann alles passieren?

                                                                                      Pfad ist vorhanden, aber nicht beschreibbar
                                                                                      Pfad ist nicht vorhanden. Soll der dann angelegt werden?
                                                                                      Pfad ist nicht erstellbar mangels Rechten.

                                                                                      Datei ist nicht erstellbar mangels Rechten.

                                                                                      Was fällt Dir sonst noch ein?

                                                                                      Zu flat_create nichts mehr.

                                                                                      Noch eine Frage:
                                                                                      Was ist der Unterschied zwischen der Function flat_create() und flat_rec_create()? Was macht welche Funktion?

                                                                                      Und wo ist der Unterschied zwischen flat_rec_list_make() und flat_rec_make()?

                                                                                      MfG, Dennis.

                                                                                      --
                                                                                      Signatur 3 von 3:
                                                                                      Fragen zu Formularen?
                                                                                      http://tutorial.riehle-web.com hilft!
                                                                                      1. Hello,

                                                                                        Noch eine Frage:
                                                                                        Was ist der Unterschied zwischen der Function flat_create() und flat_rec_create()? Was macht welche Funktion?

                                                                                        Vielleicht sollte die doch besser flat_file_create() heißen?
                                                                                        Noch ist es Zeit, vernünftige Namen zu wählen!

                                                                                        Und wo ist der Unterschied zwischen

                                                                                        flat_rec_list_make()

                                                                                        erzeugt aus dem Array der Datensätze eine Anzeigeliste als HTML-String, in der man über die Seitennummer vorwärts und rückwärts blättern kann und in der man einzelne Datensätze durch anklicken markieren kann (JavaScript ist eingeschaltet) oder durch doppelklicken den einzelnen Satz auswählen und anfordern kann, oder das ganze mit Buttons und Checkboxen, je nach rechten des Users.

                                                                                        flat_rec_make()    könnte auch flat_rec_detail_make() heißen
                                                                                                           waw ist Dir lieber?

                                                                                        Produziert den HTML-String für die Anzeige eines einzelnen Datensatzes, und zwar so, dass dieser direkt bearbeitet und wieder gespeichert werden kann. Man kann auch mehrere davon untereinander anordnen, z.B. für den Vergleich.
                                                                                        Userrechte müssen beachtet werden.

                                                                                        ich unterscheide bisher die Funktionen:

                                                                                        get_...()     besorgt einen Wert als Funktionsergebnis
                                                                                        ..._make()    erzeuigt einen validen HTML-String
                                                                                        ..._put()     gibt einen HTML-String direkt an die Standardausgabe aus

                                                                                        Das kann man natürlich so machen, wie man will. Innerhalb eines Projektes sollte das aber immer gleich sein.

                                                                                        Liebe Grüße aus http://www.braunschweig.de

                                                                                        Tom

                                                                                        --
                                                                                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                        Nur selber lernen macht schlau
                                                                                        1. Hi Tom,

                                                                                          War grad mal kurz weg, bin jetzt aber wieder da. Gibts irgendewas neues?

                                                                                          Vielleicht sollte die doch besser flat_file_create() heißen?
                                                                                          Noch ist es Zeit, vernünftige Namen zu wählen!

                                                                                          Du hattest im Script schon mal Namen genannt, ich habs jetzt noch etwas angepasst:

                                                                                          • flat_file_create     => Wird im Prinzip nur einmal benötigt, bereitet alles für den eigentlichen Gebrauch vor.

                                                                                          • flat_file_alter      =>

                                                                                          • flat_rec_make_list   => Erzeugt die HTML Ausgabe für die Anzeige mit Blätterfunkction

                                                                                          • flat_rec_make_detail => Erzeugt die HTML Ausgabe für einen angeforderten Datenksatz

                                                                                          • flat_rec_insert      => Schreibt einen neuen Datensatz in aktuell.dat

                                                                                          • flat_rec_update      => Erneuert einen Datensatz in aktuell.dat und speicher ab, Bsp: Fehlerkorrektur

                                                                                          • flat_rec_delete      => Löscht einen ausgewählten Datensatz

                                                                                          • flat_rec_copy        => Kopiert eine bestimmte Menge an Datensätzen, wird zur Archivierung genutzt

                                                                                          • flat_rec_search      => Sucht je nach Auswahl im Archiv oder aktuell.dat nach String

                                                                                          ich unterscheide bisher die Funktionen:

                                                                                          get_...()     besorgt einen Wert als Funktionsergebnis
                                                                                          ..._make()    erzeuigt einen validen HTML-String
                                                                                          ..._put()     gibt einen HTML-String direkt an die Standardausgabe aus

                                                                                          Wovon ersteres und letzteres bei uns noch gar nicht vorkommen.

                                                                                          MfG, Dennis.

                                                                                          --
                                                                                          Signatur 3 von 3:
                                                                                          Fragen zu Formularen?
                                                                                          http://tutorial.riehle-web.com hilft!
                                                                                          1. Hello,

                                                                                            Du hattest im Script schon mal Namen genannt, ich habs jetzt noch etwas angepasst:

                                                                                            • flat_file_create     => Wird im Prinzip nur einmal benötigt, bereitet alles für den eigentlichen Gebrauch vor.

                                                                                            • flat_file_alter      =>

                                                                                            • flat_rec_make_list   => Erzeugt die HTML Ausgabe für die Anzeige mit Blätterfunkction

                                                                                            • flat_rec_make_detail => Erzeugt die HTML Ausgabe für einen angeforderten Datenksatz

                                                                                            • flat_rec_insert      => Schreibt einen neuen Datensatz in aktuell.dat

                                                                                            • flat_rec_update      => Erneuert einen Datensatz in aktuell.dat und speicher ab, Bsp: Fehlerkorrektur

                                                                                            • flat_rec_delete      => Löscht einen ausgewählten Datensatz

                                                                                            • flat_rec_copy        => Kopiert eine bestimmte Menge an Datensätzen, wird zur Archivierung genutzt

                                                                                            • flat_rec_search      => Sucht je nach Auswahl im Archiv oder aktuell.dat nach String

                                                                                            Gut, das gefällt mir. Also bleibt es jetzt so mit der Nomenklatur. Da es sich bisher nur um Funktionen handelt, gibt es auch keinen Konflikt mit den Namensräumen von Variablen.

                                                                                            Liebe Grüße aus http://www.braunschweig.de

                                                                                            Tom

                                                                                            --
                                                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                            Nur selber lernen macht schlau
                                                                                            1. Hi Tom,

                                                                                              Gut, das gefällt mir. Also bleibt es jetzt so mit der Nomenklatur. Da es sich bisher nur um Funktionen handelt, gibt es auch keinen Konflikt mit den Namensräumen von Variablen.

                                                                                              Gut soweit, jetzt müssen wir uns aber noch über die Standard Variablen unterhalten.

                                                                                              Für fopen() verwenden wir $fp;

                                                                                              Die aktuelle Zeit im UNIX Format ist $time_u (steht für unix);
                                                                                                                in deinem Format   $time_s (steht für spezial);

                                                                                              Der Pfad zur Datei wird in $filename definiert;

                                                                                              Unser Mega Array heißt $_file, in gepacketer Fomr $_file_packed;

                                                                                              Weißt du noch weitere Variablen?

                                                                                              MfG, Dennis.

                                                                                              --
                                                                                              Signatur 1 von 3:
                                                                                              Meine Homepage: http://www.riehle-web.com
                                                                                              Tutorial: http://tutorial.riehle-web.com
                                                                                              1. Hello,

                                                                                                Hi Tom,

                                                                                                Gut, das gefällt mir. Also bleibt es jetzt so mit der Nomenklatur. Da es sich bisher nur um Funktionen handelt, gibt es auch keinen Konflikt mit den Namensräumen von Variablen.

                                                                                                Gut soweit, jetzt müssen wir uns aber noch über die Standard Variablen unterhalten.

                                                                                                Für fopen() verwenden wir $fp;

                                                                                                Die aktuelle Zeit im UNIX Format ist $time_u (steht für unix);
                                                                                                                  in deinem Format   $time_s (steht für spezial);

                                                                                                Gut ändere ich bei mir ab.

                                                                                                Der Pfad zur Datei wird in $filename definiert;

                                                                                                Den würde ich dann auch $filepath nennen, wenn schon.
                                                                                                $filename ist dann nur der Basename des Files.

                                                                                                Unser Mega Array heißt $_file, in gepacketer Fomr $_file_packed;

                                                                                                Datensätze heißen $_record

                                                                                                Das ist im Prinzip bei den relativ kurzen Funktionen auch noch nicht sooo tragisch, weil die Namensräume ja getrennt sind. Allerdings: früh übt sich und je einheitlicher wir das machen, desto leichter lässt sich das Gesamtkunstwerk später lesen, pflegen und dokumentieren.

                                                                                                Noch eine Philosophiefrage:

                                                                                                Wen  ein Datensatz zum Update angemeldet wird, der noch nicht odr nicht mehr in der Datei enthalten war, welchen Meinstamp ['lastupdate'] soll der dann erhalten? Den, den er bereits hatte (aus der anderen Datei, aus der er stammt) oder einen frischen, da er ja eben angefasst wurde...

                                                                                                Das ist eigentlich hauptsächlich dann interessant, wenn er archiviert wird. Es könnte in der Arvhivdatei ja aufgrund eines Fehler schon ein Satz mit der ID drinstehen. Wenn man den nun nochmal aus der aktiven in die Archivdatei überstellt, und er behält beim Neueinfügen Seinen Timestamp, dann würde er, da er ja in beiden Files noch denselben hat, auch keinen fehler verursachen. Er würde eben nur seine eigenen Daten nochmals überschreiben. Wenn er zwischenzeitlich in der aktiven Datei angefasst wurde, würden die beiden Meinstamps nicht mehr übereinstimmen. dann würde er in der Fehlerliste von flat_update auftauchen.

                                                                                                Man müsste dann aber in allen Funktionen gewährleisten, dass während des Transportes von File A nach File B keine Manuipulation an den Daten stattfindet.

                                                                                                Beim flat_insert() würden wir dann den aktullen Timestamp nehmen.

                                                                                                Soll der Timestamp pro Datensatz ermittelt werden oder für die gesamte Liste einheitlich. Bei 1000 Stück dauert das schließlich einen kleinen Moment. Allerdings ist die Datei ja während des gesamten Vorganges logisch gesperrt. Ein multi-flat_insert() oder multi-flat_update() würde auch nicht solange dauern, wie meine Schleife bis 999 mit flat_update(), da ich immer nur einen einzigen Satz eingefügt habe, also die Datei auch 999 Mal geöffnet und geschlossen habe, das Array 999 Mal erstellt und wieder zerstört wurde etc.

                                                                                                (--> Diskussion mit CK über die Bufferung *gg*)

                                                                                                Wenn flat_insert() und flat_select() fertig sind, probieren wir es einfach aus!

                                                                                                Liebe Grüße aus http://www.braunschweig.de

                                                                                                Tom

                                                                                                --
                                                                                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                Nur selber lernen macht schlau
                                                                                                1. Hi Tom,

                                                                                                  Die aktuelle Zeit im UNIX Format ist $time_u (steht für unix);
                                                                                                                    in deinem Format   $time_s (steht für spezial);

                                                                                                  Gut ändere ich bei mir ab.

                                                                                                  Noch eine "Philosophie Frage", wie du sie nennst:

                                                                                                  Sollen wir am Anfang des Sriptes einmal festlegen $time_u und $time_s gleich und das den entsprechenden Funktionen mitübermitteln oder sollen wir das in jeder in Frage kommenden Funktion einzeln festellen lassen?

                                                                                                  Der Pfad zur Datei wird in $filename definiert;
                                                                                                  Den würde ich dann auch $filepath nennen, wenn schon.
                                                                                                  $filename ist dann nur der Basename des Files.

                                                                                                  OK, ändere ich um und schicke dir die Hauptdatei (gerade geschickt) noch mal neu zu.

                                                                                                  Unser Mega Array heißt $_file, in gepacketer Fomr $_file_packed;

                                                                                                  Datensätze heißen $_record

                                                                                                  Solange Sie noch nicht in $_file drinnen sind.

                                                                                                  Das ist im Prinzip bei den relativ kurzen Funktionen auch noch nicht sooo tragisch, weil die Namensräume ja getrennt sind. Allerdings: früh übt sich und je einheitlicher wir das machen, desto leichter lässt sich das Gesamtkunstwerk später lesen, pflegen und dokumentieren.

                                                                                                  Richtig, vor allem wollen ja vielleicht auch andere das Script haben, und da ist das für die verständlicher.

                                                                                                  Noch eine Philosophiefrage:

                                                                                                  ;-)

                                                                                                  Wen  ein Datensatz zum Update angemeldet wird, der noch nicht odr nicht mehr in der Datei enthalten war, welchen Meinstamp ['lastupdate'] soll der dann erhalten? Den, den er bereits hatte (aus der anderen Datei, aus der er stammt) oder einen frischen, da er ja eben angefasst wurde...

                                                                                                  Ich finde, wenn ein Datensatz geändert wird, also upgedatet wird, muss das ['created'] immer gleich bleiben, in jedem Fall. Das ['lastupdate'] hingegen, mit den Millisekunden, sollte jedoch immer erneuert werden.

                                                                                                  Das ist eigentlich hauptsächlich dann interessant, wenn er archiviert wird. Es könnte in der Arvhivdatei ja aufgrund eines Fehler schon ein Satz mit der ID drinstehen. Wenn man den nun nochmal aus der aktiven in die Archivdatei überstellt, und er behält beim Neueinfügen Seinen Timestamp, dann würde er, da er ja in beiden Files noch denselben hat, auch keinen fehler verursachen. Er würde eben nur seine eigenen Daten nochmals überschreiben. Wenn er zwischenzeitlich in der aktiven Datei angefasst wurde, würden die beiden Meinstamps nicht mehr übereinstimmen. dann würde er in der Fehlerliste von flat_update auftauchen.

                                                                                                  Ein Datensatz, der von aktuell.dat -> archiv.dat geschoben wird, wird in keinster Weise geändert. Ein Datensatz kann _nicht_ von einer Archivs Datei wieder nach aktuell.dat gelangen!

                                                                                                  Was du oben meintest, habe ich nicht ganz verstanden. Du meinst, wenn er während des Archivierungsvorganges von aktuell.dat aus geändert wird, oder wie?

                                                                                                  Man müsste dann aber in allen Funktionen gewährleisten, dass während des Transportes von File A nach File B keine Manuipulation an den Daten stattfindet.

                                                                                                  Exact.

                                                                                                  Beim flat_insert() würden wir dann den aktuellen Timestamp nehmen.

                                                                                                  Richtig.

                                                                                                  Soll der Timestamp pro Datensatz ermittelt werden oder für die gesamte Liste einheitlich. Bei 1000 Stück dauert das schließlich einen kleinen Moment. Allerdings ist die Datei ja während des gesamten Vorganges logisch gesperrt. Ein multi-flat_insert() oder multi-flat_update() würde auch nicht solange dauern, wie meine Schleife bis 999 mit flat_update(), da ich immer nur einen einzigen Satz eingefügt habe, also die Datei auch 999 Mal geöffnet und geschlossen habe, das Array 999 Mal erstellt und wieder zerstört wurde etc.

                                                                                                  Hm, soll es denn überhaupt die Möglichkeit geben, einen multi-flat_insert() zu machen? Ich meine, der Administrator kann doch immer nur eine neue News schreiben und da kommt es doch nicht zu einem mehrfachen insert!

                                                                                                  Anders ist das bei Update, da soll es ja eine mehrfach Auswahl geben, um mehrere Datensätze auf einmal zu ändern, und dann auf Abspeichern zu klicken (hab ich dich da so richtig verstanden?).
                                                                                                  Allerdings ist hier die Frage mit dem alle-den-gleichen-timestamp-oder-nicht auch schon von vorneherein eigentlich klar, da wir ja gesagt haben, ['created'] wird bei Update _nie_ geändert, und ['lastupdate'] wird ja nicht veröffentlicht. Also kann man da frei wählen, ob man für ['lastupdate'] mehrfach das gleiche Datum verwenden will. Kommt auf das Script drauf an, ob es mit mehreren gleichen Daten zurecht kommt.

                                                                                                  Wenn flat_insert() und flat_select() fertig sind, probieren wir es einfach aus!

                                                                                                  Ich möchte dich und auch mich *g* erinnern, dass wir die Funktionen flat_rec_insert() und flat_rec_select() genannt haben.

                                                                                                  MfG, Dennis.

                                                                                                  --
                                                                                                  Signatur 1 von 3:
                                                                                                  Meine Homepage: http://www.riehle-web.com
                                                                                                  Tutorial: http://tutorial.riehle-web.com
                                                                                                  1. Hello,

                                                                                                    Noch eine "Philosophie Frage", wie du sie nennst:

                                                                                                    Sollen wir am Anfang des Sriptes einmal festlegen $time_u und $time_s gleich und das den entsprechenden Funktionen mitübermitteln oder sollen wir das in jeder in Frage kommenden Funktion einzeln festellen lassen?

                                                                                                    MMn nein, sonder nur am Anfang jeder Funktion, denn die könnte sich auch gegensetig aufrufen und Konkurrenz machen (Rekursion, Schachtelung). meine Frage war nun nur, wollen wir das innerhalb einer Funktion bei jedem Datensatz neu bestimmen oder nur am Anfang der Funktion. Die Funktion selber macht sich ja keine Konkurrenz, sodass man diese kleine Ungenauigkeit (< 0,09sec) zugunsten der Perfomance in kauf nehmen könnte.

                                                                                                    Der Pfad zur Datei wird in $filename definiert;
                                                                                                    Den würde ich dann auch $filepath nennen, wenn schon.
                                                                                                    $filename ist dann nur der Basename des Files.

                                                                                                    OK, ändere ich um und schicke dir die Hauptdatei (gerade geschickt) noch mal neu zu.

                                                                                                    Ich auch...

                                                                                                    Unser Mega Array heißt $_file, in gepacketer Fomr $_file_packed;

                                                                                                    Datensätze heißen $_record

                                                                                                    Solange Sie noch nicht in $_file drinnen sind.

                                                                                                    Ja, genau. $_file ist das entpackte Pendant zum File, $_record ist nur ein Datensatz innerhalb von $_file['data']

                                                                                                    Wen  ein Datensatz zum Update angemeldet wird, der noch nicht odr nicht mehr in der Datei enthalten war, welchen Meinstamp ['lastupdate'] soll der dann erhalten? Den, den er bereits hatte (aus der anderen Datei, aus der er stammt) oder einen frischen, da er ja eben angefasst wurde...

                                                                                                    Ich finde, wenn ein Datensatz geändert wird, also upgedatet wird, muss das ['created'] immer gleich bleiben, in jedem Fall. Das ['lastupdate'] hingegen, mit den Millisekunden, sollte jedoch immer erneuert werden.

                                                                                                    OK, da er beim Übertragen von A nach B nicht geändert wird, bleibt der Timestamp gleich. Ich habe das nun so gemacht:

                                                                                                    Wenn der Satz mit flat_update() in ein File eingetragen wird, in dem er noch nicht enthalten war (also quasi ein Insert oder Re-Insert bzw. eben Übertragung von A nach B), dann behält er den mitgebrachten Meinestamp, es sei denn er bringt keinen mit, dann bekommt er den aktuellen. ['created'] ist unantastbar ;-))

                                                                                                    Ein Datensatz, der von aktuell.dat -> archiv.dat geschoben wird, wird in keinster Weise geändert. Ein Datensatz kann _nicht_ von einer Archivs Datei wieder nach aktuell.dat gelangen!

                                                                                                    Doch, bei der Datenrücksicherung! Und da darf ja der LastUpdate auch nicht geändert werden. Das war der passende Hinweis. Danke.

                                                                                                    Hm, soll es denn überhaupt die Möglichkeit geben, einen multi-flat_insert() zu machen? Ich meine, der Administrator kann doch immer nur eine neue News schreiben und da kommt es doch nicht zu einem mehrfachen insert!

                                                                                                    Aber nicht beim Übertragen von 737 selektierten Datensätzen von A nach B. da sind es eben 737. Warum sollen wir dann das File 737 mal öffnen uns schließen, wenn da  mit einem Mal auch geht?

                                                                                                    Mach Dich mal frei von dem Adminstrator. Den gibt es noch gar nicht. Den gibt es eigentlich sowiso nicht. Es gibt nur User des Systems. Die haben allerdings alle andere Rechte auf Daten und Objekte (also auch auf sich selbst). dminstrator ist nur ein Synonym für eine  User mit besonders vielen Rechten.

                                                                                                    Anders ist das bei Update, da soll es ja eine mehrfach Auswahl geben, um mehrere Datensätze auf einmal zu ändern, und dann auf Abspeichern zu klicken (hab ich dich da so richtig verstanden?).

                                                                                                    Ja.

                                                                                                    Allerdings ist hier die Frage mit dem alle-den-gleichen-timestamp-oder-nicht auch schon von vorneherein eigentlich klar, da wir ja gesagt haben, ['created'] wird bei Update _nie_ geändert, und ['lastupdate'] wird ja nicht veröffentlicht. Also kann man da frei wählen, ob man für ['lastupdate'] mehrfach das gleiche Datum verwenden will. Kommt auf das Script drauf an, ob es mit mehreren gleichen Daten zurecht kommt.

                                                                                                    Es geht eben schneller, wenn man nicht x-mal microtime() und date() und substr() aufrufen muss.

                                                                                                    Ich möchte dich und auch mich *g* erinnern, dass wir die Funktionen flat_rec_insert() und flat_rec_select() genannt haben.

                                                                                                    Oh ja, also auch das noch korrigieren.

                                                                                                    Liebe Grüße aus http://www.braunschweig.de

                                                                                                    Tom

                                                                                                    --
                                                                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                    Nur selber lernen macht schlau
                                                                                                    1. Hi Tom,

                                                                                                      Datensätze heißen $_record, Solange Sie noch nicht in $_file drinnen sind.

                                                                                                      Ja, genau. $_file ist das entpackte Pendant zum File, $_record ist nur ein Datensatz innerhalb von $_file['data']

                                                                                                      Oder auch ein Datensatz innerhalb von $_recdata, wie in deiner Update Funktion.

                                                                                                      Wenn der Satz mit flat_update() in ein File eingetragen wird, in dem er noch nicht enthalten war (also quasi ein Insert oder Re-Insert bzw. eben Übertragung von A nach B), dann behält er den mitgebrachten Meinestamp, es sei denn er bringt keinen mit, dann bekommt er den aktuellen. ['created'] ist unantastbar ;-))

                                                                                                      Ähm, du willst also praktisch die Funktion flat_rec_update() nutzen, um die Datensätze zu archivieren? Das finde ich nicht so gut. IMHO sollte flat_rec_update() nur dazu da sein, Datensätze innerhalb einer Datei aktuell.dat zu erneuern.

                                                                                                      Mittels flat_rec_insert() kann man einen oder mehrere Datensätze in aktuell.dat schreiben. Ich dachte eigentlich auch nicht daran, dies für die Archivierung zu nehmen.

                                                                                                      Ich dachte, die Funktion flat_rec_copy() für die Archivierung vorzusehen. Diese soll aufgerufen werden flat_rec_copy($datansätze,$alterfile,$neuerfile), und daraufhin die Datensätze vom alten File in den neuen File kopieren und anschließen im alten File löschen.
                                                                                                      Achtung: Die Datensätze kriegen in einer Archivsdatei wieder eine neue ID! Sie kriegen dort eben die dortige nächste höhere ID, egal, wie die alte war.

                                                                                                      Hinweis:
                                                                                                      --------
                                                                                                      Wir haben eine Datei aktuell.dat, welche immer höhere ID's vergibt. Wenn die alten Datensätze archiviert werden, so sind die ersten ID's unvergeben, werden aber nicht wieder neu vergeben.
                                                                                                      Zweifellos werden so die ID's mit der Zeit immer höher! Vielleicht ist man irgendwann so dann in der Datei aktuell.dat bei der Zahl 120000 oder so ;-)

                                                                                                      Gibt es da vielleicht eine PHP Funktion, die zuerst die Datensätze in $_file['data'] zählt und anschließend die Datensätze wieder zusammenrückt, also wenn vorher vielleicht 20 das niedrigste war, danach 22, so werden die 1 und 2? Anschließen wird die lastid gleich den Anzahl der Datensätzen gesetzt.

                                                                                                      Ein Datensatz, der von aktuell.dat -> archiv.dat geschoben wird, wird in keinster Weise geändert. Ein Datensatz kann _nicht_ von einer Archivs Datei wieder nach aktuell.dat gelangen!

                                                                                                      Doch, bei der Datenrücksicherung! Und da darf ja der LastUpdate auch nicht geändert werden. Das war der passende Hinweis. Danke.

                                                                                                      Datenrücksicherung? Wie stellst du dir das vor, was soll da passieren? Also ich muss ehrlich sagen, dass wird zu kompliziert, wer braucht das? Wenn die Daten im Archiv sind, sind sie da und können nicht mehr zurück. Man kann sie ja im Archiv immer noch löschen!
                                                                                                      Lass von dieser "Datenrücksicherung" erst mal ab. Wenn _alles_ andere fertig ist, kann man noch mal darüber sprechen.

                                                                                                      Ich möchte dich und auch mich *g* erinnern, dass wir die Funktionen flat_rec_insert() und flat_rec_select() genannt haben.

                                                                                                      Oh ja, also auch das noch korrigieren.

                                                                                                      In dem Script, welches ich dir gerade zugeschickt habe, dürfte das schon korrigiert sein.

                                                                                                      MfG, Dennis.

                                                                                                      --
                                                                                                      Signatur 2 von 3:
                                                                                                      Die EU und die neuen Mitgliedslnder:
                                                                                                      http://www.riehle-web.com/pkprojekt/
                                                                                                      Oder doch mehr in HTML interessiert?
                                                                                                      http://tutorial.riehle-web.com
                                                                                                      1. Hello,

                                                                                                        Ähm, du willst also praktisch die Funktion flat_rec_update() nutzen, um die Datensätze zu archivieren? Das finde ich nicht so gut. IMHO sollte flat_rec_update() nur dazu da sein, Datensätze innerhalb einer Datei aktuell.dat zu erneuern.

                                                                                                        Ja, genau. Die Funktion ist eine Basis-Funktion, sozusagen unser BIOS.

                                                                                                        Mittels flat_rec_insert() kann man einen oder mehrere Datensätze in aktuell.dat schreiben. Ich dachte eigentlich auch nicht daran, dies für die Archivierung zu nehmen.

                                                                                                        Mittels flat_rec_insert() kann man einen oder mehrer Datensätez in einm beliebigen File (mit passendem Format) NEU anlegen, also mit einer neuen ID versehen.

                                                                                                        Mit flat_rec_update() kann mann Datansätze in einem beliebigen File (passender Struktur) überarbeiten, oder auch unter Beibehaltung ihrer ID dem File hinzufügen, wenn sie dort noch nicht vorhanden sind.

                                                                                                        Ich dachte, die Funktion flat_rec_copy() für die Archivierung vorzusehen. Diese soll aufgerufen werden flat_rec_copy

                                                                                                        flat_rec_copy() ist eigentlich bei den Basisfunktionen falsch einsortiert, da es ein Wrapper ist. Mit Hilfe von rec_copy() wird ein Datensatz aus einer Datei geholt, im Fiormular bereit gestellt und dann dann nach Bearbeitung mit einer neuen ID wieder abgespeichert. Da zu aber später mehr.

                                                                                                        Das macht man mit einer Funktion do_archiv(<ganz viele Parameter>) oder wie die auch immer heißen wird. Die holt die Datensätze mit flat_rec_select() aud einem File, filtert sie mittels rec_filter() oder rec_search() (osder wie die heißen werden) und speichert sie mittels flat_rec_update() in der Zieldatei ab.

                                                                                                        Achtung: Die Datensätze kriegen in einer Archivsdatei wieder eine neue ID! Sie kriegen dort eben die dortige nächste höhere ID, egal, wie die alte war.

                                                                                                        Das bekommen sie garantiert nicht, da es sich immer noch um dieselben Daten handelt. Unser Nummernkreis hat eine Range von "integer minus 1 Bit",

                                                                                                        <cite>
                                                                                                        Die Größe eines Integer-Wertes ist plattformabhängig, ein Maximalwert von ungefähr zwei Milliarden ist jedoch üblich (vorzeichenbehafteter 32-Bit-Wert). PHP unterstützt keine vorzeichenlosen Integer-Werte.
                                                                                                        http://de3.php.net/manual/de/language.types.integer.php
                                                                                                        </cite>

                                                                                                        Wieviele Einträge willst Du täglich machen, um zwei Milliarden Datensätze à ca. 500Bytes oder mehr also 1 Terabyte Daten einzutippen. Wenn Du die Hälfte davon erreicht hast, dann kannst Du immer noch das System verändern. dann bin aber schon tot.

                                                                                                        Hinweis:

                                                                                                        Wir haben eine Datei aktuell.dat, welche immer höhere ID's vergibt. Wenn die alten Datensätze archiviert werden, so sind die ersten ID's unvergeben, werden aber nicht wieder neu vergeben.

                                                                                                        Die IDs SIND vergeben. Und die bleiben auch vergeben. Es besteht keinerlei Anlass für die nächsten 4085 Jahre, das zu ändern.

                                                                                                        pro Minute =>  pro Sunde =>    am Tag   =>  im Jahr   =>   max erreicht
                                                                                                               1             60          1.440      525.600        4085,77 Jahre
                                                                                                              60           3600         86.400   31.536.000          68,00 Jahre
                                                                                                             360         21.600        518.400  189.216.000          11,34 Jahre

                                                                                                        Zweifellos werden so die ID's mit der Zeit immer höher! Vielleicht ist man irgendwann so dann in der Datei aktuell.dat bei der Zahl 120000 oder so ;-)

                                                                                                        Und wen stört das?

                                                                                                        Gibt es da vielleicht eine PHP Funktion, die zuerst die Datensätze in $_file['data'] zählt und anschließend die Datensätze wieder zusammenrückt, also wenn vorher vielleicht 20 das niedrigste war, danach 22, so werden die 1 und 2? Anschließen wird die lastid gleich den Anzahl der Datensätzen gesetzt.

                                                                                                        Da weigere ich mich strikt, sowas zu machen. Ich habe allerdings noch ein paar alte 20MB-Festplatten. Wenn wir die wieder benutzen wollen, mache ich mir Gedanken ;-)

                                                                                                        ===========================================================================
                                                                                                                  Aber hier würde mich mal die Meinung der anderen
                                                                                                                           Datenkünstler interessieren.

                                                                                                        Ein Datensatz, der von aktuell.dat -> archiv.dat geschoben wird, wird in keinster Weise geändert. Ein Datensatz kann _nicht_ von einer Archivs Datei wieder nach aktuell.dat gelangen!

                                                                                                        Doch. Und zwar für den Fall, dass aktuell verloren geht, kann er von Datensicherung wieder zurück nach aktuell gelangen. Außerdem scheiben wir ja die Tools nicht nur für Dein Programm, sondern als Werkzeugkasten für News, Mail-Verteiler, News, Gästebücher, kleine Shops usw.

                                                                                                        Sonst würd sich die Mühr nicht lohnen

                                                                                                        Datenrücksicherung? Wie stellst du dir das vor, was soll da passieren?

                                                                                                        Bei der Datensicherung werden Daten gesichert, solange sie noch da sind. ;-P

                                                                                                        Also ich muss ehrlich sagen, dass wird zu kompliziert, wer braucht das?

                                                                                                        Was ist an Datensicherung kompliziert? Ein Kopfdruck und sei startet.

                                                                                                        So, nun haben wir wirder genug Diskussionsstoff. Vielleicht interessiert es ja doch noch jemand anderes, auch wenn der Thread schon ganz unter steht.

                                                                                                        Liebe Grüße aus http://www.braunschweig.de

                                                                                                        Tom

                                                                                                        --
                                                                                                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                        Nur selber lernen macht schlau
                                                                                                        1. Heeeelloo,

                                                                                                          guckt hir eigentlich überhaupt noch jemand anders rein oder müssen wir die FAQ jetzt missachten und obern wieder anfangen?

                                                                                                          Liebe Grüße aus http://www.braunschweig.de

                                                                                                          Tom

                                                                                                          --
                                                                                                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                          Nur selber lernen macht schlau
                                                                                                          1. Heeeelloo,

                                                                                                            guckt hir eigentlich überhaupt noch jemand anders rein oder müssen wir die FAQ jetzt missachten und obern wieder anfangen?

                                                                                                            Hm, wahrscheinlich lesen hier nur noch ein paar Leute, die darauf warten, dass der Featuer Artikel von uns fertig ist und sie dann möglichst schnell unsere Funktionen kriegen ;-)

                                                                                                            Die die was wissen, hm, von denen scheint keiner da zu sein :-(

                                                                                                            MfG, Dennis.

                                                                                                            --
                                                                                                            [remote-signature:http://riehle-web-modellbahn.s4.cybton.com/signatur/test.php]
                                                                                                            1. Hello,

                                                                                                              Hm, wahrscheinlich lesen hier nur noch ein paar Leute, die darauf warten, dass der Featuer Artikel von uns fertig ist und sie dann möglichst schnell unsere Funktionen kriegen ;-)

                                                                                                              Die die was wissen, hm, von denen scheint keiner da zu sein :-(

                                                                                                              So wird das sein. Ich SCHREIE jetzt mal ein bisschen. Mal sehen, ob es bis oben tönt.

                                                                                                              Ich hätte nämlich gerne noch ein paar Stellungnahmen zu dem Thema Nummernkreis und Wertebereich und ob man sich da Gedanken machen muss. Ich habe das zwar ausgerechnet, aber andere Meinungen sind trotzdem nicht falsch.

                                                                                                              Allerdings viel mir eben in meiner heißen Wanne ein, dass das Forum hier im Schnitt wohl auch nicht mehr als 1 Posting in der Minute hat. Oder meinst Du, dass das hier wesentlich mehr sind über 24 Stunden gemittelt?

                                                                                                              Liebe Grüße aus http://www.braunschweig.de

                                                                                                              Tom

                                                                                                              --
                                                                                                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                              Nur selber lernen macht schlau
                                                                                                              1. Hallo Tom,

                                                                                                                Hm, wahrscheinlich lesen hier nur noch ein paar Leute, die darauf warten, dass der Featuer Artikel von uns fertig ist und sie dann möglichst schnell unsere Funktionen kriegen ;-)

                                                                                                                Klar ;-)
                                                                                                                Wann ist er denn fertig?

                                                                                                                So wird das sein. Ich SCHREIE jetzt mal ein bisschen. Mal sehen, ob es bis oben tönt.

                                                                                                                Mir gellen noch die Augen ...

                                                                                                                Allerdings viel mir eben in meiner heißen Wanne ein, dass das Forum hier im Schnitt wohl auch nicht mehr als 1 Posting in der Minute hat. Oder meinst Du, dass das hier wesentlich mehr sind über 24 Stunden gemittelt?

                                                                                                                Ich denke, es kommt nicht auf den Mittelwert an, sondern auf das Maximum. Aber selbst der Spitzenwert dürfte immer noch unter 10 Postings in einer Minute bleiben. Der reale Spitzenwert würde mich schon mal interessieren.

                                                                                                                Freundliche Grüsse,

                                                                                                                Vinzenz

                                                                                                              2. Hallo Tom,

                                                                                                                Hm, wahrscheinlich lesen hier nur noch ein paar Leute, die darauf warten, dass der Featuer Artikel von uns fertig ist und sie dann möglichst schnell unsere Funktionen kriegen ;-)

                                                                                                                Klar, wann ist es denn so weit?

                                                                                                                So wird das sein. Ich SCHREIE jetzt mal ein bisschen. Mal sehen, ob es bis oben tönt.

                                                                                                                Mir gellen noch die Augen ;-)

                                                                                                                Allerdings viel mir eben in meiner heißen Wanne ein, dass das Forum hier im Schnitt wohl auch nicht mehr als 1 Posting in der Minute hat. Oder meinst Du, dass das hier wesentlich mehr sind über 24 Stunden gemittelt?

                                                                                                                Sind nicht die Spitzenwerte relevanter als das Mittel? Denn auch die gilt es zu bewältigen. Aber auch da denke ich, dass 10 Postings in einer Minute höchst selten überschritten werden. Das Maximum würde mich schon einmal interessieren.

                                                                                                                Freundliche Grüsse,

                                                                                                                Vinzenz

                                                                                                              3. Hallo Tom,

                                                                                                                Hm, wahrscheinlich lesen hier nur noch ein paar Leute, die darauf warten, dass der Featuer Artikel von uns fertig ist und sie dann möglichst schnell unsere Funktionen kriegen ;-)

                                                                                                                Klar, wann ist es denn so weit?

                                                                                                                So wird das sein. Ich SCHREIE jetzt mal ein bisschen. Mal sehen, ob es bis oben tönt.

                                                                                                                Mir gellen noch die Augen ;-)

                                                                                                                Allerdings viel mir eben in meiner heißen Wanne ein, dass das Forum hier im Schnitt wohl auch nicht mehr als 1 Posting in der Minute hat. Oder meinst Du, dass das hier wesentlich mehr sind über 24 Stunden gemittelt?

                                                                                                                Sind nicht die Spitzenwerte relevanter als das Mittel? Denn auch die gilt es zu bewältigen. Aber auch da denke ich, dass 10 Postings in einer Minute höchst selten überschritten werden. Das Maximum würde mich schon einmal interessieren.

                                                                                                                Freundliche Grüsse,

                                                                                                                Vinzenz

                                                                                                                1. Hello,

                                                                                                                  Allerdings fiel mir eben in meiner heißen Wanne ein, dass das Forum hier im Schnitt wohl auch nicht mehr als 1 Posting in der Minute hat. Oder meinst Du, dass das hier wesentlich mehr sind über 24 Stunden gemittelt?

                                                                                                                  Sind nicht die Spitzenwerte relevanter als das Mittel? Denn auch die gilt es zu bewältigen. Aber auch da denke ich, dass 10 Postings in einer Minute höchst selten überschritten werden. Das Maximum würde mich schon einmal interessieren.

                                                                                                                  Wir bauen die Funktionen ja nicht primär für vielbesuchte Foren. Aber meine Tests haben bei bis zu 500kByte Filegröße über das Internet (DSL) und auf dem vServer beim Provider bis zu 14 Inserts pro _Sekunde_ gebracht, die fehlerfrei liefen. Ab 500kByte Dateivolumen nahm das dann merklich ab. Bei 1MB Dateivolumen waren ungefähr noch 5-8 Inserts pro Sekunde möglich. Auf meinem kleinen Testserver sah die Kurve ähnlich aus, nur dass er eben mit ca. 8-10 Inserts pro Sekunde anfing und dann auf ca. 2-4 pro Sekunde zurückgefallen ist, als ich über 1MByte Dateigröße kam.

                                                                                                                  Wenn man also zwischendurch immer mal was automatisch ins Archiv schiebt (so haben wir das vorgesehen für den Baukasten) dann kann man damit sogar ein Board oder Forum betreiben.

                                                                                                                  Liebe Grüße aus http://www.braunschweig.de

                                                                                                                  Tom

                                                                                                                  --
                                                                                                                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                  Nur selber lernen macht schlau
                                                                                                        2. Hi Tom,

                                                                                                          Mittels flat_rec_insert() kann man einen oder mehrer Datensätez in einm beliebigen File (mit passendem Format) NEU anlegen, also mit einer neuen ID versehen.

                                                                                                          Ich habe dir die erste Version der Funktion gerade mal per Mail zugeschickt.

                                                                                                          Das macht man mit einer Funktion do_archiv(<ganz viele Parameter>) oder wie die auch immer heißen wird. Die holt die Datensätze mit flat_rec_select() aud einem File, filtert sie mittels rec_filter() oder rec_search() (osder wie die heißen werden) und speichert sie mittels flat_rec_update() in der Zieldatei ab.

                                                                                                          Die Datensätze kriegen in einer Archivsdatei wieder eine neue ID! Sie kriegen dort eben die dortige nächste höhere ID, egal, wie die alte war.

                                                                                                          Das bekommen sie garantiert nicht, da es sich immer noch um dieselben Daten handelt. Unser Nummernkreis hat eine Range von "integer minus 1 Bit",

                                                                                                          Achso, du willst es also so machen, dass es jede ID nur _einmal_ gibt, und zwar egal ob im Archiv oder in aktuell.dat - ID 1 gibt es nur einmal irgendwo.

                                                                                                          Ich hatte gedacht, dass die Daten ins Archiv gespielt werden, und das Archiv in sich wieder ein eigenes System ist, also eigene Meta Daten hat, und eigene ID's usw.
                                                                                                          Aber so wie du es machen willst hat es sicherlich auch Vorteile. Zumal man kaum 360 Einträge haben pro Minute haben wird und selbst wenn, muss man halt mal alle 11 Jahre das System "neu auflegen" ;-)

                                                                                                          Wieviele Einträge willst Du täglich machen, um zwei Milliarden Datensätze à ca. 500Bytes oder mehr also 1 Terabyte Daten einzutippen. Wenn Du die Hälfte davon erreicht hast, dann kannst Du immer noch das System verändern. dann bin aber schon tot.

                                                                                                          *lol*

                                                                                                          pro Minute =>  pro Sunde =>    am Tag   =>  im Jahr   =>   max erreicht
                                                                                                                 1             60          1.440      525.600        4085,77 Jahre
                                                                                                                60           3600         86.400   31.536.000          68,00 Jahre
                                                                                                               360         21.600        518.400  189.216.000          11,34 Jahre

                                                                                                          Sehr "demonstrierende" Rechnung! :-0

                                                                                                          Zweifellos werden so die ID's mit der Zeit immer höher! Vielleicht ist man irgendwann so dann in der Datei aktuell.dat bei der Zahl 120000 oder so ;-)

                                                                                                          Und wen stört das?

                                                                                                          Keinen. Zumal man wahrscheinlich eh nur so 1000 Einträge im Jahr haben wird.

                                                                                                          ===========================================================================
                                                                                                                    Aber hier würde mich mal die Meinung der anderen
                                                                                                                             Datenkünstler interessieren.

                                                                                                          Diese anderen Datenkünstler scheinen nicht da zu sein. Vermutlich sehen sie das hier auch nicht mehr, weil es zu sehr im "Abseits" steht, also bei einer Auflösung von 1024 Pixeln Breite, muss man zu diesem Thread schon ganz schön rüberscrollen.

                                                                                                          Deshalb habe ich auch oben in diesem Thread mal einen Verweis hier her gesetzt.

                                                                                                          Doch. Und zwar für den Fall, dass aktuell verloren geht, kann er von Datensicherung wieder zurück nach aktuell gelangen. Außerdem scheiben wir ja die Tools nicht nur für Dein Programm, sondern als Werkzeugkasten für News, Mail-Verteiler, News, Gästebücher, kleine Shops usw.

                                                                                                          Dementsprechend müsste man die Datensicherung noch mal einen extra File anlegen? Schließlich sind gleiche Datensätze doch nicht im Archiv und in aktuell.dat gleichzeitig. Oder sehe ich das irgendwie falsch?

                                                                                                          So, nun haben wir wirder genug Diskussionsstoff. Vielleicht interessiert es ja doch noch jemand anderes, auch wenn der Thread schon ganz unter steht.

                                                                                                          Puh, in der Tat ;-)

                                                                                                          MfG, Dennis.

                                                                                                          --
                                                                                                          Signatur 3 von 3:
                                                                                                          Fragen zu Formularen?
                                                                                                          http://tutorial.riehle-web.com hilft!
                                                                                                          1. Hello,

                                                                                                            ===========================================================================

                                                                                                            Aber hier würde mich mal die Meinung der anderen
                                                                                                                               Datenkünstler interessieren.

                                                                                                            Diese anderen Datenkünstler scheinen nicht da zu sein. Vermutlich sehen sie das hier auch nicht mehr, weil es zu sehr im "Abseits" steht, also bei einer Auflösung von 1024 Pixeln Breite, muss man zu diesem Thread schon ganz schön rüberscrollen.

                                                                                                            Di Andreren schlafen noch oder bkommen dennKopf nicht so weit nach rechts gedreht. *g*

                                                                                                            Deshalb habe ich auch oben in diesem Thread mal einen Verweis hier her gesetzt.

                                                                                                            Ist der noch da?

                                                                                                            Dementsprechend müsste man die Datensicherung noch mal einen extra File anlegen? Schließlich sind gleiche Datensätze doch nicht im Archiv und in aktuell.dat gleichzeitig. Oder sehe ich das irgendwie falsch?

                                                                                                            Nöö, ich denke das stimmt so. Man könnte natürlich für die Datensicherung ein anderes Format benutzen. Es ist da ja nicht notwendig, das als serialisiertes Array zu speichern. Das hat doch einiges an Overhead. Also sollten wir vielleicht noch eine flat_file_export() und eine flat_file_import() Funktion ersinnen.

                                                                                                            Liebe Grüße aus http://www.braunschweig.de

                                                                                                            Tom

                                                                                                            --
                                                                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                            Nur selber lernen macht schlau
                                                                                                            1. Hi Tom,

                                                                                                              Diese anderen Datenkünstler scheinen nicht da zu sein. Vermutlich sehen sie das hier auch nicht mehr, weil es zu sehr im "Abseits" steht, also bei einer Auflösung von 1024 Pixeln Breite, muss man zu diesem Thread schon ganz schön rüberscrollen.

                                                                                                              Di Andreren schlafen noch oder bkommen dennKopf nicht so weit nach rechts gedreht. *g*

                                                                                                              Hm, sollten mehr morgendlichen Frühsport machen ;-)

                                                                                                              Deshalb habe ich auch oben in diesem Thread mal einen Verweis hier her gesetzt.

                                                                                                              Ist der noch da?

                                                                                                              Das erste <?t=82138&m=483147#nachricht> und gerade noch einmal <?t=82138&m=483540#nachricht>.

                                                                                                              Bei letzterem hat mir übrigends die Forums Software gesagt

                                                                                                              Das Format Ihres Postings scheint unsauber zu sein (z. B. keine Zeilenumbrüche, keine Satzzeichen, alles Kleingeschrieben oder ähnliches). Solche Postings sind ungern gesehen, da sie oft schwer zu lesen sind. Sind Sie sicher, dass Sie so posten möchten?

                                                                                                              Irgendwie blöd, das Ding ;-)  Zeilenumbrüche waren drin, Satzzeichen waren drin und Großbuchstaben auch. Hm.

                                                                                                              Nöö, ich denke das stimmt so. Man könnte natürlich für die Datensicherung ein anderes Format benutzen. Es ist da ja nicht notwendig, das als serialisiertes Array zu speichern. Das hat doch einiges an Overhead. Also sollten wir vielleicht noch eine flat_file_export() und eine flat_file_import() Funktion ersinnen.

                                                                                                              Ne, das halte ich für überflüssig. Man sollte allerdings die Funktion Copy() mit einem bestimmten Parameter aufrufen können, so dass die Datei aktuell.dat unter dem Namen aktuell Dann das Datum .sbu gespeichert wird, steht für SaveBackUp. Sieht z.B. so aus: aktuell20040621.sbu .

                                                                                                              Und dann müsste man noch irgendwie eine kurze Funktion schreiben, die aufgerufen wird mit dem Dateiname der Datei, die zur Wiederhertellung genutzt werden soll.

                                                                                                              Die Fuktion könnte flat_backup_import($filepath) heißen, und so aussehen:

                                                                                                              function flat_backup_inport($filepath)
                                                                                                              {
                                                                                                                if(file_exists("aktuell.dat"))
                                                                                                                {
                                                                                                                  //status-Buffer rücksetzen
                                                                                                                  clearstatcache();

                                                                                                              //Datei öffnen und locken, bei Fehler abrechen
                                                                                                                  $fp = flat_open_lock($filepath,LOCK_EX);
                                                                                                                  if (!$fp) return 5; ## Datei konnte nicht gesperrt werden

                                                                                                              //Datei entpacken
                                                                                                                  fseek($fp,0,SEEK_SET);
                                                                                                                  $_file_packed = fread($fp,$filesize);
                                                                                                                  $_file = unserialize($_file_packed);

                                                                                                              if(!empty($_file))
                                                                                                                  {
                                                                                                                    fclose($fp);
                                                                                                                    return 3;  ## Aktuell.dat existier schon bzw. noch
                                                                                                                  }

                                                                                                              fclose($fp);
                                                                                                                }

                                                                                                              //Kopie des Bakups als aktuell.dat ablegen
                                                                                                                copy($filepath,"aktuell.dat");
                                                                                                                return 0;  ## Kein Fehler aufgetreten
                                                                                                              }

                                                                                                              MfG, Dennis.

                                                                                                              --
                                                                                                              Signatur 3 von 3:
                                                                                                              Fragen zu Formularen?
                                                                                                              http://tutorial.riehle-web.com hilft!
                                                                                                              1. Hi Tom,

                                                                                                                Noch da?
                                                                                                                Ich hab dir die neue Version der Funktion ja mal per Mail zugeschickt.

                                                                                                                MfG, Dennis.

                                                                                                                --
                                                                                                                Signatur 3 von 3:
                                                                                                                Fragen zu Formularen?
                                                                                                                http://tutorial.riehle-web.com hilft!
                                                                                                                1. Hello,

                                                                                                                  ich habe mir da nochmal Gedanken über die tägliche Vollsicherung des aktuellen Files gemacht. gzwrite() & Co. funktionieren leider nicht, aber gzcompress() und gzuncompress() funktionieren. Und da ist nun diese Version dabei herausgekommen.

                                                                                                                  Ratio bei den Testdaten war > 32:1. Das lohnt sich also.

                                                                                                                  function flat_file_backup($filepath,$backuppath=false,$compress=9)
                                                                                                                  {
                                                                                                                    //status-Buffer rücksetzen
                                                                                                                    clearstatcache();

                                                                                                                  //Datei öffnen und locken, bei Fehler abrechen
                                                                                                                    $fp = flat_open_lock($filepath,LOCK_EX);
                                                                                                                    if (!$fp) return 5; ## Datei konnte nicht gesperrt werden

                                                                                                                  $filesize = filesize($filepath);

                                                                                                                  // maximal zulässige Filegröße + Sicherheit zum Öffnen
                                                                                                                    if ($filesize > FLAT_MAXFILESIZE+5000)
                                                                                                                    {
                                                                                                                      fclose($fp);
                                                                                                                      return 10;  ## max. zulässige Dateigröße überschritten
                                                                                                                    }

                                                                                                                  //Datei einlesen
                                                                                                                    fseek($fp,0,SEEK_SET);
                                                                                                                    $_file_packed = fread($fp,$filesize);

                                                                                                                  fclose($fp);

                                                                                                                  if($backuppath===false)
                                                                                                                    {
                                                                                                                      $new_path = $filepath . date(".Ymd") . ".sbz";
                                                                                                                    }

                                                                                                                  // wahlweise Komprimierung durchführen
                                                                                                                    $compress = intval($compress);
                                                                                                                    if ($compress > 0)
                                                                                                                    {
                                                                                                                      $backuppath .= '.cpr';
                                                                                                                      $_file_packed = gzcompress($_file_packed,$compress);
                                                                                                                    }

                                                                                                                  $fp = flat_open_lock($backuppath,LOCK_EX);
                                                                                                                    if (!$fp) return 5; ## Datei konnte nicht gesperrt werden

                                                                                                                  // prüfen, ob Ausgabefile schon Daten enthielt.
                                                                                                                    $filesize = filesize($backuppath);
                                                                                                                    if ($filesize > 0)
                                                                                                                    {
                                                                                                                      fclose($fp);
                                                                                                                      return 3;  ## File existiert schon
                                                                                                                    }

                                                                                                                  fwrite($fp,$_file_packed,strlen($_file_packed));
                                                                                                                    fclose($fp);

                                                                                                                  return 0;  ## Kein Fehler aufgetreten
                                                                                                                  }

                                                                                                                  Liebe Grüße aus http://www.braunschweig.de

                                                                                                                  Tom

                                                                                                                  --
                                                                                                                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                  Nur selber lernen macht schlau
                                                                                                                  1. Hello,

                                                                                                                    ich habe mich weiter oben mal gesondert mit gzcompress(), gzopen(), und gzread() beschäftigt. Nach anfänglichen Schwierigkeiten (als wenn ich gesoffen hätte, da war aber nix) habe ichs dann hinbekommen. Das Gezippe und Entpacen läuft so zippenschnell, dass wir die Backups generell gleich verpacken sollten. Ich werde die beiden Funtkionen

                                                                                                                    flat_file_backup()
                                                                                                                    und
                                                                                                                        flat_file_restore()

                                                                                                                    dann mal entsprechend umbauen.

                                                                                                                    Bei flat_file_restore() gibt es noch ein Verständnisproblem. Wann ist denn Restore notwendig? Doch im Wensetlichen, wenn es gekracht hat oder jemand die Daten versaut hat. Welche Fälle treten dann auf?

                                                                                                                    Alle daten sind kaputt     vollständiges Restore    eine Lücke bleibt
                                                                                                                    einige Daten sind noch da  Incrementelles Restore   die Lücke bleibt kleiner
                                                                                                                     ...

                                                                                                                    Welche Szenarien fallen Euch hier noch ein?

                                                                                                                    Antworten:
                                                                                                                      +------------------------------------------------------------------+
                                                                                                                      |                                                                  |
                                                                                                                      |                                                                  |
                                                                                                                      |                                                                  |
                                                                                                                      |                                                                  |
                                                                                                                      |                                                                  |
                                                                                                                      |                                                                  |
                                                                                                                      +------------------------------------------------------------------+

                                                                                                                    Liebe Grüße aus http://www.braunschweig.de

                                                                                                                    Tom

                                                                                                                    --
                                                                                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                    Nur selber lernen macht schlau
                                                                                                                  2. Hello,

                                                                                                                    das nochmalige Lesen des Threads zum Thema "Konkurrierende Dateizugriffe", in dem ich im wesentlichen mit Andreas Lindig konfereiert habe, hat mich bezüglich unserer datanverändernden Funktionen

                                                                                                                    flat_rec_insert()
                                                                                                                      flat_rec_update()
                                                                                                                      flat_rec_delete()

                                                                                                                    noch auf eine Optimierungsidee gebracht. Die wesentlichen Zeitfresser sind nach eingehender Untersuchung die Basic-IO-Zugirffe, also das Lesen und Schreiben in Dateien sowie die Ausgabe auf die Standardausgabe (echo, print). Alle anderen Prozesse (Suchen von Datensätzen mittels next(), prev(), die gzfunktionen, das Umkopieren von Arrays usw.) laufen sehr schnell ab und sind auch bei großen Datenmengen mindestens um den Faktor 50 schneller gewesen, als die Lese-/Schreibprozesse.

                                                                                                                    Wenn wir also bei den o.a. Funktionen feststellen können, dass überhaupt kein Datensatz asu dem File verändert wurde, brauchen wir die Daten weder neu zu serialisieren, noch zurückzuschreiben, denn die Datei wird ja nicht verändert. Das bedeutet also, dass unsere Funktionen dann bei gleichen Versuchsbedingungen nicht für ca. 10 Aufrufe pro Sekunde gut sind, sondern vielelciht für 15 oder mehr. Ich vermute, dass das Scheiben in Files ungefähr doppelt soviel Zeit in Anspruch nimmt, wie das Lesen.

                                                                                                                    Liebe Grüße aus http://www.braunschweig.de

                                                                                                                    Tom

                                                                                                                    --
                                                                                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                    Nur selber lernen macht schlau
                                                                                                                    1. Hi Tom,

                                                                                                                      Ich hab da zu wenig Erfahrung um sagen zu können, wie viel das letzlich bringt, wenn man die Funktionen korrigiert.

                                                                                                                      Musst du wissen, ob sich der Arbeitsaufwand lohnt. Muss doch nicht alles perfekt sein, oder? ;-)

                                                                                                                      MfG, Dennis.

                                                                                                                      --
                                                                                                                      Signatur 1 von 3:
                                                                                                                      Meine Homepage: http://www.riehle-web.com
                                                                                                                      Tutorial: http://tutorial.riehle-web.com
                                                                                                                      1. Hello,

                                                                                                                        Ich hab da zu wenig Erfahrung um sagen zu können, wie viel das letzlich bringt, wenn man die Funktionen korrigiert.

                                                                                                                        Musst du wissen, ob sich der Arbeitsaufwand lohnt. Muss doch nicht alles perfekt sein, oder? ;-)

                                                                                                                        Perfekt ist das lange noch nicht. dazu müssten wir eine vernünftige Klasse daraus machen...

                                                                                                                        Die Korrekturen habe ich schon durchgeführt. Es bringt so adhoc ca. 30-40% ersparnis. Allerdings wird die drastisch ansteigen, wenn man tatsächlich konkurrierenden Betrieb hat. Es gibt dann ja auch weniger Collisions.

                                                                                                                        Die nächste Möglichkeit der Speicherung habe ich exemplarisch auch schon fertig und Dir geschickt. Random-Access-File mit variantem Record, also im Datensatz liegt ein Array mit den Daten, aber jeder Satz für sich bleibt in seinem Slot. Das ist natürlich verdammt schnell gegenüber der Monsterarray-Variante, vergeudet aber eine Menge Platz.

                                                                                                                        Dafür ist die Lösung sehr Speichersparsam und kann bis zur maximalen Adressierbarkeit in Flat-Files genutzt werden. Das werden dann wahrscheinlich die berühmten 2,14 Gigabytes sein pro File. Ich weiß leider nicht, wo man das nachlesen kann.

                                                                                                                        Wenn ich die Funktionen noch ein wenig aufgeräumt und kommentiert habe, stelle ich sie mit auf die Webseite http://selfhtml.bitworks.de

                                                                                                                        Liebe Grüße aus http://www.braunschweig.de

                                                                                                                        Tom

                                                                                                                        --
                                                                                                                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                        Nur selber lernen macht schlau
                                                                                                                        1. Hi Tom,

                                                                                                                          Perfekt ist das lange noch nicht. dazu müssten wir eine vernünftige Klasse daraus machen...

                                                                                                                          Ist aber ausreichend ;-)

                                                                                                                          Die Korrekturen habe ich schon durchgeführt. Es bringt so adhoc ca. 30-40% ersparnis. Allerdings wird die drastisch ansteigen, wenn man tatsächlich konkurrierenden Betrieb hat. Es gibt dann ja auch weniger Collisions.

                                                                                                                          Ist das die Datei random.php? Schaue ich mir gleich mal an.

                                                                                                                          Die nächste Möglichkeit der Speicherung habe ich exemplarisch auch schon fertig und Dir geschickt. Random-Access-File mit variantem Record, also im Datensatz liegt ein Array mit den Daten, aber jeder Satz für sich bleibt in seinem Slot. Das ist natürlich verdammt schnell gegenüber der Monsterarray-Variante, vergeudet aber eine Menge Platz.

                                                                                                                          Was für Platz wird vergeudet? Speicherplatz kann es ja nicht sein, da du untern sagst sehr "speichersparsam". Welcher Platz wird also (sinnlos) vergeudet?

                                                                                                                          Dafür ist die Lösung sehr Speichersparsam und kann bis zur maximalen Adressierbarkeit in Flat-Files genutzt werden. Das werden dann wahrscheinlich die berühmten 2,14 Gigabytes sein pro File. Ich weiß leider nicht, wo man das nachlesen kann.

                                                                                                                          Gigabytes? Sprachen wir nicht mal früher von 2 Megabytes? ;-)

                                                                                                                          Wenn ich die Funktionen noch ein wenig aufgeräumt und kommentiert habe, stelle ich sie mit auf die Webseite http://selfhtml.bitworks.de

                                                                                                                          Ich schau dann mal wieder vorbei.

                                                                                                                          MfG, Dennis.

                                                                                                                          --
                                                                                                                          Signatur 1 von 3:
                                                                                                                          Meine Homepage: http://www.riehle-web.com
                                                                                                                          Tutorial: http://tutorial.riehle-web.com
                                                                                                                          1. Hello,

                                                                                                                            Perfekt ist das lange noch nicht. dazu müssten wir eine vernünftige Klasse daraus machen...

                                                                                                                            Ist aber ausreichend ;-)

                                                                                                                            Ich schlage vor, nun erst noch die notwendigen Funktionen für die bequeme Benutzung der flat_box fertig zu machen und sie dann bei Gelegenheit auf  PHP OOP 5 umzustellen. Das ist eine schöne Übung...

                                                                                                                            Die Korrekturen habe ich schon durchgeführt. Es bringt so adhoc ca. 30-40% ersparnis. Allerdings wird die drastisch ansteigen, wenn man tatsächlich konkurrierenden Betrieb hat. Es gibt dann ja auch weniger Collisions.

                                                                                                                            Ist das die Datei random.php? Schaue ich mir gleich mal an.

                                                                                                                            Nein, random.php ist schon die nächste Art der Speicherung.

                                                                                                                            Die nächste Möglichkeit der Speicherung habe ich exemplarisch auch schon fertig und Dir geschickt. Random-Access-File mit variantem Record, also im Datensatz liegt ein Array mit den Daten, aber jeder Satz für sich bleibt in seinem Slot. Das ist natürlich verdammt schnell gegenüber der Monsterarray-Variante, vergeudet aber eine Menge Platz.

                                                                                                                            Was für Platz wird vergeudet? Speicherplatz kann es ja nicht sein, da du untern sagst sehr "speichersparsam". Welcher Platz wird also (sinnlos) vergeudet?

                                                                                                                            Sorry für das Missverständnis. Es wird viel Platz auf der Platte vergeudet, aber wenig im Hauptspeicher, da immer nur der betroffene Datensatz eingelesen werden muss. Das gilt natürlich nur für klassische PC-Systeme. Aber die sind ja hauptsächlich im Einsatz im Internet.

                                                                                                                            Dafür ist die Lösung sehr Speichersparsam und kann bis zur maximalen Adressierbarkeit in Flat-Files genutzt werden. Das werden dann wahrscheinlich die berühmten 2,14 Gigabytes sein pro File. Ich weiß leider nicht, wo man das nachlesen kann.

                                                                                                                            Gigabytes? Sprachen wir nicht mal früher von 2 Megabytes? ;-)

                                                                                                                            Ja, 2MB ist die absolute Grenze für das erste Verfahren.
                                                                                                                            ca. 2GigaBytes sind dann die Grenze für das zweite Verfahren.

                                                                                                                            Liebe Grüße aus http://www.braunschweig.de

                                                                                                                            Tom

                                                                                                                            --
                                                                                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                            Nur selber lernen macht schlau
                                                                                                                            1. Hi Tom,

                                                                                                                              Ich schlage vor, nun erst noch die notwendigen Funktionen für die bequeme Benutzung der flat_box fertig zu machen und sie dann bei Gelegenheit auf  PHP OOP 5 umzustellen. Das ist eine schöne Übung...

                                                                                                                              Gut. Ist flat_box_ts06.php noch die aktuellste version?

                                                                                                                              Nein, random.php ist schon die nächste Art der Speicherung.

                                                                                                                              Wo ist das denn da jetzt groß anders? Es wird doch immer noch in einem Flatfile das serialializierte Array gespeichert.

                                                                                                                              Verstehe ich das richtig, dass du da neue Daten immer als neues Array hinten dransetz?

                                                                                                                              Ich würde mal sagen, wir sollten erst mal bei der alten Methode des Speicherns bleiben. Wenn die dann ganz fertig ist, kann man weiterreden.

                                                                                                                              Sorry für das Missverständnis. Es wird viel Platz auf der Platte vergeudet, aber wenig im Hauptspeicher, da immer nur der betroffene Datensatz eingelesen werden muss. Das gilt natürlich nur für klassische PC-Systeme. Aber die sind ja hauptsächlich im Einsatz im Internet.

                                                                                                                              Und ich denke, dass gerade das, dass viel Speicherplatz verwendet wird, nicht gerade gut ankommen wird. Wenn man überlegt, haben nur die wenigsten Leute einen eigenen Server (privatleute). Die meisten werden Webspace von 100 bis 500 MB haben.

                                                                                                                              Ich persöhnlich würde es eher bevorzugen, wenn es vielleicht auch nur 0.009 Sekunden länger dauert, dafür aber viel weniger speicherplatz verbraucht.

                                                                                                                              Ja, 2MB ist die absolute Grenze für das erste Verfahren.
                                                                                                                              ca. 2GigaBytes sind dann die Grenze für das zweite Verfahren.

                                                                                                                              Bei dem mir der wesentliche Unterschied immer noch nicht klar geworden ist :-(

                                                                                                                              MfG, Dennis.

                                                                                                                              --
                                                                                                                              [remote-signature:http://riehle-web-modellbahn.s4.cybton.com/signatur/test.php]
                                                                                                                              1. Hello,

                                                                                                                                Ja, 2MB ist die absolute Grenze für das erste Verfahren.
                                                                                                                                ca. 2GigaBytes sind dann die Grenze für das zweite Verfahren.

                                                                                                                                Bei dem mir der wesentliche Unterschied immer noch nicht klar geworden ist :-(

                                                                                                                                Das erste Verfahren serialisiert im Hauptspeicher ein Riesengroßes Array und speichert dieses komplett ab. Um es deserialisieren zu können, muss es auch komplett eingelesen werden. Da liegt dann die Grenze, da man nur einen beschränkten Hauptspeicher für seine Scripte zur Verfügung hat und das alles ja auch ausgepackt und umgestapelt werden muss. Bei ca. 1MB Filegröße ist dann eben Ende.

                                                                                                                                Da fällt mir noch eine kleine Verbesserung ein. Wir müssen den Stream-Speicher, also den String, in den wir die Datei einlesen, sofort nach der deserialisierung des Arrays wieder freigeben in der Funktion, da ja von einigen der Funktionen noch andere Arrays angelegt werden während der Lebensdauer der Funktion. Danach werden die lokalen Variablen der Funktion sowieso wieder freigegeben.

                                                                                                                                Das zweite Verfahren speichert die Daten mit fester Satzlänge auf die Platte. Felder, die man nicht ausgefüllt hat, bleiben dann "leer". Da PHP noch keine vernünftige Unterstützung für eigene Datenstructuren (Record, Struct) bietet, habe ich der Einfachheit halber für die erste Version ein Array für die satzinterne Struktur benutzt. Das hat den Vorteil, dass man variante Sätze aufbauen kann aber den Nachteil, dass es zusätzlichen Platz kostet und Felder des Satzes nicht direkt adressierbar sind. Das ist für die Suchfunktionen wesentlich.

                                                                                                                                Die dritte und letzte Variante dieses Zyklus (lineares Speichern von Daten)wird dann die Variante mit fester Satzstruktur sein, die man auch benutzen kann, um aus einer MySQL-Tabelle ein Backup zu ziehen, dass dann per ftp downloaded werden kann. Da haben ja viele eingetlich Probleme, nur sie wissen es nicht, weil sie noch nie eine Datensicherung von ihrer MySQL-DB gemacht haben. Und wenn sie es dann versuchen, stellen sie fest, dass sie an ihre DUMP-Files nicht rankommen... Diese Datei kann man dann mit gz einpacken.

                                                                                                                                Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                Tom

                                                                                                                                --
                                                                                                                                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                Nur selber lernen macht schlau
                                                                                                                                1. Hi Tom,

                                                                                                                                  Okay, das habe ich soweit verstanden. Welche Methode würdest du denn jetzt letztendlich vorschlagen?

                                                                                                                                  Überhaupt scheinen wir jetzt etwas ins Stocken geraten zu sein ;-)

                                                                                                                                  Aber soweit ich sehe, sind die Grundfunktionen ja fertig.

                                                                                                                                  Was macht deine "intelligente"[tm] Blätterfunktion?

                                                                                                                                  Soll ich mal mich daran machen, ein Script zu basteln, welches jetzt die Funktionen aus flat_box.php nutzt?

                                                                                                                                  MfG, Dennis.

                                                                                                                                  --
                                                                                                                                  Signatur 3 von 3:
                                                                                                                                  Fragen zu Formularen?
                                                                                                                                  http://tutorial.riehle-web.com hilft!
                                                                                                                                  1. Hi @all,

                                                                                                                                    jetzt geht das schon wieder los ;-)

                                                                                                                                    MfG, Dennis.

                                                                                                                                    --
                                                                                                                                    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                    Zufällige Hinweise:
                                                                                                                                    Wer die </faq/> gelesen hat, ist klger!
                                                                                                                                    ... und wei wie man Links macht ;-)
                                                                                                                                    1. jetzt geht das schon wieder los ;-)

                                                                                                                                      *gähn*

                                                                                                                                      --
                                                                                                                                      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                      Zufällige Hinweise:
                                                                                                                                      ------------------------
                                                                                                                                      Sinnvolles Zitieren: Man zitiert nur Teilsaetze des Vorposters
                                                                                                                                      auf die man sich bezieht! Nicht einfach alles.
                                                                                                                                      1. Hi,

                                                                                                                                        jetzt geht das schon wieder los ;-)

                                                                                                                                        *gähn*

                                                                                                                                        Wo gibt's eigentlich die PHP mit den Flatfile-Funktionen? Habe die vor ein paar Tagen gesehen, ist aber jetzt verschwunden.

                                                                                                                                        Gruß
                                                                                                                                        Arx

                                                                                                                                        --
                                                                                                                                        Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                        Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                        Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                        Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                        Für alle Forum-Neulinge:
                                                                                                                                        1.http://de.selfhtml.org/
                                                                                                                                        2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                        3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                        1. Hi Arx,

                                                                                                                                          Wo gibt's eigentlich die PHP mit den Flatfile-Funktionen? Habe die vor ein paar Tagen gesehen, ist aber jetzt verschwunden.

                                                                                                                                          Du meinst die auf http://selfhtml.bitwortks.de? Musst du dich an Tom wenden. Ich habe gerade festgestellt, das http://selfhtml.bitworks.de/flat_box.php existiert, eine Live Demonstatrion der Funktionen.
                                                                                                                                          KA, warum Tom das Script selbst zur Zeit nicht mehr da hat. Wird vielleicht gerade überarbeitet, kommt aber vermutlich wieder ;-)

                                                                                                                                          MfG, Dennis.

                                                                                                                                          --
                                                                                                                                          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                          Zufällige Hinweise:
                                                                                                                                          ------------------------
                                                                                                                                          > Bitte schickt mir die Antwort als E-Mail an xy@xy.de
                                                                                                                                          Wie bitte? Noe, gibbet net!
                                                                                                                                          1. Hi,

                                                                                                                                            Ich habe gerade festgestellt, das http://selfhtml.bitworks.de/flat_box.php existiert, eine Live Demonstatrion der Funktionen.
                                                                                                                                            KA, warum Tom das Script selbst zur Zeit nicht mehr da hat. Wird vielleicht gerade überarbeitet, kommt aber vermutlich wieder ;-)

                                                                                                                                            http://selfhtml.bitworks.de/speichern.php ist auch zum Speichern in Flatfiles, kann man auch downloaden. Allerdings fehlen im Download irgendwie die Zeilenumbrüche, bzw. werden falsch dargestellt. Was kann man da machen?

                                                                                                                                            Gruß
                                                                                                                                            Arx

                                                                                                                                            --
                                                                                                                                            Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                            Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                            Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                            Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                            Für alle Forum-Neulinge:
                                                                                                                                            1.http://de.selfhtml.org/
                                                                                                                                            2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                            3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                            1. Hi Arx,

                                                                                                                                              http://selfhtml.bitworks.de/speichern.php ist auch zum Speichern in Flatfiles, kann man auch downloaden. Allerdings fehlen im Download irgendwie die Zeilenumbrüche, bzw. werden falsch dargestellt. Was kann man da machen?

                                                                                                                                              Das Problem tritt auf, wenn man das Downloaded und unter Windows mit dem Editor öffnet, nicht? Gleiches Problem habe ich auch gehabt.

                                                                                                                                              Ich habe es daraufhin wie folgt gelöst: Ich habe es mit einer Software für HTML Dateien (HomeSite 5, ähnlich den Freeware Editro von Ulli Sowieso, hier bei SelfHTML) geöffnet und dieses hat es dann sofort richtig dargestellt.
                                                                                                                                              Vermutlich wird das jedes andere, etwas bessere Programm genauso machen. Probier es einfach mal aus. Du könntest es vielleicht mit MS Word öffnen und dort alles kopieren und wieder in eine Textdatei einfügen. Nennt sich SelfThinking *g*

                                                                                                                                              MfG, Dennis.

                                                                                                                                              --
                                                                                                                                              Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                              Zufällige Hinweise:
                                                                                                                                              ------------------------
                                                                                                                                              Wer die </faq/> gelesen hat, ist klueger!
                                                                                                                                              ... und wei wie man Links macht ;-)
                                                                                                                                              1. Hi,

                                                                                                                                                Allerdings fehlen im Download irgendwie die Zeilenumbrüche, bzw. werden falsch dargestellt. Was kann man da machen?

                                                                                                                                                Das Problem tritt auf, wenn man das Downloaded und unter Windows mit dem Editor öffnet, nicht?

                                                                                                                                                Ja, Microsoft Notepad macht da Probleme.

                                                                                                                                                Ich habe es daraufhin wie folgt gelöst: Ich habe es mit einer Software für HTML Dateien (HomeSite 5, ähnlich den Freeware Editro von Ulli Sowieso, hier bei SelfHTML) geöffnet und dieses hat es dann sofort richtig dargestellt.

                                                                                                                                                Ja, Ulli Meybohms HTML-Editor hat weitergeholfen. Danke für den Tipp!

                                                                                                                                                [...] Nennt sich SelfThinking *g*

                                                                                                                                                Auch *g*

                                                                                                                                                Gruß
                                                                                                                                                Arx

                                                                                                                                                --
                                                                                                                                                Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                Für alle Forum-Neulinge:
                                                                                                                                                1.http://de.selfhtml.org/
                                                                                                                                                2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                1. Hi Arx,

                                                                                                                                                  Ja, Ulli Meybohms HTML-Editor hat weitergeholfen. Danke für den Tipp!

                                                                                                                                                  Irgendwie ist der Editor baugleich mit HomeSite 5 von Macromedia. Wundert mich...

                                                                                                                                                  [...] Nennt sich SelfThinking *g*

                                                                                                                                                  Hast da ja ne Menge in deiner Signatur! ;-)

                                                                                                                                                  MfG, Dennis.

                                                                                                                                                  --
                                                                                                                                                  Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                  Zufällige Hinweise:
                                                                                                                                                  ------------------------
                                                                                                                                                  Wer die </faq/> gelesen hat, ist klueger!
                                                                                                                                                  ... und wei wie man Links macht ;-)
                                                                                                                                                  1. Hallo,

                                                                                                                                                    [...] Nennt sich SelfThinking *g*

                                                                                                                                                    Hast da ja ne Menge in deiner Signatur! ;-)

                                                                                                                                                    Falls du damit das "Do it yourSELF 'cause SELFmade is bestmade." meinst...: Das ist ein Appell an alle Anfänger, selbst HTML & Co zu lernen, anstatt irgendwo abzuschreiben und sich fertige Counter-, Gästebuch- und Foren-Scripts herunterzuladen.

                                                                                                                                                    Gruß
                                                                                                                                                    Arx

                                                                                                                                                    --
                                                                                                                                                    Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                    Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                    Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                    Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                    Für alle Forum-Neulinge:
                                                                                                                                                    1.http://de.selfhtml.org/
                                                                                                                                                    2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                    3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                    1. Hi Arx,

                                                                                                                                                      Falls du damit das "Do it yourSELF 'cause SELFmade is bestmade." meinst...: Das ist ein Appell an alle Anfänger, selbst HTML & Co zu lernen, anstatt irgendwo abzuschreiben und sich fertige Counter-, Gästebuch- und Foren-Scripts herunterzuladen.

                                                                                                                                                      Was du da in der Signatur stehen hast (alles) finde ich grundsätzlich sehr gut und auch ich habe ja so ein paar Hinweise zur FAQ (</faq/>) und so in meiner Signatur.
                                                                                                                                                      Ich meinte mehr, dass du ziemlich viel in der Signatur stehen hast. Nicht das es mich stören würde, aber bei mir hat auch schon mal einer gemeint, er müsste eine frühere Signatur von mir anmeckern. *g*

                                                                                                                                                      Kennst du das [ remote - signature : URL ] ? Ist recht praktisch, verwende ich auch. IMHO kann an da aber ä, ö, ü und ß einbinden (Alles was nicht UTF 8 ist).

                                                                                                                                                      MfG, Dennis.

                                                                                                                                                      --
                                                                                                                                                      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                      Zufällige Hinweise:
                                                                                                                                                      ------------------------
                                                                                                                                                      Sinnvolles Zitieren: Man zitiert nur Teilsaetze des Vorposters
                                                                                                                                                      auf die man sich bezieht! Nicht einfach alles.
                                                                                                                                                      1. Hallo,

                                                                                                                                                        Kennst du das [ remote - signature : URL ] ? Ist recht praktisch, verwende ich auch. IMHO kann an da aber ä, ö, ü und ß einbinden (Alles was nicht UTF 8 ist).

                                                                                                                                                        Wo ist _das_ denn dokumentiert?

                                                                                                                                                        Gruß
                                                                                                                                                        Arx

                                                                                                                                                        --
                                                                                                                                                        Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                        Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                        Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                        Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                        Für alle Forum-Neulinge:
                                                                                                                                                        1.http://de.selfhtml.org/
                                                                                                                                                        2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                        3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                        1. Hi Arx,

                                                                                                                                                          Wo ist _das_ denn dokumentiert?

                                                                                                                                                          Das steht irgendwo auf http://wwwtech.de/cforum/index.html, aber frag mich nicht wo *g*

                                                                                                                                                          Geht so:

                                                                                                                                                          [ remote - signature : http:// ]

                                                                                                                                                          Wobei _alle_ Leerzeichen zu entfernen sind.
                                                                                                                                                          Der Pfad musst nur einen Text zurückliefern, UTF 8.

                                                                                                                                                          Meine Signaturen: http://riehle-web-modellbahn.s4.cybton.com/selfforum/signatur.php
                                                                                                                                                          Bzw: http://riehle-web-modellbahn.s4.cybton.com/selfforum/signatur.php?show=all

                                                                                                                                                          MfG, Dennis.

                                                                                                                                                          --
                                                                                                                                                          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                          Zufällige Hinweise:
                                                                                                                                                          ------------------------
                                                                                                                                                          - Bitte schickt mir die Antwort als E-Mail an xy@xy.de
                                                                                                                                                          Wie bitte? Noe, gibbet net!
                                                                                                                                                          1. Hallo,

                                                                                                                                                            Wo ist _das_ denn dokumentiert?

                                                                                                                                                            Das steht irgendwo auf http://wwwtech.de/cforum/index.html, aber frag mich nicht wo *g*

                                                                                                                                                            Finde ich da nirgends. Also ein weiterer Anlass für die von mir in http://bugs.selfhtml.org/bug.php?op=show&bugid=249&pos=0 geforderte FAQ-Aktualisierung.

                                                                                                                                                            [ remote - signature : http:// ]

                                                                                                                                                            Wobei _alle_ Leerzeichen zu entfernen sind.
                                                                                                                                                            Der Pfad musst nur einen Text zurückliefern, UTF 8.

                                                                                                                                                            UTF 8, d. h., dass Umlaute und Sonderzeichen zu kodieren sind.

                                                                                                                                                            Meine Signaturen: http://riehle-web-modellbahn.s4.cybton.com/selfforum/signatur.php
                                                                                                                                                            Bzw: http://riehle-web-modellbahn.s4.cybton.com/selfforum/signatur.php?show=all

                                                                                                                                                            Schön. Noch schöner wäre der PHP-Quellcode. (als Beispiel, nicht zum Abschreiben)

                                                                                                                                                            Gruß
                                                                                                                                                            Arx

                                                                                                                                                            --
                                                                                                                                                            Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                            Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                            Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                            Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                            Für alle Forum-Neulinge:
                                                                                                                                                            1.http://de.selfhtml.org/
                                                                                                                                                            2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                            3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                            1. Hi Arx,

                                                                                                                                                              Finde ich da nirgends. Also ein weiterer Anlass für die von mir in http://bugs.selfhtml.org/bug.php?op=show&bugid=249&pos=0 geforderte FAQ-Aktualisierung.

                                                                                                                                                              Ich weiß nicht, ob das in die FAQ gehört. Meines Erachtens nicht. Schließlich können doch eh nur registrierte Mitglieder eine Signatur anlegen, also auch nur diese von remote-signature profitieren.

                                                                                                                                                              Auch das zweite Feature, was dort aufgelistet ist, mit dem $name, funktioniert glaube ich nur bei registrierten User (bei nicht registrierten machts ja auch gar keinen Sinn), und letzteres sollte vielleicht gar nicht so unbedingt an die Öffentlichkeit gelangen.

                                                                                                                                                              Kurz und gut, hier steht es: http://wwwtech.de/cforum/blogg/archives/2004_02.html#000002

                                                                                                                                                              Das mit dem Namensplatzhalter ist aber in dem oben genannten Link nicht mehr ganz aktuell, da steht hier im 5ten Absatz das aktuelle mit $vname: http://wwwtech.de/cforum/blogg/archives/2004_06.html

                                                                                                                                                              Schön. Noch schöner wäre der PHP-Quellcode. (als Beispiel, nicht zum Abschreiben)

                                                                                                                                                              Den Code kannst du gerne haben, und ihn auch gerne einfach so verwenden. Hab ich absolut nichts dagegen. Ich guck gleich mal, ob du ne E-Mail Adresse im Posting angegeben hast, wenn ja schick ich dir den Code zu.

                                                                                                                                                              MfG, Dennis.

                                                                                                                                                              --
                                                                                                                                                              Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                              Zufällige Hinweise:
                                                                                                                                                              ------------------------
                                                                                                                                                              Sinnvolles Zitieren: Man zitiert nur Teilsaetze des Vorposters
                                                                                                                                                              auf die man sich bezieht! Nicht einfach alles.
                                                                                                                                                              1. Hi Arx,

                                                                                                                                                                Ich sagte:
                                                                                                                                                                "Der Pfad musst nur einen Text zurückliefern, UTF 8."

                                                                                                                                                                Worauf du fragtest:
                                                                                                                                                                "UTF 8, d. h., dass Umlaute und Sonderzeichen zu kodieren sind."

                                                                                                                                                                Da hatte ich noch gerade vergessen drauf einzugehen.

                                                                                                                                                                Im Prinzip richtig, der Text sollte keine ä, ö, ü, ß und so enthalten. Wenn er welche enthält, werden diese einfach "entfernt" *g*.

                                                                                                                                                                Leider funktioniert es nicht &auml; und so zu schreiben, da die Forums Software das ja so stehen lässt und nicht wieder zu ä zurück verwandelt! Somit musst du ä also einfach als ae schreiben.

                                                                                                                                                                Sollten wir Christian vielleicht auch mal drauf ansprechen.

                                                                                                                                                                Schön. Noch schöner wäre der PHP-Quellcode. (als Beispiel, nicht zum Abschreiben)

                                                                                                                                                                Mach ich, wenn du mir deine E-Mail Adresse gibst.

                                                                                                                                                                MfG, Dennis.

                                                                                                                                                                --
                                                                                                                                                                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                Zufällige Hinweise:
                                                                                                                                                                ------------------------
                                                                                                                                                                Probleme mit Formularen?
                                                                                                                                                                http://tutorial.riehle-web.com hilft weiter.
                                                                                                                                                                1. Hallo,

                                                                                                                                                                  Schön. Noch schöner wäre der PHP-Quellcode. (als Beispiel, nicht zum Abschreiben)

                                                                                                                                                                  Mach ich, wenn du mir deine E-Mail Adresse gibst.

                                                                                                                                                                  arx (ätt) gmx (dott) net

                                                                                                                                                                  Gruß
                                                                                                                                                                  Arx

                                                                                                                                                                  --
                                                                                                                                                                  Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                  Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                  Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                  Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                  Für alle Forum-Neulinge:
                                                                                                                                                                  1.http://de.selfhtml.org/
                                                                                                                                                                  2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                  3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                              2. Hallo,

                                                                                                                                                                Kurz und gut, hier steht es: http://wwwtech.de/cforum/blogg/archives/2004_02.html#000002

                                                                                                                                                                Interessant. Ich verstehe nur nicht, was Christian mit "eigener Client" in Bezug auf die Kategorien meint. Verstehst du, was er da schreibt?

                                                                                                                                                                Gruß
                                                                                                                                                                Arx

                                                                                                                                                                --
                                                                                                                                                                Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                Für alle Forum-Neulinge:
                                                                                                                                                                1.http://de.selfhtml.org/
                                                                                                                                                                2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                1. Hi Arx,

                                                                                                                                                                  Kurz und gut, hier steht es: http://wwwtech.de/cforum/blogg/archives/2004_02.html#000002

                                                                                                                                                                  Interessant. Ich verstehe nur nicht, was Christian mit "eigener Client" in Bezug auf die Kategorien meint. Verstehst du, was er da schreibt?

                                                                                                                                                                  Ich habs noch nicht ausprobiert, aber ich glaube er meint folgendes:

                                                                                                                                                                  Erstelle dir selbst ein Formular, den action Pfad müsstest du aus der Original ForumsDatei kriegen. Dann tutst du dort die gleichen Felder rein wie bei SelfHTML bei "Neue Nachricht schreiben", nur das Kategorie ein Textfeld ist. Dort gibst du halt irgendetwas ein und schon hast du im Prinzip eine neue Kategorie erfunden (weiß allerdings nicht, ob andere dir auch in der Kategorie antworten können, oder ob die zum Wählen aufgefordert werden.)

                                                                                                                                                                  MfG, Dennis.

                                                                                                                                                                  --
                                                                                                                                                                  Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                  Zufällige Hinweise:
                                                                                                                                                                  ------------------------
                                                                                                                                                                  Fuer die Neulinge: Auf viele Fragen findet man eine
                                                                                                                                                                  Antwort im </archiv/>, das man auch durchsuchen kann
                                                                                                                                                                  http://suche.de.selfhtml.org/
                                                                                                                                                                  1. Hallo,

                                                                                                                                                                    Erstelle dir selbst ein Formular, den action Pfad müsstest du aus der Original ForumsDatei kriegen. Dann tutst du dort die gleichen Felder rein wie bei SelfHTML bei "Neue Nachricht schreiben", nur das Kategorie ein Textfeld ist. Dort gibst du halt irgendetwas ein und schon hast du im Prinzip eine neue Kategorie erfunden (weiß allerdings nicht, ob andere dir auch in der Kategorie antworten können, oder ob die zum Wählen aufgefordert werden.)

                                                                                                                                                                    Da bräuchte man sich also bloß eine lokale Kopie der Seite "Neue Nachricht verfassen" anzulegen, die man dann wie folgt manipuliert:

                                                                                                                                                                    • die action für das form auf "http://forum.de.selfhtml.org/cgi-bin/user/fo_post" setzen
                                                                                                                                                                    • neben dem Auswahlfeld für die Kategorien ein Textfeld einfügen, das als name-Attribut den derzeitigen Namen des des Auswahlfelds erhält
                                                                                                                                                                    • dem Auswahlfeld einen in der Forumssoftware nicht verwendeten Namen geben, z. B. "skhagsdgksdg"
                                                                                                                                                                    • dem Auswahlfeld einen onChange-Eventhandler geben, der die Auswahl automatisch in das neue Textfeld überträgt

                                                                                                                                                                    Danach kann der Nutzer wahlweise eine vorgegebene Kategorie wählen oder selbst eine eintippen.

                                                                                                                                                                    Ich weiß allerdings nicht - du sprachst es bereits an - , was passiert, wenn ein Nutzer auf eine Nachricht mit einer benutzerdefinierten Kategorie antworten will. Denn normalerweise wird die Kategorie des Ausgangsbeitrags für eine Antwort weiterverwendet - und da liegt das Problem: Der antwortende Nutzer bekommt nur das Standardauswahlfeld, höchstwahrscheinlich nur mit den vorgegebenen Optionen.

                                                                                                                                                                    Gruß
                                                                                                                                                                    Arx

                                                                                                                                                                    --
                                                                                                                                                                    Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                    Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                    Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                    Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                    Für alle Forum-Neulinge:
                                                                                                                                                                    1.http://de.selfhtml.org/
                                                                                                                                                                    2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                    3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                    1. Hallo Dennis,

                                                                                                                                                                      was ich noch vergessen habe:

                                                                                                                                                                      Danke für die Mail!

                                                                                                                                                                      :-)
                                                                                                                                                                      Arx

                                                                                                                                                                      --
                                                                                                                                                                      Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                      Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                      Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                      Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                      Für alle Forum-Neulinge:
                                                                                                                                                                      1.http://de.selfhtml.org/
                                                                                                                                                                      2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                      3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                      1. Hi Arx,

                                                                                                                                                                        Danke für die Mail! :-)

                                                                                                                                                                        Bitte, ich hatte da am Abend leider keine Zeit mehr noch groß Text zu zu schreiben. Hast du alles verstanden? Ich weiß ja nicht, wie viel du mit PHP machst. Bei Fragen, frag einfach.

                                                                                                                                                                        Auch wenn du vielleicht die Funktionsweise nicht ganz verstanden haben solltest, die Bedienung ist ganz einfach. Und vor allem kannst du beliebig viele weitere Signaturen hinzufügen, oben dran, das funktioniert immer, da das dynamisch aufgebaut ist. ;-)

                                                                                                                                                                        MfG, Dennis.

                                                                                                                                                                        --
                                                                                                                                                                        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                        Zufällige Hinweise:
                                                                                                                                                                        ------------------------
                                                                                                                                                                        - Bitte schickt mir die Antwort als E-Mail an xy@xy.de
                                                                                                                                                                        Wie bitte? Noe, gibbet net!
                                                                                                                                                                        1. Hallo,

                                                                                                                                                                          Danke für die Mail! :-)

                                                                                                                                                                          Bitte, ich hatte da am Abend leider keine Zeit mehr noch groß Text zu zu schreiben. Hast du alles verstanden? Ich weiß ja nicht, wie viel du mit PHP machst. Bei Fragen, frag einfach.

                                                                                                                                                                          Nein nein, leuchtet mir alles ein. Du hast ja auch ordentlich kommentiert. Den Rest habe ich mir erschlossen oder - im Falle von srand((double)microtime()*1000000); - in der Referenz nachgeschlagen.

                                                                                                                                                                          Auch wenn du vielleicht die Funktionsweise nicht ganz verstanden haben solltest, die Bedienung ist ganz einfach. Und vor allem kannst du beliebig viele weitere Signaturen hinzufügen, oben dran, das funktioniert immer, da das dynamisch aufgebaut ist. ;-)

                                                                                                                                                                          Schön. Werde mir da bei Gelegenheit mal was mit basteln.

                                                                                                                                                                          Gruß
                                                                                                                                                                          Arx

                                                                                                                                                                          --
                                                                                                                                                                          Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                          Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                          Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                          Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                          Für alle Forum-Neulinge:
                                                                                                                                                                          1.http://de.selfhtml.org/
                                                                                                                                                                          2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                          3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                          1. Hi Arx,

                                                                                                                                                                            Bitte, ich hatte da am Abend leider keine Zeit mehr noch groß Text zu zu schreiben. Hast du alles verstanden? Ich weiß ja nicht, wie viel du mit PHP machst. Bei Fragen, frag einfach.

                                                                                                                                                                            Nein nein, leuchtet mir alles ein. Du hast ja auch ordentlich kommentiert. Den Rest habe ich mir erschlossen oder - im Falle von srand((double)microtime()*1000000); - in der Referenz nachgeschlagen.

                                                                                                                                                                            Joa, hab mir da noch Mühe gegeben, so ein paar Kommentare reinzumurksen. *gg*

                                                                                                                                                                            Auch wenn du vielleicht die Funktionsweise nicht ganz verstanden haben solltest, die Bedienung ist ganz einfach. Und vor allem kannst du beliebig viele weitere Signaturen hinzufügen, oben dran, das funktioniert immer, da das dynamisch aufgebaut ist. ;-)

                                                                                                                                                                            Schön. Werde mir da bei Gelegenheit mal was mit basteln.

                                                                                                                                                                            Hm, vielleicht könnte ich das Script auch mal online stellen. Eventuell bei SelfHTML (was die wohl eher nicht interessiert) oder ansonsten kommts auf meinen Server.

                                                                                                                                                                            MfG, Dennis.

                                                                                                                                                                            --
                                                                                                                                                                            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                            Zufällige Hinweise:
                                                                                                                                                                            ------------------------
                                                                                                                                                                            Fuer die Neulinge: Auf viele Fragen findet man eine
                                                                                                                                                                            Antwort im </archiv/>, das man auch durchsuchen kann
                                                                                                                                                                            http://suche.de.selfhtml.org/
                                                                                                                                                                            1. Hallo,

                                                                                                                                                                              Bitte, ich hatte da am Abend leider keine Zeit mehr noch groß Text zu zu schreiben. Hast du alles verstanden? Ich weiß ja nicht, wie viel du mit PHP machst. Bei Fragen, frag einfach.

                                                                                                                                                                              Nein nein, leuchtet mir alles ein. Du hast ja auch ordentlich kommentiert. Den Rest habe ich mir erschlossen oder - im Falle von srand((double)microtime()*1000000); - in der Referenz nachgeschlagen.

                                                                                                                                                                              Joa, hab mir da noch Mühe gegeben, so ein paar Kommentare reinzumurksen. *gg*

                                                                                                                                                                              Womit mir direkt eine Idee für eine Erweiterung des Scripts kommt: Ein mini-mini-mini-CMS, direkt in die Scriptdatei integriert, über das sich Einträge, die dann in einem Flatfile gespeichert werden, komfortabel bearbeiten, hinzufügen und löschen lassen.

                                                                                                                                                                              Gruß
                                                                                                                                                                              Arx

                                                                                                                                                                              --
                                                                                                                                                                              Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                              Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                              Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                              Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                              Für alle Forum-Neulinge:
                                                                                                                                                                              1.http://de.selfhtml.org/
                                                                                                                                                                              2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                              3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                              1. Hi Arx,

                                                                                                                                                                                Joa, hab mir da noch Mühe gegeben, so ein paar Kommentare reinzumurksen. *gg*

                                                                                                                                                                                Womit mir direkt eine Idee für eine Erweiterung des Scripts kommt: Ein mini-mini-mini-CMS, direkt in die Scriptdatei integriert, über das sich Einträge, die dann in einem Flatfile gespeichert werden, komfortabel bearbeiten, hinzufügen und löschen lassen.

                                                                                                                                                                                Könnte man allerdings machen. Ein Admin Zentrum für Signaturen *g* Was es nicht alles gibt. Na ja, ich bin mir nicht so sicher, ob sich das bei so nem kleine Projekt lohnt.

                                                                                                                                                                                Aber die Idee ist trotzdem gut. Da könnte man direkt noch was reinbauen, was ä in ae .... und ß in s oder ss umwandelt.

                                                                                                                                                                                MfG, Dennis.

                                                                                                                                                                                --
                                                                                                                                                                                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                Zufällige Hinweise:
                                                                                                                                                                                ------------------------
                                                                                                                                                                                Probleme mit Formularen?
                                                                                                                                                                                http://tutorial.riehle-web.com hilft weiter.
                                                                                                                                                                                1. Hallo,

                                                                                                                                                                                  Womit mir direkt eine Idee für eine Erweiterung des Scripts kommt: Ein mini-mini-mini-CMS, direkt in die Scriptdatei integriert, über das sich Einträge, die dann in einem Flatfile gespeichert werden, komfortabel bearbeiten, hinzufügen und löschen lassen.

                                                                                                                                                                                  Könnte man allerdings machen. Ein Admin Zentrum für Signaturen *g* Was es nicht alles gibt. Na ja, ich bin mir nicht so sicher, ob sich das bei so nem kleine Projekt lohnt.

                                                                                                                                                                                  Könnte man ja dann als kleinen Service für alle Forumer anbieten: Jeder erstellt sich seine Signaturen, die dann zentral gespeichert werden, und bindet sie mit entsprechendem persönlichen Abruflink ins Forum ein.

                                                                                                                                                                                  Aber die Idee ist trotzdem gut. Da könnte man direkt noch was reinbauen, was ä in ae .... und ß in s oder ss umwandelt.

                                                                                                                                                                                  Das sollte doch mit regulären Ausdrücken eigentlich kein Problem sein...(Oder doch?)

                                                                                                                                                                                  Gruß
                                                                                                                                                                                  Arx

                                                                                                                                                                                  --
                                                                                                                                                                                  Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                                  Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                                  Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                                  Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                                  Für alle Forum-Neulinge:
                                                                                                                                                                                  1.http://de.selfhtml.org/
                                                                                                                                                                                  2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                                  3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                                  1. Hi Arx,

                                                                                                                                                                                    Könnte man ja dann als kleinen Service für alle Forumer anbieten: Jeder erstellt sich seine Signaturen, die dann zentral gespeichert werden, und bindet sie mit entsprechendem persönlichen Abruflink ins Forum ein.

                                                                                                                                                                                    Gute Idee! Allerdings weiß ich nicht genau, wie viele registrierte User es gibt, und ob dort Flatfiles noch ausreichen (die Peformaance ist besser als man denkte, haben Tom und ich herrausgefunden) oder ob man MySQL braucht.

                                                                                                                                                                                    Aber die Idee ist trotzdem gut. Da könnte man direkt noch was reinbauen, was ä in ae .... und ß in s oder ss umwandelt.

                                                                                                                                                                                    Das sollte doch mit regulären Ausdrücken eigentlich kein Problem sein...(Oder doch?)

                                                                                                                                                                                    Da dürfte eigentlich auch ein einfaches str_replace() reichen. Am besten wäre natürlich, wenn in der nächsten Forumssoftware man direkt ä, ö, ü reinschreiben kann.

                                                                                                                                                                                    MfG, Dennis.

                                                                                                                                                                                    --
                                                                                                                                                                                    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                    Zufällige Hinweise:
                                                                                                                                                                                    ------------------------
                                                                                                                                                                                    Meine Homepage: http://www.riehle-web.com
                                                                                                                                                                                    Tutorial: http://tutorial.riehle-web.com
                                                                                                                                                                                    1. Hallo,

                                                                                                                                                                                      Allerdings weiß ich nicht genau, wie viele registrierte User es gibt, und ob dort Flatfiles noch ausreichen (die Peformaance ist besser als man denkte, haben Tom und ich herrausgefunden) oder ob man MySQL braucht.

                                                                                                                                                                                      Auf http://stats.selfhtml.org/webalizer/forum.de.selfhtml.org/user_200407.html findet sich eine Nutzerliste mit derzeit 115 Nutzern (im Juni waren es 146 Nutzer). Ich weiß allerdings nicht, ob das nur die registrierten oder alle Nutzer sind.

                                                                                                                                                                                      Gruß
                                                                                                                                                                                      Arx

                                                                                                                                                                                      --
                                                                                                                                                                                      Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                                      Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                                      Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                                      Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                                      Für alle Forum-Neulinge:
                                                                                                                                                                                      1.http://de.selfhtml.org/
                                                                                                                                                                                      2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                                      3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                                      1. Hi Arx,

                                                                                                                                                                                        Allerdings weiß ich nicht genau, wie viele registrierte User es gibt, und ob dort Flatfiles noch ausreichen (die Peformaance ist besser als man denkte, haben Tom und ich herrausgefunden) oder ob man MySQL braucht.

                                                                                                                                                                                        Auf http://stats.selfhtml.org/webalizer/forum.de.selfhtml.org/user_200407.html findet sich eine Nutzerliste mit derzeit 115 Nutzern (im Juni waren es 146 Nutzer). Ich weiß allerdings nicht, ob das nur die registrierten oder alle Nutzer sind.

                                                                                                                                                                                        Also irgendwie blick ich da sowieso nicht durch! Was sollen das für Statistiken sein? Und irgendwas kann da nicht stimmen. Oder warum tauche ich da nicht auf der Liste auf? Und ein "Mia", von dem gerade mal jetzt 4 Postings im der Forumshauptdatei sind, ist im Juli ganz oben auf der Liste?

                                                                                                                                                                                        Was genau wird dort gezählt?

                                                                                                                                                                                        MfG, Dennis.

                                                                                                                                                                                        --
                                                                                                                                                                                        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                        Zufällige Hinweise:
                                                                                                                                                                                        ------------------------
                                                                                                                                                                                        Meine Homepage: http://www.riehle-web.com
                                                                                                                                                                                        Tutorial: http://tutorial.riehle-web.com
                                                                                                                                                                                        1. Hallo,

                                                                                                                                                                                          Auf http://stats.selfhtml.org/webalizer/forum.de.selfhtml.org/user_200407.html findet sich eine Nutzerliste mit derzeit 115 Nutzern (im Juni waren es 146 Nutzer). Ich weiß allerdings nicht, ob das nur die registrierten oder alle Nutzer sind.

                                                                                                                                                                                          Also irgendwie blick ich da sowieso nicht durch! Was sollen das für Statistiken sein? Und irgendwas kann da nicht stimmen. Oder warum tauche ich da nicht auf der Liste auf? Und ein "Mia", von dem gerade mal jetzt 4 Postings im der Forumshauptdatei sind, ist im Juli ganz oben auf der Liste?

                                                                                                                                                                                          Was genau wird dort gezählt?

                                                                                                                                                                                          AFAIK folgendes:
                                                                                                                                                                                          "Hits": Sooft hast du eine Datei vom Server angefordert, ein Formular abgeschickt etc.
                                                                                                                                                                                          "Files": steht irgendwie immer die gleiche Zahl wie bei "Hits", ist wohl so was ähnliches
                                                                                                                                                                                          "KBytes": vermutlich der Traffic, den du verursachst
                                                                                                                                                                                          "Visits": wie oft man sich angemeldet hat, vermute ich mal
                                                                                                                                                                                          "Username": dein Anmeldename, nicht der Name, unter dem deine Postings im Forum auftauchen. -> Folglich umfasst die Liste alle registrierten Nutzer.

                                                                                                                                                                                          D. h. auch, dass du nicht wissen kannst, wer "Mia" ist. Rangfolge ist nach "Hits".

                                                                                                                                                                                          Gruß
                                                                                                                                                                                          Arx

                                                                                                                                                                                          --
                                                                                                                                                                                          Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                                          Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                                          Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                                          Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                                          Für alle Forum-Neulinge:
                                                                                                                                                                                          1.http://de.selfhtml.org/
                                                                                                                                                                                          2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                                          3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                                          1. Hi Arx,

                                                                                                                                                                                            "Username": dein Anmeldename, nicht der Name, unter dem deine Postings im Forum auftauchen. -> Folglich umfasst die Liste alle registrierten Nutzer.

                                                                                                                                                                                            Ach so, dass kann natürlich sein! Mein Username ist nämlich "themaster1". Bin ich ja sogar relativ weit oben. Aber nur einmal angemeldet? Na ja, doch, stimmt auch, ich hab diesen Monat den PC bis jetzt Abens immer in den Ruhezustand gesetzt (Windows), und da war das Fenster mit dem Forum immer noch geöffnet, sodass ich mich nie wieder neu anmelden musste.

                                                                                                                                                                                            Gut, also können wir so zusammenfassen: Es gibt an die 160 registrierte User im SelfHTML Forum (die, die diesen Monat noch fehlen, waren wahrscheinlich nur noch nicht da in diesem Monat).

                                                                                                                                                                                            OK, jeder so ... hm, sagen wir maximal 5 Signaturen? Eine Signatur maximal 100 Zeichen lang (oder weniger?), dann wären dass 100 x 5 x 160 Bytes, ergibt 80.000 Bytes, das wären 80 Kilobyte? Stimmt die Rechnung?

                                                                                                                                                                                            Das könnte man bequem mit Flatfiles machen. Bis zu 1 MB ist da noch alles drin.

                                                                                                                                                                                            Ich lass mir das nochmal durch den Kopf gehen...

                                                                                                                                                                                            MfG, Dennis.

                                                                                                                                                                                            --
                                                                                                                                                                                            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                            Zufällige Hinweise:
                                                                                                                                                                                            ------------------------
                                                                                                                                                                                            Meine Homepage: http://www.riehle-web.com
                                                                                                                                                                                            Tutorial: http://tutorial.riehle-web.com
                                                                                                                                                                                            1. Hello,

                                                                                                                                                                                              [...]

                                                                                                                                                                                              Das könnte man bequem mit Flatfiles machen. Bis zu 1 MB ist da noch alles drin.

                                                                                                                                                                                              bis zu ein MB könnte man das bequem mit der Array-Methode und Flat-Files machen. Die Grenze liegt allerdings dabei erstmal nur im Preis der ladezeit und Speicherzeit.

                                                                                                                                                                                              Bis zu 2 (ggf. auch 4 ) GigaByte kann man das dann mit einem record-direktadressierbaren Flatfile auch noch erledigen. Das ist die zweite von mir vorgeschlagene Methode.

                                                                                                                                                                                              Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                                                                              Tom

                                                                                                                                                                                              --
                                                                                                                                                                                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                                                                              Nur selber lernen macht schlau
                                                                                                                                                                                              1. Hi Tom,

                                                                                                                                                                                                Bis zu 2 (ggf. auch 4 ) GigaByte kann man das dann mit einem record-direktadressierbaren Flatfile auch noch erledigen. Das ist die zweite von mir vorgeschlagene Methode.

                                                                                                                                                                                                Aber ich habe, sorry, diese Methode immer noch nicht richtig verstanden.

                                                                                                                                                                                                Gehe ich da jetzt recht in der Annahme, dass bei jeder Änderung im Array, das neue Array einfach hinter das Alte geschrieben wird, und das ganze nicht gelöscht wird?

                                                                                                                                                                                                Und beim Einlesen der Daten, wird nur das letzte Array wieder eingelesen? Ich habe es noch nicht durchblickt, wie du durch diese Konstruktion bei get_rec() herrausfindest, wo das letzte Array liegt - es liegt doch immer ganz am Ende, nicht?

                                                                                                                                                                                                Aber mal noch im Allgemeinen zu deine rneuen Methode:

                                                                                                                                                                                                Du sagtest, diese Methode sei schneller, ist sie wirklich so viel schneller, das es sich lohn in einem so weit vorteschrittenen Projekt noch umzusteigen?

                                                                                                                                                                                                Und, die Methode wäre nur etwas für Leute, die verdammt viel Speicherplatz haben! Allein aus dem Grund sollte man die alte Methode nicht verwefen - die meisten Leute mit privater oder vielleicht auch kleiner kommerzieller Homepage haben wohl so 100 bis 250 MB Webspace, doof, wenn die Datei schnell 5 MB groß ist.

                                                                                                                                                                                                Und wer dann noch ein News System, ein Gästebuch und Kommentare zu Texten haben will....

                                                                                                                                                                                                MfG, Dennis.

                                                                                                                                                                                                --
                                                                                                                                                                                                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                                Zufällige Hinweise:
                                                                                                                                                                                                ------------------------
                                                                                                                                                                                                Probleme mit Formularen?
                                                                                                                                                                                                http://tutorial.riehle-web.com hilft weiter.
                                                                                                                                                                                                1. Hello Dennis,

                                                                                                                                                                                                  Bis zu 2 (ggf. auch 4 ) GigaByte kann man das dann mit einem record-direktadressierbaren Flatfile auch noch erledigen. Das ist die zweite von mir vorgeschlagene Methode.

                                                                                                                                                                                                  Aber ich habe, sorry, diese Methode immer noch nicht richtig verstanden.

                                                                                                                                                                                                  Das macht ja nix. Es ist doch Bestandteil dieses Threads und dann später des Artikels die unterschiedlichen Methoden der Speicherung darzustellen und zu diskutieren. Es wird auch keine allgemeingültige richtige[tm] Methode geben. Das muss man von Fall zu Fall entscheiden, was man braucht.

                                                                                                                                                                                                  Grundsätzlich sind verschiedene Methoden möglich (nur Teilmenge...):

                                                                                                                                                                                                  • Monolithische Speicherung (unsere Arraymethode)
                                                                                                                                                                                                  • Textdatei (CSV & Co.)
                                                                                                                                                                                                  • Satzweise Speicherung mit wahlfreiem Zugriff aber varianter Satzstruktur (unsere 2. Methode)
                                                                                                                                                                                                  • Satzweise Speicherung mit wahlfreiem Zugriff und fester Satzstruktur
                                                                                                                                                                                                  • Satzweise Speicherung als direktgestreute Datei (Für den Primärschlüssel wird ein leerer
                                                                                                                                                                                                        Satz angelegt, egal ob er benötigt wird oder nicht) Auch mit varianter oder statischer
                                                                                                                                                                                                        Satzstruktur möglich
                                                                                                                                                                                                  • Seitenweise Speicherung mit harmonisierten Seiten-/Satzgrenzen  --> Baumstrukturen

                                                                                                                                                                                                  Gehe ich da jetzt recht in der Annahme, dass bei jeder Änderung im Array, das neue Array einfach hinter das Alte geschrieben wird, und das ganze nicht gelöscht wird?

                                                                                                                                                                                                  Nein. Es wird der Satzzeiger auf den Anfang des gelesenen Arrays positioniert und dann wird das alte Array (der alte Datensatz) mit dem neuen übverschrieben. Dazu müssen immer genausoviel Bytes geschreiben werden, wie der Satz groß ist. Dadurch kann man den Beginn eines Datensatzes (die Lage auf der Festplatte) nach der Formel

                                                                                                                                                                                                  $offset = ($satznummer-1)*$satzlaenge

                                                                                                                                                                                                  berechnen. Der erste Datensatz hat die Nummer 1. Die Nummern beziehen sich nur auf die physikalische Position, nicht auf die logische.

                                                                                                                                                                                                  Und beim Einlesen der Daten, wird nur das letzte Array wieder eingelesen? Ich habe es noch nicht durchblickt, wie du durch diese Konstruktion bei get_rec() herrausfindest, wo das letzte Array liegt - es liegt doch immer ganz am Ende, nicht?

                                                                                                                                                                                                  Ich übergebe die Satznummer und die Satzgröße an die Funktion.

                                                                                                                                                                                                  Aber mal noch im Allgemeinen zu deine rneuen Methode:

                                                                                                                                                                                                  Du sagtest, diese Methode sei schneller, ist sie wirklich so viel schneller, das es sich lohn in einem so weit vorteschrittenen Projekt noch umzusteigen?

                                                                                                                                                                                                  Sie ist im Prinzip konstant schnell, wenn man weiß, welchen Satz man haben will, unabhängig von der bereits Anzahl der bereits gespeicherten Sätze. Man liest außerdem immer nur den benötigten Datensatz ein, das spart eben enorm Arbeitsspeicher. Alles andere erledigt bereits das Filesystem. Das ist klassisch gewachsen und gilt in dieser klaren Form nur für DOS-Systeme (Disk orientied Systems) also nicht für Einspeichermodelle, wie z.B. OS400 auf AS400 oder ähnlich. PC-Linux ist auch ein DOS *gg*

                                                                                                                                                                                                  Und, die Methode wäre nur etwas für Leute, die verdammt viel Speicherplatz haben! Allein aus dem Grund sollte man die alte Methode nicht verwefen - die meisten Leute mit privater oder vielleicht auch kleiner kommerzieller Homepage haben wohl so 100 bis 250 MB Webspace, doof, wenn die Datei schnell 5 MB groß ist.

                                                                                                                                                                                                  Verwerfen wollen wir da gar nichts, sondern nach Möglichkeit alle methoden nach und nach vorstellen und erklären, sowie Basis- und Wrapper-Funktionen dafür erstellen, die die Verwendung in PHP-Scripten einfach und bequem macht.

                                                                                                                                                                                                  Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                                                                                  Tom

                                                                                                                                                                                                  --
                                                                                                                                                                                                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                                                                                  Nur selber lernen macht schlau
                                                                                                                                                                                        2. Hallo ihr beiden,

                                                                                                                                                                                          http://stats.selfhtml.org/webalizer/forum.de.selfhtml.org/user_200407.html findet sich eine Nutzerliste mit derzeit 115 Nutzern (im Juni waren es 146 Nutzer). Ich weiß allerdings nicht, ob das nur die registrierten oder alle Nutzer sind.

                                                                                                                                                                                          Das sind die registrierten User, die sich im Juli eingeloggt haben.

                                                                                                                                                                                          »»Oder warum tauche ich da nicht auf der Liste auf?

                                                                                                                                                                                          Hast du dich denn registiert und benutzt du auch die /my/ ansicht?

                                                                                                                                                                                          Wie auch immer: ich bitte euch den Thread zu beenden - weitere Threaddrifts sind nicht gut und eigentlich könntet ihr all das auch im Chat besprechen. ;-)

                                                                                                                                                                                          Grüße
                                                                                                                                                                                          Thomas

                                                                                                                                                                                          1. Hi Thomas,

                                                                                                                                                                                            Hast du dich denn registiert und benutzt du auch die /my/ ansicht?

                                                                                                                                                                                            Zu beidem Ja, Problem hat sich aber schon gelöst. Ich dachte man würde unter dem Posting Namen auftauchen, aber man taucht unter dem Usernamen auf.

                                                                                                                                                                                            Wie auch immer: ich bitte euch den Thread zu beenden - weitere Threaddrifts sind nicht gut und eigentlich könntet ihr all das auch im Chat besprechen. ;-)

                                                                                                                                                                                            Hm, dem würde ich jetzt nur bedingt zustimmen. Immerhin unterhalten Tom (der letzten Tage wegen Problem beim Internetzugang nicht da war) und ich uns schon seit geraumer Zeit und immern noch über einen Feature Artikel.

                                                                                                                                                                                            Arx und ich besprechen gerade ein Feature, welches man SelfHTML Besucher, die registriert sind zur Verfügung stellen sollte.

                                                                                                                                                                                            Also warum drängst du so sehr darauf, den Thread zu schließen? ;-)
                                                                                                                                                                                            Es gab hier sicherlich schon einige Threaddrifts, aber jetzt haben wir im Prinzip das gefunde, was zu diskutieren ist.

                                                                                                                                                                                            MfG, Dennis.

                                                                                                                                                                                            --
                                                                                                                                                                                            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                            Zufällige Hinweise:
                                                                                                                                                                                            ------------------------
                                                                                                                                                                                            Wer die </faq/> gelesen hat, ist klueger!
                                                                                                                                                                                            ... und wei wie man Links macht ;-)
                                                                                                                                                                                            1. Hallo,

                                                                                                                                                                                              Also warum drängst du so sehr darauf, den Thread zu schließen? ;-)
                                                                                                                                                                                              Es gab hier sicherlich schon einige Threaddrifts, aber jetzt haben wir im Prinzip das gefunde, was zu diskutieren ist.

                                                                                                                                                                                              Es geht mir gar nicht darum, dass ihr nicht Ideen, Meinungen und Ansichten austauschen sollt. Meine Bitte hat(te) rein praktische Gründe: in diesem Thrrad gibt es schon den 4. Threaddrift, was dazu beiträgt, dass die "gedrifteten" Themen im Archiv schwerer zu finden sein werden bzw. man wird den Drift dort schwerer nachvollziehen können, da man die Postings untereinander aufgelistet bekommt. Deshalb wäre z.B. die Diskussion um die Signatur in einem eigenen Thread besser aufgehoben gewesen.

                                                                                                                                                                                              Grüße
                                                                                                                                                                                              Thomas

                                                                                                                                                                                              1. Hi Thomas,

                                                                                                                                                                                                Es geht mir gar nicht darum, dass ihr nicht Ideen, Meinungen und Ansichten austauschen sollt. Meine Bitte hat(te) rein praktische Gründe: in diesem Thrrad gibt es schon den 4. Threaddrift, was dazu beiträgt, dass die "gedrifteten" Themen im Archiv schwerer zu finden sein werden bzw. man wird den Drift dort schwerer nachvollziehen können, da man die Postings untereinander aufgelistet bekommt. Deshalb wäre z.B. die Diskussion um die Signatur in einem eigenen Thread besser aufgehoben gewesen.

                                                                                                                                                                                                Ok, da magst du natürlich Recht haben.

                                                                                                                                                                                                Also, @Arx: Wir stoppen hier die Diskussion über Signaturen, vor allem dann, wenn wir da was draus machen wollen bei SelfHTML, wird das noch ein längerer Thread. Ich denke da mal noch etwas drüber nach, meine E-Mail Adresse hast du ja.

                                                                                                                                                                                                MfG, Dennis.

                                                                                                                                                                                                --
                                                                                                                                                                                                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                                Zufällige Hinweise:
                                                                                                                                                                                                ------------------------
                                                                                                                                                                                                - Bitte schickt mir die Antwort als E-Mail an xy@xy.de
                                                                                                                                                                                                Wie bitte? Noe, gibbet net!
                                                                                                                                                                    2. Hi Arx,

                                                                                                                                                                      Da bräuchte man sich also bloß eine lokale Kopie der Seite "Neue Nachricht verfassen" anzulegen, die man dann wie folgt manipuliert:

                                                                                                                                                                      • die action für das form auf "http://forum.de.selfhtml.org/cgi-bin/user/fo_post" setzen

                                                                                                                                                                      Was musst du da manipulieren? Das ist doch in einer Kopie schon so.

                                                                                                                                                                      • neben dem Auswahlfeld für die Kategorien ein Textfeld einfügen, das als name-Attribut den derzeitigen Namen des des Auswahlfelds erhält

                                                                                                                                                                      nö, lass das Auswahlfeld ganz weg, und tu einfach ein Textfeld mit dem alten Namen hin.

                                                                                                                                                                      • dem Auswahlfeld einen in der Forumssoftware nicht verwendeten Namen geben, z. B. "skhagsdgksdg"

                                                                                                                                                                      viel zu umständlich ;-)

                                                                                                                                                                      • dem Auswahlfeld einen onChange-Eventhandler geben, der die Auswahl automatisch in das neue Textfeld überträgt

                                                                                                                                                                      Warum nicht direkt dort eintippen? Dann kann man auch wirklich alles eingeben.

                                                                                                                                                                      Danach kann der Nutzer wahlweise eine vorgegebene Kategorie wählen oder selbst eine eintippen.

                                                                                                                                                                      Lass ihn doch direkt eine eintippen. Und wenn du willst, dass man eine aus einer Select Box übertragen kann (Javascript) in ein Textfeld, gib der Select Box nen anderen Namen, sonst könnte es Probleme bei der Weiterverarbeitung geben.

                                                                                                                                                                      Ich weiß allerdings nicht - du sprachst es bereits an - , was passiert, wenn ein Nutzer auf eine Nachricht mit einer benutzerdefinierten Kategorie antworten will. Denn normalerweise wird die Kategorie des Ausgangsbeitrags für eine Antwort weiterverwendet - und da liegt das Problem: Der antwortende Nutzer bekommt nur das Standardauswahlfeld, höchstwahrscheinlich nur mit den vorgegebenen Optionen.

                                                                                                                                                                      Dann kommt darauf an, wie die Software aufgebaut ist:

                                                                                                                                                                      Möglichkeit 1: Es wird die aktuelle (gewählte) Kategorie zwischen <option> und </option> hingeschrieben, der Rest wird dann noch ergänzt.
                                                                                                                                                                      Möglichkeit 2: Es werden die SelfHTMl Kategorien hingeschrieben, und währen des Schreibens überprüft if(Kategorie die jetzt geschrieben wird == gewählte Kategorie) dann wird noch ein select ausgegeben.

                                                                                                                                                                      MfG, Dennis.

                                                                                                                                                                      --
                                                                                                                                                                      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                      Zufällige Hinweise:
                                                                                                                                                                      ------------------------
                                                                                                                                                                      - Bitte schickt mir die Antwort als E-Mail an xy@xy.de
                                                                                                                                                                      Wie bitte? Noe, gibbet net!
                                                                                                                                                                      1. Hallo,

                                                                                                                                                                        Da bräuchte man sich also bloß eine lokale Kopie der Seite "Neue Nachricht verfassen" anzulegen, die man dann wie folgt manipuliert:

                                                                                                                                                                        • die action für das form auf "http://forum.de.selfhtml.org/cgi-bin/user/fo_post" setzen
                                                                                                                                                                              Was musst du da manipulieren? Das ist doch in einer Kopie schon so.

                                                                                                                                                                        Habe mich, glaube ich, missverständlich ausgedrückt: Man muss die Seite "Neue Nachricht verfassen" auf der Festplatte speichern und dann mit einem Editor das action-Attribut des Formulars, das die neue Nachricht aufnimmt, zu "http://forum.de.selfhtml.org/cgi-bin/user/fo_post" ändern, da es standardmäßig auf "/cgi-bin/user/fo_post" steht.

                                                                                                                                                                        • neben dem Auswahlfeld für die Kategorien ein Textfeld einfügen, das als name-Attribut den derzeitigen Namen des des Auswahlfelds erhält
                                                                                                                                                                              nö, lass das Auswahlfeld ganz weg, und tu einfach ein Textfeld mit dem alten Namen hin.
                                                                                                                                                                        • dem Auswahlfeld einen in der Forumssoftware nicht verwendeten Namen geben, z. B. "skhagsdgksdg"
                                                                                                                                                                              viel zu umständlich ;-)
                                                                                                                                                                        • dem Auswahlfeld einen onChange-Eventhandler geben, der die Auswahl automatisch in das neue Textfeld überträgt
                                                                                                                                                                              Warum nicht direkt dort eintippen? Dann kann man auch wirklich alles eingeben.

                                                                                                                                                                        Hast du Lust "Barrierefreiheit", "Internet-Anbindung", "Programmiertechnik" etc. jedes Mal zu schreiben?

                                                                                                                                                                        Danach kann der Nutzer wahlweise eine vorgegebene Kategorie wählen oder selbst eine eintippen.
                                                                                                                                                                        Lass ihn doch direkt eine eintippen. Und wenn du willst, dass man eine aus einer Select Box übertragen kann (Javascript) in ein Textfeld, gib der Select Box nen anderen Namen, sonst könnte es Probleme bei der Weiterverarbeitung geben.

                                                                                                                                                                        Meine Rede.

                                                                                                                                                                        Ich weiß allerdings nicht - du sprachst es bereits an - , was passiert, wenn ein Nutzer auf eine Nachricht mit einer benutzerdefinierten Kategorie antworten will. [...]

                                                                                                                                                                        Dann kommt darauf an, wie die Software aufgebaut ist:

                                                                                                                                                                        Möglichkeit 1: Es wird die aktuelle (gewählte) Kategorie zwischen <option> und </option> hingeschrieben, der Rest wird dann noch ergänzt.
                                                                                                                                                                        Möglichkeit 2: Es werden die SelfHTMl Kategorien hingeschrieben, und währen des Schreibens überprüft if(Kategorie die jetzt geschrieben wird == gewählte Kategorie) dann wird noch ein select ausgegeben.

                                                                                                                                                                        Weder noch. Ich habs mal schnell getestet. Es funktioniert nicht einmal, eine neue Nachricht mit einem benutzerdefinierten Themenbereich abzusenden. :-(

                                                                                                                                                                        Gruß
                                                                                                                                                                        Arx

                                                                                                                                                                        --
                                                                                                                                                                        Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                        Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                        Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                        Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                        Für alle Forum-Neulinge:
                                                                                                                                                                        1.http://de.selfhtml.org/
                                                                                                                                                                        2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                        3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                        1. Hi Arx,

                                                                                                                                                                          Dies ist ein Test, mit eigenem "Clienten" abgeschickt.

                                                                                                                                                                          MfG, Dennis.

                                                                                                                                                                          --
                                                                                                                                                                          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                          Zufällige Hinweise:
                                                                                                                                                                          ------------------------
                                                                                                                                                                          Fuer die Neulinge: Auf viele Fragen findet man eine
                                                                                                                                                                          Antwort im </archiv/>, das man auch durchsuchen kann
                                                                                                                                                                          http://suche.de.selfhtml.org/
                                                                                                                                                                          1. Hallo,

                                                                                                                                                                            Dies ist ein Test, mit eigenem "Clienten" abgeschickt.

                                                                                                                                                                            Das funktioniert auch. Bloß das Einstellen eines benutzerdefinierten Themenbereichs (ASP, BARRIEREFREIHEIT etc.) läuft nicht.

                                                                                                                                                                            Gruß
                                                                                                                                                                            Arx

                                                                                                                                                                            --
                                                                                                                                                                            Do it yourSELF 'cause SELFmade is bestmade.
                                                                                                                                                                            Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
                                                                                                                                                                            Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
                                                                                                                                                                            Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
                                                                                                                                                                            Für alle Forum-Neulinge:
                                                                                                                                                                            1.http://de.selfhtml.org/
                                                                                                                                                                            2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
                                                                                                                                                                            3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
                                                                                                                                                                            1. Hi Arx,

                                                                                                                                                                              Dies ist ein Test, mit eigenem "Clienten" abgeschickt.

                                                                                                                                                                              Das funktioniert auch. Bloß das Einstellen eines benutzerdefinierten Themenbereichs (ASP, BARRIEREFREIHEIT etc.) läuft nicht.

                                                                                                                                                                              Du wolltest das richtige sagen, hast dich aber falsch ausgedrückt ;-)

                                                                                                                                                                              Das Abschicken einer Nachricht mit einem anderen Themenbereich als den Vordefinierten (ASP, ...) wird mit einer Fehlermeldung "Ungültiger Bereich" quittiert.

                                                                                                                                                                              Schade. Wir sollten CK vielleicht mal fragen. Möglicherweise wurde das Feature herausgenommen, weil es mißbraucht wurde oder so was in der Art.

                                                                                                                                                                              Aber wenn man sich die Forumssoftware dort downloaded (z.B. für eigenes Forum) ist das Feature vermutlich noch drin.

                                                                                                                                                                              MfG, Dennis.

                                                                                                                                                                              --
                                                                                                                                                                              Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                              Zufällige Hinweise:
                                                                                                                                                                              ------------------------
                                                                                                                                                                              Sinnvolles Zitieren: Man zitiert nur Teilsaetze des Vorposters
                                                                                                                                                                              auf die man sich bezieht! Nicht einfach alles.
                                                                                                                                                                              1. Hallo Dennis,

                                                                                                                                                                                Schade. Wir sollten CK vielleicht mal fragen. Möglicherweise wurde das Feature herausgenommen, weil es mißbraucht wurde oder so was in der Art.

                                                                                                                                                                                Das Aendern der Kategorie ist hier im Forum tatsaechlich nicht mehr moeglich, da dieses Feature missbraucht wurde. Christian hat ein Plugin geschrieben, das die Kategorie auf Gueltigkeit ueberprueft. Ohne Aktivierung dieses Plugins ist es weiterhin moeglich, die Kategorie zu aendern.

                                                                                                                                                                                Beste Gruesse

                                                                                                                                                                                Jan

                                                                                                                                                                                1. Hi Jan,

                                                                                                                                                                                  Schade. Wir sollten CK vielleicht mal fragen. Möglicherweise wurde das Feature herausgenommen, weil es mißbraucht wurde oder so was in der Art.

                                                                                                                                                                                  Das Aendern der Kategorie ist hier im Forum tatsaechlich nicht mehr moeglich, da dieses Feature missbraucht wurde. Christian hat ein Plugin geschrieben, das die Kategorie auf Gueltigkeit ueberprueft. Ohne Aktivierung dieses Plugins ist es weiterhin moeglich, die Kategorie zu aendern.

                                                                                                                                                                                  Dann sollte er aber noch genau unter den News Artikel auf seiner Seite, wo er das mal geschrieben hat, einen Kommentar setzen, dass dies nun nicht mehr möglich ist. Dies ist insbesondere dann interessant, wenn er auf den Kommentar verlinkt - ich z.B. hab geglaubt, was da steht und würde mir jetzt auch nicht alle News durchlesen, weil dort eventuell was neues zu stehen könnte.

                                                                                                                                                                                  Trotzdem dir mal vielen Dank, dass du unser kleines "Problem" gelöst hat. Btw: Gehe ich richtig in der Annahme, dass bei Download und Betrieb des Clasic Forums der Betreiber wählen kann, ob unregistrierte Kategorieren gewält werden können?

                                                                                                                                                                                  MfG, Dennis.

                                                                                                                                                                                  --
                                                                                                                                                                                  Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                                                  Zufällige Hinweise:
                                                                                                                                                                                  ------------------------
                                                                                                                                                                                  Probleme mit Formularen?
                                                                                                                                                                                  http://tutorial.riehle-web.com hilft weiter.
                                                                                                                                          2. Hello,

                                                                                                                                            Wo gibt's eigentlich die PHP mit den Flatfile-Funktionen? Habe die vor ein paar Tagen gesehen, ist aber jetzt verschwunden.

                                                                                                                                            Du meinst die auf http://selfhtml.bitwortks.de? Musst du dich an Tom wenden. Ich habe gerade festgestellt, das http://selfhtml.bitworks.de/flat_box.php existiert, eine Live Demonstatrion der Funktionen.
                                                                                                                                            KA, warum Tom das Script selbst zur Zeit nicht mehr da hat. Wird vielleicht gerade überarbeitet, kommt aber vermutlich wieder ;-)

                                                                                                                                            Sorry, das war ein Namensfehler. Nun muss es über den Link wieder funktionieren:

                                                                                                                                            http://selfhtml.bitworks.de/flat_box.php.txt

                                                                                                                                            Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                            Tom

                                                                                                                                            --
                                                                                                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                            Nur selber lernen macht schlau
                                                                                                                                  2. Hello,

                                                                                                                                    Okay, das habe ich soweit verstanden. Welche Methode würdest du denn jetzt letztendlich vorschlagen?

                                                                                                                                    Es gibt mehrere Methoden.
                                                                                                                                    Die Abhandlung über das "Speichern in Flatfiles" wird mindestens drei der wichtigeren vorstellen, vielleicht auch eine vierte: "Direkt gestreute Dateien"...

                                                                                                                                    Es liegt im Ermessen eines Programmierers, welche der Methoden er für sein Projekt nutzen wird.

                                                                                                                                    Überhaupt scheinen wir jetzt etwas ins Stocken geraten zu sein ;-)

                                                                                                                                    Das liegt aber auch zur Zeit an persönlichen Hindernissen. Ich hatte ein paar Termine (Feten und Feiern, 90. Geburtstag des örtlichen Musikvereins, usw. *g*)

                                                                                                                                    Aber soweit ich sehe, sind die Grundfunktionen ja fertig.

                                                                                                                                    Was macht deine "intelligente"[tm] Blätterfunktion?

                                                                                                                                    Darüber habe ich schon sinniert. Aber wir sollten zuvor die Funktiononalität unseres "flat_rec_select()" nochmals überdenken. Wieviel Selektion dürfen wir da reinpflanzen? Gehört die einfache Fileterung schon in diese Funktion oder erst in die nächste Schicht?

                                                                                                                                    Soll ich mal mich daran machen, ein Script zu basteln, welches jetzt die Funktionen aus flat_box.php nutzt?

                                                                                                                                    Ja, das wäre fein. Aber bitte erstmal nur als Entwurf. Noch nicht hübsch machen usw. Wir wollen über dieses erste Anwendugsscript nur die Funktionlaität oder die Fehler darin erkennen können.

                                                                                                                                    Wir benötigen alle Grundfunktionen:

                                                                                                                                    Suchen eines Satzes
                                                                                                                                    Anzeigen eines Satzes
                                                                                                                                    Ändern
                                                                                                                                    Zurückspeichern mit und ohne Konflikt
                                                                                                                                    Einfügen
                                                                                                                                    Löschen (geht ja nur mit vorherigem Lesen wegen des Meinstamps)

                                                                                                                                    Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                    Tom

                                                                                                                                    --
                                                                                                                                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                    Nur selber lernen macht schlau
                                                                                                                                    1. Hi Tom,

                                                                                                                                      Überhaupt scheinen wir jetzt etwas ins Stocken geraten zu sein ;-)

                                                                                                                                      Das liegt aber auch zur Zeit an persönlichen Hindernissen. Ich hatte ein paar Termine (Feten und Feiern, 90. Geburtstag des örtlichen Musikvereins, usw. *g*)

                                                                                                                                      Ja, bei mir war auch etwas los in letzer Zeit und das Wochenende jetzt habe ich wohl auch keine Gelegenheit weiterzuarbeiten.

                                                                                                                                      Was macht deine "intelligente"[tm] Blätterfunktion?

                                                                                                                                      Darüber habe ich schon sinniert. Aber wir sollten zuvor die Funktiononalität unseres "flat_rec_select()" nochmals überdenken. Wieviel Selektion dürfen wir da reinpflanzen? Gehört die einfache Fileterung schon in diese Funktion oder erst in die nächste Schicht?

                                                                                                                                      Hm, gute Frage. Ich habs mir gerade noch einmal angeschaut und bin zu dem Ergebnis gekommen:

                                                                                                                                      flat_rec_select() gibt einem alle Datensätze gewählten Datensätze zurück (du hast die Funktion in ts06 versehentlich flat_rec_get_list() genannt).

                                                                                                                                      Wir sollten noch eine Funktion flat_rec_select_filter() machen, die als Daten das Array von flat_rec_select() kriegt und zusätzlich einen Filter String, ich dachte es so ähnlich wie hier bei SelfHTML mit dem Live-Filter.

                                                                                                                                      Soll ich mal mich daran machen, ein Script zu basteln, welches jetzt die Funktionen aus flat_box.php nutzt?

                                                                                                                                      Ja, das wäre fein. Aber bitte erstmal nur als Entwurf. Noch nicht hübsch machen usw. Wir wollen über dieses erste Anwendugsscript nur die Funktionlaität oder die Fehler darin erkennen können.

                                                                                                                                      Schon klar, ich mache mir nicht so viel Arbeit das alles schön zu "designen" *g*
                                                                                                                                      Allerdings werde ich das heute nicht mehr schaffen, und wenn ich es morgen nicht schaffen, dann wohl erst am Freitag nachmittag.

                                                                                                                                      MfG, Dennis.

                                                                                                                                      --
                                                                                                                                      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                      Zufällige Hinweise:
                                                                                                                                      ------------------------
                                                                                                                                      Meine Homepage: http://www.riehle-web.com
                                                                                                                                      Tutorial: http://tutorial.riehle-web.com
                                                                                                                                      1. Hi Dennis,

                                                                                                                                        Allerdings werde ich das heute nicht mehr schaffen, und wenn ich es morgen nicht schaffen, dann wohl erst am Freitag nachmittag.

                                                                                                                                        Kurzfristig noch was dazwischen gekommen, bleibe aber dran *g*

                                                                                                                                        MfG, Dennis.

                                                                                                                                        --
                                                                                                                                        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                        Zufällige Hinweise:
                                                                                                                                        ------------------------
                                                                                                                                        Sinnvolles Zitieren: Man zitiert nur Teilsaetze des Vorposters
                                                                                                                                        auf die man sich bezieht! Nicht einfach alles.
                                                                                                                                        1. Hi Tom,

                                                                                                                                          Allerdings werde ich das heute nicht mehr schaffen, und wenn ich es morgen nicht schaffen, dann wohl erst am Freitag nachmittag.

                                                                                                                                          Kurzfristig noch was dazwischen gekommen, bleibe aber dran *g*

                                                                                                                                          Hätte jetzt mal eine Rroto Version fertig. Den Update habe ich allerdings noch nicht drin. Ich kann dir das ja nachher mal noch zu schicken.

                                                                                                                                          Gleichzeitig habe ich noch was am Script flat_box.php umgeändert, die neueste Version meinerseits ist jetzt dr07. Und zwar ging es noch um ein paar Kleinigkeiten bei der Backup Funktion, um multifunktionaler zu bleiben.

                                                                                                                                          MfG, Dennis.

                                                                                                                                          --
                                                                                                                                          Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                          Zufällige Hinweise:
                                                                                                                                          ------------------------
                                                                                                                                          Fuer die Neulinge: Auf viele Fragen findet man eine
                                                                                                                                          Antwort im </archiv/>, das man auch durchsuchen kann
                                                                                                                                          http://suche.de.selfhtml.org/
                                                                                                                                          1. Hi Tom,

                                                                                                                                            Hab dir übrigends grade ne E-Mail geschickt, mit den neuen Dateien: flat_box_dr07.php und doing.php, der Rest steht in der E-Mail.

                                                                                                                                            MfG, Dennis.

                                                                                                                                            --
                                                                                                                                            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                            Zufällige Hinweise:
                                                                                                                                            ------------------------
                                                                                                                                            Den Selfcode kann man sich brigends hier decoden lassen:
                                                                                                                                            http://www.peter.in-berlin.de/projekte/selfcode/
                                                                                                                                            1. Hello,

                                                                                                                                              Hab dir übrigends grade ne E-Mail geschickt, mit den neuen Dateien: flat_box_dr07.php und doing.php, der Rest steht in der E-Mail.

                                                                                                                                              Gut, nach Durchsicht und Überarbeitung stelle sich sie wieder auf http://selfhtml.bitworks.de unter "Flat-File-Funktionen"

                                                                                                                                              Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                              Tom

                                                                                                                                              --
                                                                                                                                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                              Nur selber lernen macht schlau
                                                                                                                                              1. Hi Tom,

                                                                                                                                                Gut, nach Durchsicht und Überarbeitung stelle sich sie wieder auf http://selfhtml.bitworks.de unter "Flat-File-Funktionen"

                                                                                                                                                Hast du es schon? Du hast übrigends noch nicht viel zu doing.php gesagt. Wolltest du mir das Script nicht noch mal zurückschicken? ;-/

                                                                                                                                                Zu deiner Frage:

                                                                                                                                                "Desweiteren sollten wir uns darüber einigen, ob wir uns auf die verkürzte "schmutzige" Programmierweise mit den returns mitten im Script einlassen wollen, oder ob wir sauber strukturiert programmieren wollen mit if, else."

                                                                                                                                                Das ist mir eigentlich so ziemlich egal, ich komme mit beidem zurecht. Da wir jetzt schon eigentlich überall die kurze (warum "schmutzig"?) Programmiermethode genommen haben, sollten wir vielleicht auch dabei bleiben. Aber deshalb muss ja ein Else Zweig nicht direkt verboten sein ;-)

                                                                                                                                                MfG, Dennis.

                                                                                                                                                --
                                                                                                                                                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                                                                                                                                                Zufällige Hinweise:
                                                                                                                                                ------------------------
                                                                                                                                                Meine Homepage: http://www.riehle-web.com
                                                                                                                                                Tutorial: http://tutorial.riehle-web.com
                                                                                                                                                1. Hello,

                                                                                                                                                  "Desweiteren sollten wir uns darüber einigen, ob wir uns auf die verkürzte "schmutzige" Programmierweise mit den returns mitten im Script einlassen wollen, oder ob wir sauber strukturiert programmieren wollen mit if, else."

                                                                                                                                                  Das ist mir eigentlich so ziemlich egal, ich komme mit beidem zurecht. Da wir jetzt schon eigentlich überall die kurze (warum "schmutzig"?) Programmiermethode genommen haben, sollten wir vielleicht auch dabei bleiben. Aber deshalb muss ja ein Else Zweig nicht direkt verboten sein ;-)

                                                                                                                                                  Nein, keinesfalls. Insbesondere, wenn es im selben Programmblock (Funktion) noch weitergehen soll. Das RETURN setze man ja nur dann ein, wenn der CALL abgearbeitet ist und verlassen werden soll. Allerdings muss man dann eben manchmal "Schlussformeln" redundant einbinden...

                                                                                                                                                  Ich finde die Methode mit dem RETURN auch wesentlich übersichtlicher, auch wenn sich Nassi und Shniderman im Grab umdrehen würden.

                                                                                                                                                  Liebe Grüße aus http://www.braunschweig.de

                                                                                                                                                  Tom

                                                                                                                                                  --
                                                                                                                                                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                                                                                  Nur selber lernen macht schlau
                                                                                        2. Hello,

                                                                                          kurzer Zwisaxchenbericht über die Tests mit flat_update()

                                                                                          Habe 999 Datensätze eingefügt. Das hat ca. 10Sek gedauert.
                                                                                          Das File hat nun eine Größe von 272,224 Bytes

                                                                                          Das Update eines Satzes (ID==333) ist schneller gegangen, als ich gucken konnte. Ich muss das also wirklich messen.

                                                                                          Allerdings gab es bei der Einfügeoperation mit flat_update() erst noch eine kleine Grübelei. Die Funktion wollte innerhalb eines Scriptes das Einfügen nicht erledigen. Die Schliefe wurde aber durchlaufen.

                                                                                          NAch dem Einfügen der Zeile

                                                                                          clearstatcache();

                                                                                          funktioniert die Funktion nun auch beim mehrfachen Aufruf innerhalb EINER Scriptinstanz.

                                                                                          Der Fehler liegt da bei fread($fp,filesize($filename));
                                                                                                                            --------
                                                                                          Da die Statusdaten noch nicht aktualisiert waren, wure immer noch die alte filesize() VOR dem Einfügen benutzt. Muss man also daran denken.

                                                                                          #--------------------------------------------------------------------

                                                                                          function flat_update($filename,&$_recdata)
                                                                                          {
                                                                                            //status-Buffer rücksetzen
                                                                                            clearstatcache();

                                                                                          //Datei öffnen und locken, bei Fehler abrechen
                                                                                            $fp = flat_open_lock($filename,LOCK_EX);
                                                                                            if (!$fp) return 5; ## Datei konnte nicht gesperrt werden

                                                                                          //Datei entpacken
                                                                                            fseek($fp,0,SEEK_SET);
                                                                                            $_file_packed = fread($fp,filesize($filename));
                                                                                            $_file = unserialize($_file_packed);

                                                                                          ...

                                                                                          Ich messe jetzt noch, wie lange es dauert, mehrere Sätze updaten zu lassen bei ca. 1MB Dateivolumen.

                                                                                          Liebe Grüße aus http://www.braunschweig.de

                                                                                          Tom

                                                                                          --
                                                                                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                          Nur selber lernen macht schlau
                                                                                          1. Hello,

                                                                                            kurzer Zwischenbericht über die Tests mit flat_update()

                                                                                            Habe mit flat_update() 999 Datensätze eingefügt. Das hat ca. 10Sek gedauert.
                                                                                            Das File hat nun eine Größe von 272,224 Bytes

                                                                                            Das Update eines Satzes (ID==333) ist schneller gegangen, als ich gucken konnte. Ich muss das also wirklich messen.

                                                                                            Benötigte Zeit: 0.0824978351593sec

                                                                                            Da soll noch einer sagen, Flatfiles sind langsam. Allerdings läuft das auch auf einem LAMPP-System. Allerdings nur 128MB Speicher und Athlon 700MHz, auf dem zur Zeit kein Betrieb herrscht.

                                                                                            Liebe Grüße aus http://www.braunschweig.de

                                                                                            Tom

                                                                                            --
                                                                                            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                                            Nur selber lernen macht schlau
                                                                        2. Hello,

                                                                          Ach du jemmineh, dein Fachchinesich wird ja immer schlimmer *gg*, conclict-counter?

                                                                          Ach ja, die Vertipper: conflict-counter nennt sich das Ding. Warum der so heißt, weiß ich auch nicht. Das stammt noch aus der Zeit von bTrieve. Ist sozusagen das Kernel einer SQL-Datenbank.

                                                                          Der conflict-counter zählt eigentlich nur, wie oft der Datensatz schon gespeichert wurde. Man kann eben auch einen Timestamp dafür benutzen, wenn dieser genügend fein ist. Eine Sekunde ist eindeutig nicht fein genug. Eine Mikrosekunde sollte aber genügen beim heutigen Stand der Technik.

                                                                          list($usec, $sec) = explode(" ",microtime());
                                                                          $time = date("YmdHis").substr($usec,1,7);

                                                                          Was enthalten die Variablen $usec und $sec?

                                                                          siehe http://de3.php.net/manual/de/function.microtime.php

                                                                          Soll das Script die Zeit errechnen, die in $_file['data'][$id]['datum'] gespeichert werden soll?
                                                                          Oder ist das nur zur Verarbeitung?

                                                                          Die Funktionen müssen die letzte udate-time immer feststellen und eintragen, damit nicht ein anderer User (A) aus Versehen einen Datensatz zurückspeichert, der in der Zwischenzeit schon wieder von User (C) überarbeitet wurde.

                                                                          Liebe Grüße aus http://www.braunschweig.de

                                                                          Tom

                                                                          --
                                                                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                                                                          Nur selber lernen macht schlau
                2. Hi Leute,

                  hier wird noch dringend Hilfe gebraucht: <?t=82138&m=483137#nachricht>

                  Tom und ich brauchen eure Meinung.

                  Gruß, Hilfebedürftiger ;-)

    3. Hi,

      http://selfhtml.bitworks.de

      Das Flatfile-Script sieht praktisch aus. Glaube, dass ich sowas auch benutzen werde.

      Gruß
      Arx

      --
      Do it yourSELF 'cause SELFmade is bestmade.
      Selfcode: ie:% fl:( br:^ va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:? mo:} zu:)
      Selfcode entschlüsseln: http://peter.in-berlin.de/projekte/selfcode/
      Selfcode-Info: http://emmanuel.dammerer.at/selfcode.html
      Für alle Forum-Neulinge:
      1.http://de.selfhtml.org/
      2.http://suche.de.selfhtml.org/ -> http://forum.de.selfhtml.org/archiv/
      3.http://forum.de.selfhtml.org/faq/ -> http://forum.de.selfhtml.org/cgi-bin/fo_post
      1. Hi Arx,

        http://selfhtml.bitworks.de
        Das Flatfile-Script sieht praktisch aus. Glaube, dass ich sowas auch benutzen werde.

        Allgemeine Feststellung:
        Flatfiles finden Anklang ;-)

        MfG, Dennis.

        --
        Signatur 1 von 3:
        Meine Homepage: http://www.riehle-web.com
        Tutorial: http://tutorial.riehle-web.com
  3. Hi @all:

    es geht um das hier: <?t=82138&m=483137#nachricht>
    Wir brauchen da noch Hilfe.

    MfG, Dennis.

    --
    Signatur 1 von 3:
    Meine Homepage: http://www.riehle-web.com
    Tutorial: http://tutorial.riehle-web.com
    1. Hallo,

      es geht um das hier: <?t=82138&m=483137#nachricht>
      Wir brauchen da noch Hilfe.

      Wobei? Beim Schreien? Das könnt ihr auch allein recht gut.

      Grüße
      Thomas

      1. Hi Thomas,

        Wobei? Beim Schreien? Das könnt ihr auch allein recht gut.

        Ne, eigentlich eher hier <?t=82138&m=483084#nachricht>

        MfG, Dennis.

        --
        Signatur 1 von 3:
        Meine Homepage: http://www.riehle-web.com
        Tutorial: http://tutorial.riehle-web.com
        1. Hallo,

          Wobei? Beim Schreien? Das könnt ihr auch allein recht gut.
          Ne, eigentlich eher hier <?t=82138&m=483084#nachricht>

          Dort kann ich nicht helfen.

          Ich würde aber auch vorschlagen, dass die die Erkenntnisse aus diesem Thread - sofern noch Fragen offen sind - zusammengefasst und in einem neuen Thread als Frage(n) gestellt werden, denn dieser hier droh in "Nichtigkeiten" unterzugehen.

          Grüße
          Thomas

          1. Hi Thomas,

            Ich würde aber auch vorschlagen, dass die die Erkenntnisse aus diesem Thread - sofern noch Fragen offen sind - zusammengefasst und in einem neuen Thread als Frage(n) gestellt werden, denn dieser hier droh in "Nichtigkeiten" unterzugehen.

            Wäre vielleicht wirklich zu überlegen. Andererseits sind die Grundfunktionen, das BIOS wie Tom sagt jetzt ja fertig.
            Jezt fehlt nur noch das ganze drumherum zur Darstellung etc.

            MfG, Dennis.

            --
            Signatur 2 von 3:
            Die EU und die neuen Mitgliedslnder:
            http://www.riehle-web.com/pkprojekt/
            Oder doch mehr in HTML interessiert?
            http://tutorial.riehle-web.com
        2. Hi!

          Wobei? Beim Schreien? Das könnt ihr auch allein recht gut.

          Ne, eigentlich eher hier <?t=82138&m=483084#nachricht>

          Naja, der Thread ist ein wenig zu anstrengend um den komplett zu lesen ;-)

          Ich verstehe das Problem nicht wirklich. IMHO solltet Ihr Euch nicht zu viele Gedanken über die Extreme machen. Bedenkt mal das Verhältnis von lesenden Anfragen zu schreibenden Anfragen. Hier im Forum sieht das im Augenblick so aus: auf 800 Aufrufe des Posting-Scriptes, kommen 24.000 lesende Zugriffe, das heißt schreibende Zugriffe machen gerade mal 3% aus. Bei großen Datenmengen wird das lesen von großen Flatfiles sehr langsam. Die Zahlen kommen mir zwar etwas wenig vor, aber es zeigt das Verhältnis. Das Problem ist die Optimierung für Lesezugriffe, in Anbetracht der Tatsache dass sich die Daten durch schreibende Zugriffe änderen, bzw. erweitern.
          Wie man sowas optimiert hat CK ja mit seinem Forum eindrucksvoll gezeigt. Aber dazu ist eine Menge Arbeit und Wissen notwendig. Wenn ich sowas machen müsste, dann würde ich die Probleme vorhandener Software wie Datenbank-Servern, Object-Cache-Servern... überlassen, sicher kann ein RDBMS viel was man nicht braucht - das heißt es gibt Optimierungs-Möglichkeiten, aber ich bezweifele ob man die mit PHP überhaupt entsprechend ausnutzen kann, Speichern in serialisierten Arrays ist sicher nicht optimal hierfür. Und für kleinere Anwendungen sehe ich keine Probleme ;-)

          Vielleicht rede ich jetzt auch am Thema vorbei, aber dann klärt mich mal auf wo jetzt genau die Probleme liegt ;-)

          Grüße
          Andreas

          --
          SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
          1. Hi Andreas,

            Naja, der Thread ist ein wenig zu anstrengend um den komplett zu lesen ;-)

            Hätteste halt früher einsteigen müsssen ;-)

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
            Zufällige Hinweise:
            ------------------------
            Sinnvolles Zitieren: Man zitiert nur Teilsaetze des Vorposters
            auf die man sich bezieht! Nicht einfach alles.
          2. Hello,

            Naja, der Thread ist ein wenig zu anstrengend um den komplett zu lesen ;-)

            Er ist ja auch als Vorstufe für einen etwas länglicheren Feature-Artikel gedacht. Er dokumentiert schon ganz schön die Geschichte von der ersten oberflächlichen Anforderung zur überlegten Umsetzung und zeigt auch Alternativen auf.

            Ich verstehe das Problem nicht wirklich.

            Ich denke, doch, denn das Problem liegt nicht in der fachlich ausgeklügelten Umsetzung (dieses RAD haben andere schon erfunden), sondern in der passenenden Skalierung der Möglichkeiten für ein Projekt und im schrittweisen Dazulernen.

            IMHO solltet Ihr Euch nicht zu viele Gedanken über die Extreme machen. Bedenkt mal das Verhältnis von lesenden Anfragen zu schreibenden Anfragen. Hier im Forum sieht das im Augenblick so aus: auf 800 Aufrufe des Posting-Scriptes, kommen 24.000 lesende Zugriffe, das heißt schreibende Zugriffe machen gerade mal 3% aus.

            Das ist schon einen Gedanken wert. Die Datenmengen sind also entscheidend, oder genauer gesagt, die Anzahl der Datensätze. Und da ist mein zweiter Vorschlag schon besser geeignet, das zu handhaben, allerdings auf Kosten des vergeudeten Speicherplatzes.

            Bei großen Datenmengen wird das lesen von großen Flatfiles sehr langsam. Die Zahlen kommen mir zwar etwas wenig vor, aber es zeigt das Verhältnis. Das Problem ist die Optimierung für Lesezugriffe, in Anbetracht der Tatsache dass sich die Daten durch schreibende Zugriffe änderen, bzw. erweitern.

            An der Ermittlung der Grenzwerte arbeiten wir. Da kann jeder einen Beitrag leisten, der uns Rückmeldung gibt.

            Wie man sowas optimiert hat CK ja mit seinem Forum eindrucksvoll gezeigt. Aber dazu ist eine Menge Arbeit und Wissen notwendig. Wenn ich sowas machen müsste, dann würde ich die Probleme vorhandener Software wie Datenbank-Servern, Object-Cache-Servern... überlassen, sicher kann ein RDBMS viel was man nicht braucht - das heißt es gibt Optimierungs-Möglichkeiten, aber ich bezweifele ob man die mit PHP überhaupt entsprechend ausnutzen kann, Speichern in serialisierten Arrays ist sicher nicht optimal hierfür. Und für kleinere Anwendungen sehe ich keine Probleme ;-)

            Vielleicht rede ich jetzt auch am Thema vorbei, aber dann klärt mich mal auf wo jetzt genau die Probleme liegt ;-)

            Du hast keinesfalls am Thema vorbei geredet, sondern einen wertvollen Beitrag geleistet, um anderen später die Entscheidung für die passende Mehtode leichter zu machen. Eine SQL-Datenbank ist nicht immer die passende Lösung. Manchmal ist sie total überskaliert und manchmal muss sie auch speziellen Erfordernissen genügen --> Arbeitsagentur.de (um das Frontend haben die sich ja bekanntermaßen nicht gekümmert, aber die Datenbank würde mit MySQL schlapp machen *g*)

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hi!

              IMHO solltet Ihr Euch nicht zu viele Gedanken über die Extreme machen. Bedenkt mal das Verhältnis von lesenden Anfragen zu schreibenden Anfragen. Hier im Forum sieht das im Augenblick so aus: auf 800 Aufrufe des Posting-Scriptes, kommen 24.000 lesende Zugriffe, das heißt schreibende Zugriffe machen gerade mal 3% aus.

              Das ist schon einen Gedanken wert. Die Datenmengen sind also entscheidend, oder genauer gesagt, die Anzahl der Datensätze. Und da ist mein zweiter Vorschlag schon besser geeignet, das zu handhaben, allerdings auf Kosten des vergeudeten Speicherplatzes.

              Speicherplatz kostet doch fast nichts mehr ;-)
              Was hat man davon sparsam mit Speicherplatz zu sein (z.B. um die Software auf einem shared hosting server laufen zu lassen?), wenn auf der anderen Seite die Performance für lesende Zugriffe bei so einen shared-hosting account vorne und hinten nicht reichen würde? Ich gebe da nur mal wieder unser Forum hier zu bedenken. Ich glaube das Archiv hat in 5 Jahren um die 500 MB Daten gesammelt. Glaubst Du, dass man Forum und Suche mit PHP auf einem shared hosting Server betreiben könnte? Andere Boards(auf PHP/MySQL-Basis), wie das von Gentoo, wo es ähnlich viele Postings gibt, läuft z.B. auf einem Cluster mit Dual-Xeons, und einem dedizierten DB-Rechner, ebenfalls Dual Xeon mit 4 GB RAM.
              Was ich damit sagen will:
              Wenn man sich über solche Dinge wie Speicherplatz Gedanken macht benötigt man schon längst einen eigenen Server für sowas, und dabei ist es fast egal ob der jetzt 40 oder 160 GB Speicherlatz mitbringt. Denn selbst wenn man mit seinen Daten nur in die Größenordnung von 40 GB kommen würde, dann bräuchte man zur Bewältigung der Last vermutlich einen kleinen Server-Park der einen größeren 5-stelligen Betrag kostet(netter Mittelklasse-Wagen). (nur so vom Gefühl her, sicher lässt sich nicht alles so verallgemeinern...)

              Vielleicht rede ich jetzt auch am Thema vorbei, aber dann klärt mich mal auf wo jetzt genau die Probleme liegt ;-)

              Du hast keinesfalls am Thema vorbei geredet, sondern einen wertvollen Beitrag geleistet, um anderen später die Entscheidung für die passende Mehtode leichter zu machen. Eine SQL-Datenbank ist nicht immer die passende Lösung. Manchmal ist sie total überskaliert und manchmal muss sie auch speziellen Erfordernissen genügen --> Arbeitsagentur.de (um das Frontend haben die sich ja bekanntermaßen nicht gekümmert, aber die Datenbank würde mit MySQL schlapp machen *g*)

              Naja, wenn ich auch kein großer Freund von MySQL mehr bin, will ich doch mal auf einen kleinen "Erfahrungs-Bericht" hinweisen: http://www.mysql.com/news-and-events/success-stories/mobile.de.html

              Grüße
              Andreas

              --
              SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/