php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.11.2005, 19:23  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard 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 Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.11.2005, 19:30  
Clan
Gast
 
Beiträge: n/a
Standard

ö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
 
Alt 11.11.2005, 19:32  
Gast
 
Beiträge: n/a
Standard

tach,

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

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

Gruss
 
Alt 11.11.2005, 19:36  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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 Alexander Haim
Promaetheus ist offline  
Alt 11.11.2005, 19:37  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

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?
Corvin ist offline  
Alt 11.11.2005, 19:49  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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 Alexander Haim
Promaetheus ist offline  
Alt 11.11.2005, 19:50  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Ähhh..?
http://tut.php-q.net/array.html
Corvin ist offline  
Alt 12.11.2005, 18:55  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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 Alexander Haim
Promaetheus ist offline  
Alt 12.11.2005, 20:53  
Gast
 
Beiträge: n/a
Standard

Zitat:
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:
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 
 
Alt 13.11.2005, 18:58  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

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 Alexander Haim
Promaetheus ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Script beendet sich ohne Fehlermeldung Zahl PHP Tipps 2006 6 04.06.2006 20:41
[Erledigt] Verzögerung durch included Script? Umgehen? PHP Tipps 2005-2 4 10.07.2005 19:26
[Erledigt] Relay Script PHP-Fortgeschrittene 11 01.06.2005 16:02
[Erledigt] Hilfe bei Download Verwaltungs Script PHP Tipps 2005 8 04.05.2005 10:29
"das" Script oder "der" Script?? Simbo Off-Topic Diskussionen 31 16.09.2004 17:04


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.