.php Datei als background-image



  • Yo!

    Überall liest man, dass das funktionieren sollte. Eine .php Datei als background-image angeben. Diese .php Datei repräsentiert natürlich ein Bild mittels image***() Funktion. Header werden gesetzt (Ist das eig. nötig? Funkt auch ohne, beim img-tag). Aber es wird einfach nix angezeigt...

    // Das geht

    <img src = "img.php">
    

    // Aber das nicht

    <div style = "background-image: url(img.php);">bla</div>
    

    Warum nicht?



  • Eyy, als externer styhesheet funktioniert es!

    div#test
    {
    background-image: url(img.php);
    ...
    


  • Muss aber nicht in jeden Browser. Zeig mal den kleinen snippsel wie du das Bild an den Browser "sendest".

    Eventuell musst du einfach nur den korrekten Header zum raussenden des Bildes angeben. Mime-type eventuell falsch? Einfach mal her mit dem Code zur besseren Einsicht...



  • Probiers mal damit...

    header('Content-Type: image/yourimagetype');
    


  • Nene, als "inline-style" haut es wirklich nicht hin...

    // img.php
    <?
    header("Content-type: image/png");
    
    $img = imagecreatefrompng("test.png");
    
    // ...
    
    imagepng($img);
    ?>
    


  • Edit:

    Achso, um es zu verdeutlichen:

    Könnte es Zufall gewesen sein, dass das Bild zu laden ging? Hast Du den Dateipfad Testweise abgeändert, während du gleichzeitig von <img src="image.php"> auf .someclass { background-image: url(image.php); } umgemoddelt hast?

    Es kann aber auch sein, dass im HTTP-Header mehr angegeben werden muss, als nur das Mime des Bildes. Eventuell hat dein Browser da eine lücke, dass das Bild via .someclass { background-image: url(image.php); } trotzdem geladen wird.

    Auf den Umstand musst du dich aber nicht einlassen, weil ich zufällig genau weiss, dass solche Bildeinbinderei auch via <img ...> funktioniert. Der Server ist wohl einfach nur "offen" eingestellt und enthält wohl kaum eine Automatisierung der komplettierung von Header-Angaben in PHP.

    Probiere mal folgendes:

    header('Content-Disposition: Attachment;filename=image.png');
    header('Content-type: image/png');
    

    Da könnte es aber passieren, dass du das Bild auf einmal zum Download angeboten bekommst, was aber nicht sein kann, weil das Bild bzw. die URL nicht in der Adressleiste aufgerufen, sondern via <img ...> eingebunden wird.

    Edit: Vergessen: Es wäre auch nicht schlecht, wie im folgenden Abschnitt zu sehen ist, auch noch zusätzlich noch auch Content-Length anzugeben.

    <?php
    //    Output handler
    function output_handler($img) {
        header('Content-type: image/png');
        header('Content-Length: ' . strlen($img));
        return $img;
    }
    
    //    Image output
    ob_start("output_handler");
    imagepng($im);
    ob_end_flush();
    ?>
    

    Ansonsten noch ein kleiner Tipp:

    Im Fehlerfall gibt ImageCreateFromPNG() eine leere Zeichenkette zurück. Zudem wird eine Fehlermeldung erzeugt, die im Browser als Verbindungsabbruch dargestellt wird. Zum besseren Debuggen wird das folgende Beispiel einen JPEG-Fehler erzeugen:

    function Loadpng ($imgname) {
        $im = @ImageCreateFromPNG ($imgname); /* Versuch, Datei zu öffnen */
        if (!$im) {                           /* Prüfen, ob fehlgeschlagen */
            $im = ImageCreate (150, 30);      /* Erzeugen eines leeren Bildes */
            $bgc = ImageColorAllocate ($im, 255, 255, 255);
            $tc  = ImageColorAllocate ($im, 0, 0, 0);
            ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc); 
            /* Ausgabe einer Fehlermeldung */
            ImageString($im, 1, 5, 5, "Fehler beim Öffnen von: $imgname", $tc); 
        }
        return $im;
    }
    

    Quelle: http://php.net/manual/de/function.imagecreatefrompng.php


Anmelden zum Antworten