• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem bei Bild mit PHP anzeigen

danielocity

Mitglied
Hallo!

Mal wieder geht es um ein Problem bei meinem Bilderupload. Und zwar: Wenn ich mit einer PHP-Datei ein Bild auslese welches transparente Flächen hat wird es falsch angezeigt.

Mein aktueller PHP Code für PNG-Bilder sieht so aus:
PHP:
Header("Content-type: image/png");
$im = imagecreatefrompng(ROOT."/uploads/".$thumb."".$_GET["src"].".png");
$bg_color = imagecolorat($im,1,1);
imagecolortransparent($im, $bg_color);
imagepng($im);
imagedestroy($im);
Die Variable $thumb wird je nachdem ob $_GET["thumb"] 1 oder 0 ist als "thumbs/" definiert. So also ich hab es geschafft das dieser Code die transparenten Stellen auch transparent anzeigt jedoch alles was nicht transparent ist komisch anzeigt (http://aicero.freeunix.net/fehler.png).

Hat jemand eine Lösung?

Danke im Vorraus!


Grüße Daniel
 
Mir ist eben noch ein Fehler in meinem Code aufgefallen. Und zwar ist das Ding das größere einfarbige Flächen auch transparent gemacht werden durch dieses Script.
 
Also ich hab vorher z.B. ein transparentes Bild hochgeladen und diese Datei soll das hochgeladene Foto anzeigen. Wenn ich das Bild über die direkte URL aufrufe passt alles aber ich möchte auch dass es mithilfe einer PHP Datei transparent gezeigt wird wo es transparent ist.
 
Klar doch:

PHP:
$file2 = 'uploads/'.$_GET["src"].'.'.$_GET["typ"];

if($_GET["typ"] == 'jpg'){
Header("Content-type: image/jpeg");
}elseif($_GET["typ"] == 'png'){
Header("Content-type: image/png");
}elseif($_GET["typ"] == 'gif'){
Header("Content-type: image/gif");
}
echo file_get_contents( $file2 );
 
Bei dem Script kann durch geschickte Wahl der Parameter (grob: src=../index&typ=php) auch der Quellcode beliebiger PHP-Dateien auf dem Server ausgegeben werden. Du solltest sicherstellen, dass sich $file2 im korrekten Verzeichnis befindet.

Etwa so:

PHP:
$uploadsDir = realpath('uploads');

$file2 = realpath($uploadsDir . '/' . $_GET['src'] . '.' . $_GET['typ']);

if (strpos($file2, $uploadsDir) !== 0) {
    // Inhalt von $file2 beginnt nicht mit $uploadsDir
    die('Falsches Verzeichnis angegeben');
}

if($_GET["typ"] == 'jpg'){
    Header("Content-type: image/jpeg");
}elseif($_GET["typ"] == 'png'){
    Header("Content-type: image/png");
}elseif($_GET["typ"] == 'gif'){
    Header("Content-type: image/gif");
} else {
    die('Falscher Dateityp angegeben'); // weiß nicht, ob das gewollt ist
}

readfile($file2); // äquivalent zu echo file_get_contents, aber schneller
 
Zurück
Oben