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

Ausgabe Bild über header()

cb1982

Mitglied
Hallo zusammen,

teilweise mit der Hilfe dieses Forums habe ich (vor allem zu Testzwecken und Erfahrung sammeln) eine Klasse gebaut, die Bilder vergrößert oder verkleinert ohne das Seitenverhältnis zu verändern.
Während die Logik nicht so das Problem war, hatte ich Probleme das per imagejpeg() aus der gdlib erstellte Bild am Bildschirm auszugeben.
Hier habe ich die Lösung in Form einer eigenen Datei bekommen, die header('Content-Type: image/jpeg'); enthält.

Das funktioniert auch weitestgehend ganz gut. Allerdings habe ich auf einigen Webservern anscheinend ein Problem mit der Pfadangabe und um zu erkennen wo das Script aussteigt habe ich an einigen Stellen per fwrite in ein Logfile geschrieben.

Jetzt zum Problem.
Nutze ich in der Funktion resizeImageProportion nicht meine Funktion writeLog funktioniert es 1a.
Sobald ich die Zeilen einkommentiere erhalt ich keine Ausgabe mehr...

So, nun der Quellcode.

1. Hier wird an der passenden Stelle der Seite das Bild eingefügt

PHP:
echo '<img src="image.php?orgPath='.c_base_dir . $angebot['offer_path_prodimage_thumb'].'&destPath=dummy.jpg&maxWidth=100&maxHeight=100">';

2. dies ist die image.php. Sie bekommt den Pfad zum Bild per $_GET

PHP:
<?php
header('Content-Type: image/jpeg');
include '../new_include/class/class_pictures.php';
$bild1 = new thumb();
$bild1->resizeImageProportion($_GET['orgPath'],'abc.jpg','202','130');
?>

3. Hier die unter 2. includierte 'class_pictures.php'
PHP:
<?php
class thumb {
public function resizeImageProportion($orgPath,$destPath,$maxWidth, $maxHeight){
/*        $this->writeLog($orgPath); */
        $orgSize['width']=$this->getSize($orgPath)[0];
        $orgSize['height']=$this->getSize($orgPath)[1];
/*        $this->writeLog("Größe ermittelt"); */
        $orgImage = imagecreatefromjpeg($orgPath);
/*        $this->writeLog("Original Bild Objekt erstellt"); */
        $newImage = $orgImage;
     
        if ($orgSize['width'] > $maxWidth) {
/*            $this->writeLog("Breite wird angepasst"); */
            $resizePercent = $maxWidth / $orgSize['width']*100;
            $resizeFactor = 100/$resizePercent;
            $destSize['width']=round($orgSize['width']/$resizeFactor,0);
            $destSize['height']=round($orgSize['height']/$resizeFactor,0);
            $newImage = imagecreatetruecolor($destSize['width'],$destSize['height']);
            imagecopyresized($newImage,$orgImage,0,0,0,0,$destSize['width'],$destSize['height'],$orgSize['width'],$orgSize['height']);
        }
        if(isset($destSize)) {
            $orgSize['width'] = $destSize['width'];
            $orgSize['height'] = $destSize['height'];
        } 
        if ($orgSize['height'] > $maxHeight) {
/*            $this->writelog("Höhe wird angepasst"); */
            $resizePercent = $maxHeight / $orgSize['height']*100;
            $resizeFactor = 100/$resizePercent;
            $destSize['width']=round($orgSize['width']/$resizeFactor,0);
            $destSize['height']=round($orgSize['height']/$resizeFactor,0);
            $orgImage = $newImage;
            $newImage = imagecreatetruecolor($destSize['width'],$destSize['height']);
            imagecopyresized($newImage,$orgImage,0,0,0,0,$destSize['width'],$destSize['height'],$orgSize['width'],$orgSize['height']);
        } 
            imagejpeg($newImage);
            $this->writeLog("Fertiges Bild angelegt / ausgegeben");
    }
 
 
    private function getSize($path) {
        $sizes = getimagesize($path);
        return($sizes);
    }
 
    private function writeLog($phrase) {
        $file = fopen('log_class_thumb.txt','a');
        $datum = new dateTime();
        $timestamp = $datum->getTimeStamp();
        $timestamp = $datum->format('Y-m-d H:i:s');
        fwrite($file,$timestamp . " - " . $phrase . "\r\n");
        fclose($datei);
    }
}
?>


Kann mir jemand sagen warum nichts mehr anzeigt wird sobald die Log-Datei geschrieben wird?
Oder ist diese Lösung generell nicht gut??
 
Zuletzt bearbeitet:
Ich tippe darauf, dass PHP im Hintergrund was zu meckern hat und ein Warning wirft. Was auch nicht wirklich verwunderlich ist, denn hier
PHP:
$file = fopen('log_class_thumb.txt','a');
legst du einen Datei-Handle $file an, allerdings benutzt du dann
PHP:
fclose($datei);
 
Wenn man mit PHPs Image-Funktionen arbeitet, ist es immer wieder hilfreich den Image-Header durch einen Text-Header zu ersetzen, nur für den Fall, falls PHP unerwartet Text sendet - wie bdt600 schon angedeutet hat.

Ersetze mal deine header()-Anweisung durch: header('Content-Type: text/plain');
 
Zurück
Oben