Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] simple Gallery funktioniert nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] simple Gallery funktioniert nicht

    Hallo liebe Community,

    seit 2 Wochen arbeite ich mich mehrere Stunden pro Tag in php rein, hab bisher alles selbst loesen koennen, aber bei einer Sache beiss ich auf Granit:

    habe eine Fotogallerie aus dem Buch php fuer dummies genommen und auch (bin recht sicher ) verstanden was die Komponenten tun sollen. Aber es passiert nix. Folgender code:

    PHP-Code:

    <?php

    $dir 
    "../bilder/";
    $odir opendir($dir);

    while (
    $filename=readdir($odir))
            {
                
    $filepath=$dir.$filename;
                if (
    is_file($filename) and preg_match("/\.jpg$/"$filename))
                    {
                        
    $gallery[]=$filepath;
                    
                    }
                    elseif (!isset(
    $filename))
                    {
                        echo 
    "leere Variable";
                    }
            }
            
    sort($gallery);
                foreach (
    $gallery as $bild)
                {
                    echo 
    "<img src='$bild' /><br />";
                }


    ?>
    Ich habe in meinem kleinen Linux unter /var/www/html/bilder/ verschiedene .jpg bilder gespeichert. Die sollen einfach nur dargestellt werden.
    Im Grunde genommen habe ich in dem Script aus dem Buch nicht viel veraendert, nur ereg mit preg_match ersetzt, weil ich gelesen habe, dass es veraltet ist.
    Mein mitlerweile bester Freund der php validator auf http://phpcodechecker.com/ sagt der code ist okay.
    Meine Vermutung war, dass das script die Bilder nicht findet, weshalb ich selbst den elseif part eingebaut hab....aber nach wie vor passiert nichts...nicht mal die Meldung "leere Variable" vielleicht einfach zu stuemperhaft.

    Ich bin fuer jede Hilfe und Hilfe zur Selbsthilfe sehr dankbar, denke die Loesung ist extrem einfach, aber im Moment killt mich das Problem einfach nur

    Vielen Dank im Voraus

    Tom

  • #2
    es passiert nichts - ist keine fehlerbeschreibung?
    html markup?
    sonst immer gut:
    http://php-de.github.io/#debugging

    Kommentar


    • #3
      Hallo moma,

      vielen Dank fuer die Antwort,
      bin mir nicht ganz sicher, was du mit html markup meinst, ich vermute aber den html Part in meiner Datei? Ich benutze geany, daher:
      Code:
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
      	<title>unbenannt</title>
      	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
      	<meta name="generator" content="Geany 1.24.1" />
      </head>
      <body> bla bli blubb
      </body>
      </html>
      War das gemeint?
      Und, mit es passiert nichts meine ich: wenn ich die datei im Browser lade funktionieren andere Scripts (hab vorher ein wenig mit Schleifen experimentiert) aber die Gallerie nicht. Selbst wenn ich vorher alle anderen Scrips auskommentiere. Die Datei (bei mir test.2.php) liegt in /var/www/html/ also eigentlich im gleichen Verzeichnis wie der Ordner "bilder" .
      Der debugging part ist sehr interessant, habe aber auch dort bisher keine Hilfe zum Problem gefunden...

      Woran kann es liegen, dass die Gallerie ueberhaupt nicht angezeigt wird, aber auch nicht das echo "leere Variable"? *aufschlauchsteh*
      Bin nach wie vor fuer Input sehr dankbar!

      Kommentar


      • #4
        Könnte es sein, das deine Bilder auf .JPG (Großgeschrieben) enden?
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Zitat von Tom85 Beitrag anzeigen
          HDer debugging part ist sehr interessant, habe aber auch dort bisher keine Hilfe zum Problem gefunden..
          hm, ändere deinen cod eso, dass es ausgaben generiert:

          PHP-Code:
          $dir "../bilder/";

          if( 
          is_dir($dir)){
               
          $dh opendir($dir);
            }
          else{ 
               
          $dir " ist kein verzeichniss";
          }
          if(
          $dh) {
               while ((
          $file readdir($dh)) !== false) {
               echo 
          $file;
          }else{ 
               
          var_dump($dh);

          etc pp.

          Kommentar


          • #6
            PHP-Code:
            $dir "../bilder/"
            Die Datei (bei mir test.2.php) liegt in /var/www/html/ also eigentlich im gleichen Verzeichnis wie der Ordner "bilder" .
            Das müsste dann wohl "./bilder/" heißen, oder? Es sei denn, du nutzt da noch Includes. Schreib am besten:

            $dir = __DIR__ . '/bilder';

            (Wenn es sein muss auch mit Slash am Ende.)

            __DIR__ wird von PHP automatisch durch das Verzeichnis ersetzt, in dem sich die Datei befindet, in der das __DIR__ steht.

            Und Debugging heißt, dass du dir die Inhalte der Variablen anguckst und feststellst, ob sie das sind, was du erwartest. So findet man zum Beispiel… falsche Pfade oder das, was so in $filename steht, wenn keiner der beiden if-Zweige ausgeführt wird und so.

            Kommentar


            • #7
              Vielen Dank fuer die Antworten!

              @lstegelitz: Danke fuer den Tip, die Endungen sind allerdings alle klein!

              @mermshaus: Auch danke! Tatsaechlich, mit ./bilder/ wird das Verzeichnis erkannt!

              @moma & all

              dennoch wird nichts angezeigt...bis zur Variablen $filepath scheint alles zu funktionieren,

              wenn ich

              var_dump($filepath)

              abrufe bevor ich alles in $gallery[] abspeichere, werden im Browser die Bilder angezeigt. Komischerweise mit zwei ca ein cm^2 grossen Platzhaltern fuer andere, allerdings nicht existierende Bilder...
              quasi der code:

              PHP-Code:
              $dir "./bilder/";
              $odiropendir($dir);

              while (
              $filename=readdir($odir))
                      {
                          
              $filepath=$dir.$filename;
                          if (
              is_file($filepath) and ereg("\.jpg$/"$filename))
                          
              var_dump($filepath);
                              {
                                  
              $gallery[]=$filepath;
                              
                              }
                              
                      }
                      
                      
              sort($gallery);
                          foreach (
              $gallery as $bild)
                          {
                              echo 
              "<hr />";
                              echo 
              "<img src='$bild' /><br />";
                          } 
              verrueckt

              Kommentar


              • #8
                wenn ich var_dump($filepath) abrufe bevor ich alles in $gallery[] abspeichere, werden im Browser die Bilder angezeigt. Komischerweise mit zwei ca ein cm^2 grossen Platzhaltern fuer andere, allerdings nicht existierende Bilder...

                ja, den markup meinte ich anfangs, die liste an image tags.
                -
                das var_dump gehört in den block.
                var_dump($gallery) schadet auch nicht,. und die infos könnte man durchaus auch posten.

                Kommentar


                • #9
                  Grade bei Dateien kann man einen Haufen Sachen überprüfen, realpath() löst relative Pfade auf wenn möglich, file_exists() stellt sicher das eine Datei vorhanden ist, is_file() benutzt du ja schon. Einfach mal ein paar Debugausgaben an geeigneten Stellen einbauen...

                  abrufe bevor ich alles in $gallery[] abspeichere, werden im Browser die Bilder angezeigt. Komischerweise mit zwei ca ein cm^2 grossen Platzhaltern fuer andere, allerdings nicht existierende Bilder...
                  Na was denn nun? Werden alle Bilder gezeigt, oder nur ein paar oder was?
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10

                    So, zunaechst einmal moechte ich mich fuer meine Unkonzentriertheit und Unsauberkeit entschuldigen, nach 6 Stunden am selben Problem war ich gestern nicht mehr ganz fit,
                    gleichzeitig einen riesen Dank an alle, die geholfen haben. Drei Probleme haben dazu gefuerhrt, dass die Galerie nicht angezeigt wird.

                    1. Das Verzeichnis war nicht richtig, ./bilder/ war natuerlich die Loesung, vielen Dank fuer den Hinweis!

                    2.
                    PHP-Code:
                    if (is_file($filename) and preg_match("/\.jpg$/"$filename))
                                    {
                                        
                    $gallery[]=$filepath;
                                    
                                    } 
                    ist anscheinend Kaese. Es muss heissen

                    PHP-Code:
                    if (is_file($filepath) and preg_match("/\.jpg$/"$filename))
                                    {
                                        
                    $gallery[]=$filepath;
                                    
                                    } 
                    Obwohl ich da nicht ganz durchblicke. Sind nicht beide Variablen Dateien und muesste die Bedingung dann nicht trotzdem erfuellt sein? Wuerde mich ueber eine Antwort freuen!


                    3. Wenn man ereg("\.jpg$",$filename) da es veraltet ist, mit preg_match ersetzt, braucht man mehr slashs, also preg_match("/\.jpg$/", $filename). Wenn man sich dann im Laufe des Debuggens entscheidet doch wieder ereg zu nehmen, muessen die slashs dann natuerlich wieder raus. , sonst passieren schlimme Dinge. Dann

                    gibt var_dump($gallery) folgendes;

                    array(1) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg" }

                    array(2) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg"
                    [1]=> string(11) "./bilder/.." }

                    array(3) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg"
                    [1]=> string(11) "./bilder/.."
                    [2]=> string(21) "./bilder/aegon-t2.jpg" }

                    array(4) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg"
                    [1]=> string(11) "./bilder/.."
                    [2]=> string(21) "./bilder/aegon-t2.jpg" [3]=> string(10) "./bilder/." }

                    array(5) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg"
                    [1]=> string(11) "./bilder/.."
                    [2]=> string(21) "./bilder/aegon-t2.jpg"
                    [3]=> string(10) "./bilder/."
                    [4]=> string(26) "./bilder/tree_fable-t2.jpg" }

                    array(6) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg"
                    [1]=> string(11) "./bilder/.."
                    [2]=> string(21) "./bilder/aegon-t2.jpg"
                    [3]=> string(10) "./bilder/."
                    [4]=> string(26) "./bilder/tree_fable-t2.jpg"
                    [5]=> string(29) "./bilder/infrared_pond-t2.jpg" }

                    array(7) {
                    [0]=> string(25) "./bilder/autumn_32-t2.jpg"
                    [1]=> string(11) "./bilder/.."
                    [2]=> string(21) "./bilder/aegon-t2.jpg"
                    [3]=> string(10) "./bilder/."
                    [4]=> string(26) "./bilder/tree_fable-t2.jpg"
                    [5]=> string(29) "./bilder/infrared_pond-t2.jpg"
                    [6]=> string(1 "./bilder/hallo.jpg" }

                    was interessanterweise die fuenf Bilder, die ich anzeigen wollte, beinhaltet plus: "./bilder/." und "./bilder/.." In gewisser Weise logisch, in der bash kommt bei ls -a ja auch "." bzw. ".."
                    Dennoch, und vielleicht kann mich da jemand aufklaeren, verstehe ich nicht, weshalb gar nichts angezeigt wurde:
                    var_dump($bild); gibt dann einen Platzhalter fuer ein Bild aus und der Quelltext sagt dann: <img src='' /><br /> , obwohl $gallery dieser Monsterarray ist.

                    Sodenn, fuer Aufklaerung sehr dankbar und schon mal ein Dank an alle Helfer

                    lg Tom

                    Kommentar


                    • #11
                      Obwohl ich da nicht ganz durchblicke. Sind nicht beide Variablen Dateien und muesste die Bedingung dann nicht trotzdem erfuellt sein
                      Lass dir halt einfach ausgeben, was in $filename und $filepath drinnen steht.

                      Wenn man ereg("\.jpg$",$filename) da es veraltet ist, mit preg_match ersetzt, braucht man mehr slashs, also preg_match("/\.jpg$/", $filename). Wenn man sich dann im Laufe des Debuggens entscheidet doch wieder ereg zu nehmen, muessen die slashs dann natuerlich wieder raus. , sonst passieren schlimme Dinge
                      1. Warum um aller Welt sollte man sich zum Debuggen wieder für ereg entscheiden? Vergiss ereg... , ersetze es "permanent" durch preg_ das hat nichts mit debuggen zu tun, das geht mit preg_ genauso.

                      2. Übrigens: du brauchst bei preg_ nicht zwangsweise Slashes rundherum, sondern zwei "Delimiter", das kann auch ein # oder ein @ sein etc... Slashes sind halt so die üblichen eingebürgerten. Wenn man jedoch die Delimiter selbst im Pattern hat/braucht, dann kann man zB eben andere nehmen und spart sich das Escapen.
                      Siehe Doku http://php.net/manual/de/regexp.refe...delimiters.php

                      LG
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Dennoch, und vielleicht kann mich da jemand aufklaeren, verstehe ich nicht, weshalb gar nichts angezeigt wurde:
                        var_dump($bild); gibt dann einen Platzhalter fuer ein Bild aus und der Quelltext sagt dann: <img src='' /><br /> , obwohl $gallery dieser Monsterarray ist.
                        Das lässt sich ohne Code-Einsicht nicht sagen. Prinzipiell passiert da das:

                        PHP-Code:
                        <?php

                        $gallery 
                        = array(
                            
                        "./bilder/autumn_32-t2.jpg",
                            
                        "./bilder/..",
                            
                        "./bilder/aegon-t2.jpg",
                            
                        "./bilder/.",
                            
                        "./bilder/tree_fable-t2.jpg",
                            
                        "./bilder/infrared_pond-t2.jpg",
                            
                        "./bilder/hallo.jpg"
                        );

                        foreach (
                        $gallery as $bild) {
                            echo 
                        "<hr />";
                            echo 
                        "<img src='$bild' /><br />";
                        }

                        // <hr /><img src='./bilder/autumn_32-t2.jpg' /><br />
                        // <hr /><img src='./bilder/..' /><br />
                        // <hr /><img src='./bilder/aegon-t2.jpg' /><br />
                        // <hr /><img src='./bilder/.' /><br />
                        // <hr /><img src='./bilder/tree_fable-t2.jpg' /><br />
                        // <hr /><img src='./bilder/infrared_pond-t2.jpg' /><br />
                        // <hr /><img src='./bilder/hallo.jpg' /><br />

                        Kommentar


                        • #13

                          Warum um aller Welt sollte man sich zum Debuggen wieder für ereg entscheiden? Vergiss ereg... , ersetze es "permanent" durch preg_ das hat nichts mit debuggen zu tun, das geht mit preg_ genauso.
                          Seh ich ein.

                          @mermshaus

                          ...und das ist ja anscheinend nich was passiert, oder?
                          egal vielen Dank in jedem Fall.

                          Alles weitere steht wohl auf einem anderen Blatt

                          lg Tom

                          Kommentar


                          • #14
                            Zitat von Tom85 Beitrag anzeigen
                            ...und das ist ja anscheinend nich was passiert, oder?
                            Wenn du deinen Code nicht debuggst und ihn uns nicht zeigst, wird das Mysterium auf ewig ungeklärt bleiben.

                            So ist das eben.

                            Kommentar

                            Lädt...
                            X