Ordner auslesen

Sasser

Erfahrenes Mitglied
Hallo Leute!

Bisher habe ich immer Bilder aus einem Ordner mit der Endung .jpg ausgelesen. Nun möchte ich gern alle Bilder mit verschiedenen Formaten auslesen!

PHP:
$dirname = "homes/";
$endung = ".jpg";
$dir = dir($dirname);
$i = "0";
while ($filename = $dir->read())
{
$alt = str_replace($endung,'',$filename);
if ($filename <> $alt)
{
echo "fadeimages[".$i."]=[\"".$dirname.$filename."\", \"index.php?action=contact_home&home=".$alt."\", \"_self\"]\n";
$i++;
}
}
$dir->close();
 
vielleicht so, hast du denn den upload jetzt hinbekommen?

PHP:
function findFileExtension($file_name){
   $exts = split("[/\\.]", $file_name);
   $n = count($exts) - 1;
   $exts = $exts[$n];
   $exts = '.'.strtolower($exts);
 
   return $exts;
}
$dirname = "homes/";
$dir = opendir ($dirname);
$i = 0;
while ($filename = readdir ($dir)){
   if(@getimagesize($dirname.$filename)){
      $alt = str_replace(findFileExtension($filename),'',$filename);
      echo "fadeimages[".$i."]=[\"".$dirname.$filename."\", \"index.php?action=contact_home&home=".$alt."\", \"_self\"]\n";
      $i++; 
   }
}
closedir($dir);
 
Zuletzt bearbeitet von einem Moderator:
Nur prüft es nicht ob es tatsächlich ein Bild ist und auch dargestellt werden kann.

Davon hat er auch nichts geschrieben.
Und da ich davon ausgehe, dass er lokale Ordner meint, gehe ich davon aus, dass es sich um "sichere" Quellen handelt.
Und nach Dateitypen ausschließen beherrscht [phpf]glob[/phpf] ausgezeichnet.
 
Aber du weißt doch wie es ist in der Wirklichkeit, dafür bist du schon zu lange im Forum ;). Wenn ich Quelltext poste versuche ich es schon richtig zu machen, bringt ja auch nichts jemanden was falschen zu zeigen, weil meistens wird es 1 zu 1 übernommen. Wo bei wenn ich an die ganzen Webseiten denke wo die Post und Get Vars direkt mit der Datenbank kompromitiert werden....;)

Edit:

glob() kann extension filtern aber wer sagt mit das *.jpg eine Bilddatei ist und nicht irgendein ausführbarer Code?
 
Zuletzt bearbeitet von einem Moderator:
Ja, aber die Fotos in einem Ordner kommen üblicherweise aus zwei Quellen...

Entweder per FTP:
Dann hat der Benutzer einen FTP Zugang und darf Dateien hochladen wie er möchte. Damit setzt man Vertrauen in den Benutzer und somit auch auf die Validität der Bilder.

Per Upload:
Dann ist es Sache des Uploadskriptes zu prüfen, ob es ein valides Bild ist.

Aber in keinem Fall würde ich dem Skript zum Auslesen diese Aufgabe aufbürden...
Gerade wenn es viele Dateien gibt, die er auslesen muss, könnte der Aufruf von [phpf]getimagesize[/phpf] zu einem Flaschenhals werden (reine Vermutung gerade).

Also warum das Skript damit belasten? ;)

Edit:

glob() kann extension filtern aber wer sagt mit das *.jpg eine Bilddatei ist und nicht irgendein ausführbarer Code?

Und seit wann benutzen wir [phpf]eval[/phpf] oder [phpf]include[/phpf] um Bilder auszuführen? ;)
Wenn der Server jpg Dateien als PHP parst, ist nicht PHP daran schuld ;)
 
Hm, ja, der Zugriff muss ja auch direkt möglich sein...?
Sonst könnte der Browser ja das Bild gar nicht laden... Abgesehen von einem Szenario, wo ein PHP Skript das Bild einliest und wieder ausgibt.

Zu dem BB Code über manipulierte Bilder ist mir jetzt spontan nur der Fall in Erinnerung, wo Windows die Probleme mit der Verarbeitung hatte und Schadcode ausgeführt hat. Dort war aber auch der Header der Datei ganz regulär, sprich [phpf]getimagesize[/phpf] hätte sich auch nicht daran aufgehalten.
 
Sonst könnte der Browser ja das Bild gar nicht laden... Abgesehen von einem Szenario, wo ein PHP Skript das Bild einliest und wieder ausgibt.

meistens fehlt diese Direktive im Apachen die völlig ausreicht.

Code:
 Options -Indexes +FollowSymlinks

es geht natürlich auch so, was den fix im BB -Forum darstellt. Das hat natürlich auch noch den entscheidenen Vorteil, daß das Verzeichniss ausserhalb des www roots liegen kann.

PHP:
if(file_exists($BildPfad)){
   header("Content-Type: image/jpeg");
   $ImgFile = @fopen($BildPfad, "r");
   $ImgContent = fread($ImgFile, filesize($BildPfad));
   fclose($ImgFile);
}
echo $ImgContent;
 
Zurück