Ankündigung

Einklappen
Keine Ankündigung bisher.

script läuft aber gibts tipps zur verbesserung od. expansion

Einklappen

Neue Werbung 2019

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

  • script läuft aber gibts tipps zur verbesserung od. expansion

    hab ein kleines aber feines script geschrieben mit dem ich aus einem gallery-ordner alle beinhalteten ordner auslesen kann. wenn ich dann da drauf klicke werden alle bilder in dem ordner angezeigt. wenn ich auf das bild klicke wird das bild gross angezeigt.

    das sieht so aus: www.promadesign.com/test/gallery.php

    jetzt habe ich mir überlegt dass man bei der grossansicht des bildes einfach einen pfeil machen könnte dass das nächste bild der ordners anzeigt.
    könnte man die dateien alle in ein array einlesen? hab mir das manual durchgelesen, komme aber zu keinem rechten ergebnis da ich nicht weiss was ich denn für befehle anwenden soll:

    wie kann ich die dateien in ein array einlesen? mit einer whileschleife und array_push?

    ausgeben kann ich sie dann ja mit einer while schleife. sortieren kann ich nur nach schlüsseln oder? nicht aber nach datum der erstellung? sprich dass die neueste datei ganz oben steht? mit sort() usw. geht das ja leider nicht. hab ja nur den dateinamen zur verfügung und der muss so bleiben.

    hier mal mein script. klein aber fein und selbstgeschrieben. *g*
    ich weiss ja es gibt massenhaft solcher scripte, aber ich bin kein copy&paste fan und schreibe meine sachen gern selber.
    Code:
    <?php
    
    include 'functions.php'; // HIER INCLUDE ICH DIE FUNKTIONEN pd_draw_link() usw.
    
    switch ($action) {
      case 'show_pic':
        $dir = 'gallery/'.$gallery.'/';
    	echo pd_draw_imagelink($PHP_SELF.'?action=show_thumbs&gallery='.$gallery, $dir.$pic, 'Zurück zur Gallerie', 'Zurück zur Gallerie').'
    ';
        echo pd_draw_link($PHP_SELF.'?action=show_thumbs&gallery='.$gallery, 'Zurück zur Gallerie', 'Zurück zur Gallerie');
      break;
    
      case 'show_thumbs':
        if (isset($gallery)) {
          $dir = 'gallery/'.$gallery.'/';
          $handle = opendir($dir);
          echo pd_draw_link($PHP_SELF, $dir, $dir).':
    ';  // ANZEIGE DES AKTIVEN ORDNERS UND BACKLINK
          while ($file = readdir($handle)) {
            if($file != '.' && $file != '..' && is_file($dir.$file)) {
              echo pd_draw_link($PHP_SELF.'?action=show_pic&gallery='.$gallery.'&pic='.$file, $file, $file).'
    ';
            }
          }
        }
      break;
    
      default:
        $dir = 'gallery/';
        $handle = opendir($dir);
        while ($file = readdir($handle)) {
          if ($file != '.' && $file != '..' && is_dir($dir.$file)) {
    	    $image=$dir.$file;
            echo pd_draw_link($PHP_SELF.'?action=show_thumbs&gallery='.$file, $file).'
    ';
          }
        }
    };
    ?>
    mfg Alex

  • #2
    öhm... welche ips savest du denn da ?
    http://www.promadesign.com/ip.txt

    http://www.promadesign.com/test/gall...gallery=../../.

    zudem ist dein Script nen bissl kritisch

    Kommentar


    • #3
      tach,

      nicht ganz so prickelnd ist, dass man bis in dein heimatverzeichnis alle verzeichnisinhalte auslesen kann...

      http://www.promadesign.com/test/gall..../../../../../

      Gruss

      Kommentar


      • #4
        das mit der sicherheit ändere ich noch. wie weiss nur nicht genau. die ips sind vom counter damit der nicht sinnlos vor sich hin zählt.

        kann ich das mit den arrays irgendwie lösen? wäre super wenn ihr mir da helfen könntet. was kann ich gegen das problem mit den auslesbaren verzeichnissen machen? die daten via formular schicken? oder via session?
        mfg Alex

        Kommentar


        • #5
          Du hast da doch eine Schleife, in der du alle Bilder des Ordners ausgeben lässt. Dabei speicherst du die Dateinamen der Bilder gleich in einem Array und das speicherst du in einer Session. Damit steht dir auch bei der Bildanzeige das Array zur Verfügung. Hier ermittelst du mit array_keys() den Schlüssel des aktuellen Bildes im Array, den Pfeil verlinkst du dann auf das Bild, das sich "einen Schlüssel weiter" befindet.

          Alles klar?

          Kommentar


          • #6
            wie kann ich die bilder in ein array speichern? mit array_push? dann gebe ich auch die anderen variablen einfach über session weiter dann kann mir das mit der sicherheitslücke und der ansicht der anderen verzeichnisse auch nicht passieren oder?

            nur wie ich die bilder in das array reinbekomme ist mir nicht klar. mit dem array_push?
            mfg Alex

            Kommentar


            • #7
              Ähhh..?
              http://tut.php-q.net/array.html

              Kommentar


              • #8
                ich hab mein script jetzt geändert und lese die ordner jetzt in ein array ein. damit stelle ich sicher dass keiner die verzeichnisse hochgehen kann. jedoch habe ich das problem dass ich jetzt nicht weiss wie ich bei dem link den ordner weitergeben kann?

                vorher:
                Code:
                  default:
                    $dir = 'gallery/';
                    $handle = opendir($dir);
                    while ($file = readdir($handle)) {
                      if ($file != '.' && $file != '..' && is_dir($dir.$file)) {
                	    $image=$dir.$file;
                        echo pd_draw_link($PHP_SELF.'?action=show_thumbs&gallery='.$file, $file).'
                ';
                      }
                    }
                jetzt eben mit der session und der variable. aber wie kann ich jetzt den ordner weitergeben im link?
                Code:
                  default:
                    $dir = 'gallery/';
                    $handle = opendir($dir);
                    while ($file = readdir($handle)) {
                      if ($file != '.' && $file != '..' && is_dir($dir.$file)) {
                	    $dirs[] = $file;
                        echo pd_draw_link($PHP_SELF.'?sid='.$SID.'&action=show_thumbs', $file).'
                ';
                        $_SESSION['ordner'] = $file;
                      }
                    }
                denn dann wird bei jedem durchlauf der while schleife ja die $_SESSION ['ordner'] wieder überschrieben und es steht nur der letzte wert drin. ?!
                mfg Alex

                Kommentar


                • #9
                  Zitat von Promaetheus
                  ich hab mein script jetzt geändert und lese die ordner jetzt in ein array ein. damit stelle ich sicher dass keiner die verzeichnisse hochgehen kann.
                  und was soll das bringen?
                  dein script ist immer noch offen wie ein scheunentor, abhilfe:
                  -> knipse zuerst mal register_globals aus! http://de.php.net/register_globals
                  -> Prüfe importierte Parameter. Traue niemandem http://www.php-faq.de/q/q-sicherheit-parameter.html
                  in deinem fall z.b.:

                  PHP-Code:
                  $gallery=str_replace('../'''$_GET['gallery']); 
                  Zitat von Promaetheus
                  jedoch habe ich das problem dass ich jetzt nicht weiss wie ich bei dem link den ordner weitergeben kann?
                  was macht denn deine funktion:
                  PHP-Code:
                  pd_draw_link($PHP_SELF.'?sid='.$SID.'&action=show_thumbs'file 

                  Kommentar


                  • #10
                    so. ich hab das script jetzt komplett neu gemacht. mit sessions. ist es jetzt sicher(er)?
                    oder wüsstet ihr hier auch noch verbesserungsvorschläge?
                    hab unten das print_r($_SESSION) angefügt um zu sehen welche variablen immer vorhanden sind.
                    so dass ich keine überflüssigen werte gespeichert habe.

                    würde mich freuen wenn ihr mir bescheid geben würdet ob ihr das nun gut findet, bzw. ob es ok ist. ;o)
                    besser als das 1. ist es allemal glaube ich. jedenfalls sicherer denke ich mal.

                    freue mich auf eure kommentare. so sieht es jetzt aus: http://www.promadesign.com/test/gallery.php

                    und das ist das neue script (nur mal die anzeige der dateinamen, bilder später. ;o)):
                    PHP-Code:
                    include 'functions.php'// hier include ich die functionen pd_draw_link usw.

                    switch ($action) {
                      case 
                    'show_pic':
                        
                    $checkedvar = isset($_SESSION['pics'][$_GET['pic']]) ? $_GET['pic'] : exit;
                        
                    $_SESSION['active_pic'] = $checkedvar;
                        echo 
                    '[b]<u>'.$_SESSION['dirs'][$_SESSION['active_dir']].':</u>[/b] ';
                        echo 
                    '('.pd_draw_link($PHP_SELF.'?SID='.$SID.'&action=show_thumbs&gallery='.$_SESSION['active_dir'], 'Zurück''Zurück zur Gallerie').')

                    '
                    ;
                        echo 
                    $_SESSION['pics'][$checkedvar];
                      break;

                      case 
                    'show_thumbs':
                        
                    $checkedvar = isset($_SESSION['dirs'][$_GET['gallery']]) ? $_GET['gallery'] : exit;
                        unset(
                    $pics);
                        unset(
                    $_SESSION['pics']);
                        unset(
                    $_SESSION['active_pic']);
                        
                    $_SESSION['active_dir'] = $checkedvar;
                        if (isset(
                    $checkedvar)) {
                          
                    $dir 'gallery/'.$_SESSION['dirs'][$checkedvar].'/';
                          
                    $handle opendir($dir);
                          echo 
                    '[b]<u>'.$_SESSION['dirs'][$checkedvar].':</u>[/b] ';
                          echo 
                    '('.pd_draw_link($PHP_SELF.'?SID='.$SID'Zurück''Zurück zur Gallerieauswahl').')

                    '
                    ;
                          
                    $i=0;
                          while (
                    $file readdir($handle)) {
                            if(
                    $file != '.' && $file != '..' && is_file($dir.$file)) {
                              
                    $pics[] = $file;
                              echo 
                    pd_draw_link($PHP_SELF.'?SID='.$SID.'&action=show_pic&pic='.$i$file$file).'
                    '
                    ;
                              
                    $i++;
                            }
                            
                    $_SESSION['pics'] = $pics;
                          }
                          echo 
                    '
                    '
                    .pd_draw_link($PHP_SELF.'?SID='.$SID'Zurück zur Auswahl einer Gallerie''Zurück').':

                    '
                    ;
                        }
                      break;

                      default:
                        unset(
                    $dirs);
                        unset(
                    $_SESSION['dirs']);
                        unset(
                    $_SESSION['active_dir']);
                        unset(
                    $_SESSION['pics']);
                        unset(
                    $_SESSION['active_pic']);
                        
                    $dir 'gallery/';
                        
                    $handle opendir($dir);
                        
                    $i=0;
                        while (
                    $file readdir($handle)) {
                          if (
                    $file != '.' && $file != '..' && is_dir($dir.$file)) {
                            
                    $dirs[] = $file;
                            echo 
                    pd_draw_link($PHP_SELF.'?sid='.$SID.'&action=show_thumbs&gallery='.$i$file).'
                    '
                    ;
                            
                    $i++;
                          }
                        }
                        
                    $_SESSION['dirs'] = $dirs;
                    };

                    // SESSION-VARIABLENCHECK:
                    echo '<hr><pre>Session Variablencheck:
                    '
                    ;
                    print_r($_SESSION);
                    echo 
                    '</pre>'
                    session_start steht natürlich ganz ganz oben vor jeglicher ausgabe. ;o)
                    mfg Alex

                    Kommentar

                    Lädt...
                    X