seVes: PHP Paging ohne MySQL/mit scandir

Servus!

ich hab eine Galerie gecodet, die mir jetzt seitenweise einen bestimmten Bereich an Bildern anzeigen soll.

Mit scandir ermittle ich die Dateien und mit count berechne ich, um wieviele Dateien es sich handelt. An dessen wird das PHP-Paging aufgebaut, was auch funktioniert.

Nun fehlt mir aber der Part, wo sonst - wie bei allen Tutorials - das Mysql greift mit seinem "LIMIT <startpunkt>, <wieviel>", sprich "LIMIT 0, 20"

Wie kann ich das ohne MySQL umsetzen?

--
Mit freundlichen Grüßen
seVes
  1. Hello,

    Mit scandir ermittle ich die Dateien und mit count berechne ich, um wieviele Dateien es sich handelt. An dessen wird das PHP-Paging aufgebaut, was auch funktioniert.

    Nun fehlt mir aber der Part, wo sonst - wie bei allen Tutorials - das Mysql greift mit seinem "LIMIT <startpunkt>, <wieviel>", sprich "LIMIT 0, 20"

    Wie kann ich das ohne MySQL umsetzen?

    Wo kneift es denn?

    • Directory auslesen
    • feststellen, ob es ein Bild ist
    • übrig gebliebene Dateinamen / -Pfade per HTML verlinken

    Das Ganze wird aber kritisch, wenn es viele Einträge im Verzeichnis gibt, diese nicht alle Bilder sind und der Besucherstrom auf der Seite wächst. Dann sollte man es ggf. trennen:

    • Verzeichnis auslesen

    • Selection durchführen

    • temporäres Ergebnis in Session speichern

    • Aufbau der Seitenanzeige nur noch aus der Session

    fürs erste siehe http://selfhtml.bitworks.de/snippets/directories_auslesen/

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Grüße,

      • temporäres Ergebnis in Session speichern

      was spricht gegen GET?
      MFG
      bleicher

      --
      __________________________-

      FirefoxMyth
      1. Hallo,

        was spricht gegen GET?

        nichts, es spricht bei Paging solcher Bilderseiten alles dafür.

        Freundliche Grüße

        Vinzenz

        1. Servus!

          erstmal danke für die Antworten,

          Directory auslesenund die ganzen Dateien in ein array hauen oder so ist alles kein Problem.

          Ich sträube mich einfach gegen den nutzen von einer weiteren MySQL-Table, in der alle Bilddateien gespeichert sind und ich dann allerdings bequem über LIMIT arbeiten könnt. Was aber wenn 2 Bilder hinzukommen? dann muss ich immer die Table aktualisieren, dass wird mir zu stressig!

          Daher hat eine Table jetzt einfach nur den Galerienamen und den Pfad zur Galerie gespeichert. auf den Pfad wird einfach scandir angewant und des Resultat in entsprechenden HTML-TAG (img, a) eingepackt. Das Paging klappt soweit auch, allerdings...

          Ja...allerdings muss ich Ihm jetzt quasi sowas sagen wie:

          (Bildanzahl pro Seite 20)

          Wenn Seite 6 gewählt, dann nimm aus dem Bildarray (scandir) die Einträge 6*20 - (6*20)+20 und gib diese wieder.

          Das ist mein Problem... ;-)

          Hallo,

          was spricht gegen GET?

          nichts, es spricht bei Paging solcher Bilderseiten alles dafür.

          Freundliche Grüße

          Vinzenz

          --
          Mit freundlichen Grüßen
          seVes
          1. Hi,

            bitte zitiere vernünftig, und serviere kein TOFU

            Ja...allerdings muss ich Ihm jetzt quasi sowas sagen wie:

            (Bildanzahl pro Seite 20)

            Wenn Seite 6 gewählt, dann nimm aus dem Bildarray (scandir) die Einträge 6*20 - (6*20)+20 und gib diese wieder.

            Das ist mein Problem... ;-)

            Zu dem dir Pragma schon vor vier Stunden was geschrieben hat.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. Servus!

              kann ich nichts mitanfangen, weil diese Logik hab ich Dir ja selbst grad geschrieben. Mir fehlen nur diese PHP-Befehle dazu, wie sie heißen, um einen Datenbereich in einem Array auszuwählen. :)

              In TCL kenn ich lindex und lrange... *mhm*

              Hi,

              bitte zitiere vernünftig, und serviere kein TOFU

              Ja...allerdings muss ich Ihm jetzt quasi sowas sagen wie:

              (Bildanzahl pro Seite 20)

              Wenn Seite 6 gewählt, dann nimm aus dem Bildarray (scandir) die Einträge 6*20 - (6*20)+20 und gib diese wieder.

              Das ist mein Problem... ;-)

              Zu dem dir Pragma schon vor vier Stunden was geschrieben hat.

              MfG ChrisB

              --
              Mit freundlichen Grüßen
              seVes
              1. Hi,

                kann ich nichts mitanfangen,

                Mti deutscher Sprache generell, oder was?

                Sonst hättest du den Hinweis bzgl. des Zitierstils ja wohl nicht ignoriert.

                weil diese Logik hab ich Dir ja selbst grad geschrieben. Mir fehlen nur diese PHP-Befehle dazu, wie sie heißen, um einen Datenbereich in einem Array auszuwählen.

                Pragmas Vorschlag war leicht anders - erst gar nicht ins Array zu packen, was sowieso nicht interessant ist.

                In beiden Fällen wirst du irgendeine Art von Schleife brauchen - also überlege dir, welcher Schleifentyp sich eignen könnte.

                MfG ChrisB

                --
                Light travels faster than sound - that's why most people appear bright until you hear them speak.
                1. Servus!

                  Habs nun selbst rausgefunden und das Lösungswort war schlicht und ergreifend "array_slice".

                  Hi,

                  kann ich nichts mitanfangen,

                  Mti deutscher Sprache generell, oder was?

                  Sonst hättest du den Hinweis bzgl. des Zitierstils ja wohl nicht ignoriert.

                  weil diese Logik hab ich Dir ja selbst grad geschrieben. Mir fehlen nur diese PHP-Befehle dazu, wie sie heißen, um einen Datenbereich in einem Array auszuwählen.

                  Pragmas Vorschlag war leicht anders - erst gar nicht ins Array zu packen, was sowieso nicht interessant ist.

                  In beiden Fällen wirst du irgendeine Art von Schleife brauchen - also überlege dir, welcher Schleifentyp sich eignen könnte.

                  MfG ChrisB

                  --
                  Mit freundlichen Grüßen
                  seVes
                  1. Hi,

                    Habs nun selbst rausgefunden

                    Und dafür, den mehrfachen Hinweis bzgl. des Zitierens zu berücksichtigen, bist du einfach zu blöd?

                    MfG ChrisB

                    --
                    Light travels faster than sound - that's why most people appear bright until you hear them speak.
        2. Hello,

          was spricht gegen GET?

          nichts, es spricht bei Paging solcher Bilderseiten alles dafür.

          Dann hast Du nicht aufmerksam genug gelesen.
          siehe https://forum.selfhtml.org/?t=191494&m=1277175

          Ich habe hier einen Fall, bei dem ca. 140.000 Bilder im Verzeichnis liegen. Sie enthalten im Namen die Usernummer, das Speicherdatum und eine kurze Bezeichnung. Man kann eine Selektion über die drei Bereiche durchführen. Es wird _keine_ Datenbank verwendet.

          Die Ergebnismenge hat typischerweise bis zu 100 Bilder. Jeweils 10 sollen auf einer Seite verlinkt werden (mittels kleiner Vorschau) und zwischen den Seiten wird geblättert.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Grüße,
            wäre es hier nicht schon sinnvoll den HTML für die Gallerieseiten nach upload fest zu generieren?
            MFG
            bleicher

            --
            __________________________-

            FirefoxMyth
            1. Hello,

              wäre es hier nicht schon sinnvoll den HTML für die Gallerieseiten nach upload fest zu generieren?

              Ich kann jetzt nur raten, was Du da vor hast, aber vermutlich ist das Ganze dann nicht mehr sehr flexibel. Was ist, wenn Du ein Bild löschst? dann verschieben sich doch die Seiten. Das Gleiche gilt, wenn anstelle von sonst 5 Bildern pro Seite plötzlich 7 angezeigt werden sollen, oder wenn z.B. nur alle Bilder angezeigt werden sollen, die viele blaue Pixel enthalten... (das bitte alles nur als Beispiele zu sehen)

              Das Beste ist sicherlich immer die Verwendung einer Datenbank für die Metadaten, nicht jedoch für die Bilddaten selber :-)

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Ich kann jetzt nur raten, was Du da vor hast, aber vermutlich ist das Ganze dann nicht mehr sehr flexibel. Was ist, wenn Du ein Bild löschst? dann verschieben sich doch die Seiten. Das Gleiche gilt, wenn anstelle von sonst 5 Bildern pro Seite plötzlich 7 angezeigt werden sollen, oder wenn z.B. nur alle Bilder angezeigt werden sollen, die viele blaue Pixel enthalten... (das bitte alles nur als Beispiele zu sehen)

                Bis auf die "items per page" gelten sämtliche Einschränkungen auch für Deinen Session Ansatz. Unterschied: Bei etwaigen Updates müssen entweder:
                a) alle Sessions reorganisiert werden
                b) alle HTML Seiten reorganisiert werden

                bei dem ca. 140.000 Bilder im Verzeichnis liegen... Die Ergebnismenge hat typischerweise bis zu 100 Bilder.

                Moment. Wenn Du Pech hast, kann Treffer 100 für Deine Session also bei Kandidat 139.999 kommen? Geht bestimmt zügig...

              2. Grüße,

                Ich kann jetzt nur raten, was Du da vor hast, aber vermutlich ist das Ganze dann nicht mehr sehr flexibel. Was ist, wenn Du ein Bild löschst? dann verschieben sich doch die Seiten. Das Gleiche gilt, wenn anstelle von sonst 5 Bildern pro Seite plötzlich 7 angezeigt werden sollen, oder wenn z.B. nur alle Bilder angezeigt werden sollen, die viele blaue Pixel enthalten... (das bitte alles nur als Beispiele zu sehen)

                suchfunktion war nicht vorgesehen, und neugenerieren der seiten bei änderung dürfte uU besser sien als jedes mal einzelne seiten zu generieren - be iwenigen veränderungen und vielen besucher wäre htmlablage wohl sinnvoller, bei vielen veränderungen mit weniger aufrufen eindeutig datenbank - der rest ist whl dazwischen^^

                vllt "hartgenerierung" für "archivseiten" die 99% niht mehr geändert werden mit umleitung auf datenbank falls datei fehlt?

                MFG
                bleicher

                --
                __________________________-

                FirefoxMyth
      2. Hello,

        Grüße,

        • temporäres Ergebnis in Session speichern

        was spricht gegen GET?

        Ich sprach davon, wenn die Selektion auf eine sehr große Anzahl von Files ausgeführt wird, und man dann die Ergenismenge durchblättern will, dann ist es vorteilhaft, die Ergebnismenge zwischenzuspeichern, um sie nicht jedes Mal neu aufbauen zu müssen.

        Ist es nun klar?

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Wenn Du damit rechnen magst, einmal wirklich viele Dateien in Deinem Ordner zu haben: verwende ein DBMS, muss ja nicht Mysql sein(z.B. SQLite).

    Zur konkreten Frage:
    Du musst mitzählen. Verwerfe Deine Scandir items, bis Du an dem gewünschten "Startpunkt" angekommen bist. Beende Dein Scandir, wenn Du ("Startpunkt" + "wieviel") erreicht hast.