kostenloser Webspace werbefrei: lima-city


Wie Dateien übergeben?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    funnyweb

    Kostenloser Webspace von funnyweb

    funnyweb hat kostenlosen Webspace.

    Hallo,

    in PHP kann man ja mit include() Dateien einbinden, allerdings nur textbasierte Dateien, wenn ich es richtig verstanden habe.

    1. Frage: Wie kann ich z. B. png-Dateien übergeben?

    2. Frage: Ich habe mit include() eine Funktion eingebaut, dass zwei CSS-Dateien zu einer einzigen zusammengesetzt übergeben werden. Soweit funktioniert es scheinbar gut. Wenn ich die php-Datei allerdings mit
    <link href="datei.php?css=beide" rel="stylesheet" type="text/css">
    einbinde, dann erkennt der Browser scheinbar nicht, dass es sich um eine angebliche CSS-Datei handelt. Wenn ich nämlich den Quelltext des Stylesheets in Firefox anzeigen lasse, zeigt er zwar den Text richtig an, aber z. B. mit Zeilennummerierung, die er bei normalen CSS weglässt. Wie kann ich also die Dateien zusammengesetzt übergeben, sodass dieser Fehler nicht auftritt?

    Ausschnitt aus dem simplen Quellcode von datei.php:
    if($_GET["css"]=="bt") {
    	include("css/bootstrap-theme.min.css");
    }
    elseif($_GET["css"]=="b") {
    	include("css/bootstrap.min.css");
    }
    elseif($_GET["css"]=="beide") {
    	include("css/bootstrap.min.css");
    	echo("\n");
    	include("css/bootstrap-theme.min.css");
    }

    Ich dachte, das steht bestimmt an jeder Ecke im Internet, aber ich finde anscheinend nicht die richtigen Suchwörter …

    Beitrag zuletzt geändert: 26.11.2015 20:15:45 von funnyweb
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hallo,

    das sieht schon ganz gut aus, du hast nur vergessen, das dein Browser gerne noch wissen will, um was es sich bei dieser Datei handelt. Das weiß er derzeit noch nicht. Aber geben wir eine header-info mit, dann weiß dein Browser, dass es sich um ein css handelt ;)

    header('Content-type: text/css');
    
    if($_GET["css"]=="bt") {
        include("css/bootstrap-theme.min.css");
    }
    elseif($_GET["css"]=="b") {
        include("css/bootstrap.min.css");
    }
    elseif($_GET["css"]=="beide") {
        include("css/bootstrap.min.css");
        echo("\n");
        include("css/bootstrap-theme.min.css");
    }


    Das Zauberwort an der Stelle bei Google heißt: Dynamic Style Sheets

    MFG Micha
  4. Autor dieses Themas

    funnyweb

    Kostenloser Webspace von funnyweb

    funnyweb hat kostenlosen Webspace.

    michaelkoepke schrieb:
    Hallo,

    das sieht schon ganz gut aus, du hast nur vergessen, das dein Browser gerne noch wissen will, um was es sich bei dieser Datei handelt. Das weiß er derzeit noch nicht. Aber geben wir eine header-info mit, dann weiß dein Browser, dass es sich um ein css handelt ;)

    header('Content-type: text/css');
    
    if($_GET["css"]=="bt") {
        include("css/bootstrap-theme.min.css");
    }
    elseif($_GET["css"]=="b") {
        include("css/bootstrap.min.css");
    }
    elseif($_GET["css"]=="beide") {
        include("css/bootstrap.min.css");
        echo("\n");
        include("css/bootstrap-theme.min.css");
    }


    Das Zauberwort an der Stelle bei Google heißt: Dynamic Style Sheets

    MFG Micha
    Perfekt! Danke für deine schnelle Hilfe, das ist exakt die Antwort, die ich gesucht habe!!! :smile:
  5. Andere Möglichkeit:
    <link href=" <?php $css="beide"; include "datei.php";?> " rel=...

    und der datei.php
    if($css=="beide"){
        echo("css/bootstrap-theme.min.css");
    }
    if ...


    Damit schreibt die datei.php den CSS-Link in deine PHP-Seite.

    Übrigends: Durch die Verwendung von "switch($css)" wird dein PHP-Code der datei.php übersichtlicher.


    Wenn du ein Bild in deine PHP-Seite einbauen möchtest, kannst du auch einfach
    echo("<img src=' ".$Dateipfad." '>");

    schreiben und schon steht es da wie im gewöhnlichem HTML.

    Du kannst auch mit fopen() eine Datei öffnen um sie in PHP zu bearbeiten.
  6. Autor dieses Themas

    funnyweb

    Kostenloser Webspace von funnyweb

    funnyweb hat kostenlosen Webspace.

    test42test schrieb:
    Andere Möglichkeit:
    <link href=" <?php $css="beide"; include "datei.php";?> " rel=...

    und der datei.php
    if($css=="beide"){
        echo("css/bootstrap-theme.min.css");
    }
    if ...


    Damit schreibt die datei.php den CSS-Link in deine PHP-Seite.

    Übrigends: Durch die Verwendung von "switch($css)" wird dein PHP-Code der datei.php übersichtlicher.

    […]
    Auch eine gute Idee! Vielen Dank, das probiere ich sofort mal aus … dann ist es noch weniger manipulationsanfällig. :smile:

    Edit:
    Kurze Frage noch – was ist daran falsch:
    if(($_GET["img"]!=null)&&($_GET["img"]!="")) {
    				$finfo = finfo_open(FILEINFO_MIME_TYPE);
    				header('Content-type: '.finfo_file($finfo, "img/".$_GET["img"]));
    				finfo_close($finfo);
    				include ("img/".$_GET["img"]);
    			}
    Z. B. mit datei.php?img=smiley.jpg wird dann img/smiley.jpg angesteuert. Das funktioniert aber scheinbar nicht mit .jpg-Dateien, sondern nur mit .png …


    Beitrag zuletzt geändert: 27.11.2015 20:36:21 von funnyweb
  7. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Deine Header-Info ist wieder flasch.

    jpg gibt es nicht! Es gibt nur jpeg! (als Herader-Info meine ich natürlich)

    Ein kleiner Beispielcode von stackoverflow den du bei dir in dein Script einbauen solltest.
    switch( $file_extension ) {
        case "gif": $ctype="image/gif"; break;
        case "png": $ctype="image/png"; break;
        case "jpeg":
        case "jpg": $ctype="image/jpeg"; break;
        default:
    }


    Viel Spaß

    Michael

    Beitrag zuletzt geändert: 27.11.2015 8:53:32 von michaelkoepke
  8. test42test schrieb:
    Andere Möglichkeit:
    <link href=" <?php $css="beide"; include "datei.php";?> " rel=...

    und der datei.php
    if($css=="beide"){
        echo("css/bootstrap-theme.min.css");
    }
    if ...


    Damit schreibt die datei.php den CSS-Link in deine PHP-Seite.
    Das löst aber das Problem gar nicht - so wird ja nur eine Datei eingebungen und nicht noch eine 2. hintendran gehängt.


    Ausschnitt aus dem simplen Quellcode von datei.php:
    if($_GET["css"]=="bt") {
        include("css/bootstrap-theme.min.css");
    }
    elseif($_GET["css"]=="b") {
        include("css/bootstrap.min.css");
    }
    elseif($_GET["css"]=="beide") {
        include("css/bootstrap.min.css");
        echo("\n");
        include("css/bootstrap-theme.min.css");
    }
    „include“ ist übrigens nicht so geschickt in diesem Fall, das bindet die Datei nämlich nicht nur ein, sonder führt sie auch aus. Es ist zwar unwahrscheinlich, dass in einer CSS Datei zufälligerweise gültiger PHP Code steht, aber für Deine Verwendung ist trotzdem eigentlich readfile gedacht.
  9. Autor dieses Themas

    funnyweb

    Kostenloser Webspace von funnyweb

    funnyweb hat kostenlosen Webspace.

    michaelkoepke schrieb:
    Deine Header-Info ist wieder flasch.

    jpg gibt es nicht! Es gibt nur jpeg! (als Herader-Info meine ich natürlich)

    Ein kleiner Beispielcode von stackoverflow den du bei dir in dein Script einbauen solltest.
    switch( $file_extension ) {
        case "gif": $ctype="image/gif"; break;
        case "png": $ctype="image/png"; break;
        case "jpeg":
        case "jpg": $ctype="image/jpeg"; break;
        default:
    }


    Viel Spaß

    Michael
    Ich habe doch mit
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
                    header('Content-type: '.finfo_file($finfo, "img/".$_GET["img"]));
                    finfo_close($finfo);
    den Mimetype automatisch erkennen lassen. Klar weiß ich, dass es kein image/jpg gibt, darum lasse ich ja auch extra den Mimetype ermitteln und sage nicht einfach
    header('Content-type: image/'strtolower(substr(strrchr($_GET["img"],"."),1)));
    Aber die Header-Info kann doch eigentlich nicht falsch sein, es sei denn, die Mimetype-Erkennung funktioniere hier bei lima-city bei manchen Dateitypen nicht korrekt, wovon ich nicht ausgehe. Von dem zitierten Script halte ich wenig, weil es leider überhaupt nicht allgemein gilt, sondern man jede Dateiendung selbst einbauen muss – und, falls eine Dateiendung fehlerhaft sein sollte, wird die Datei komplett unbrauchbar, weil der Mimetype falsch übermittelt wird. Trotzdem vielen Dank.

    davidlw schrieb:
    test42test schrieb:
    Andere Möglichkeit:
    <link href=" <?php $css="beide"; include "datei.php";?> " rel=...

    und der datei.php
    if($css=="beide"){
        echo("css/bootstrap-theme.min.css");
    }
    if ...


    Damit schreibt die datei.php den CSS-Link in deine PHP-Seite.
    Das löst aber das Problem gar nicht - so wird ja nur eine Datei eingebungen und nicht noch eine 2. hintendran gehängt.
    Ist mir auch aufgefallen. Würde es funktionieren, wenn ich sowas mache?:
    <link href=" <?php $css="beide"; echo("datei.php");?> " rel=...
    und in datei.php
    if($css=="beide"){
        readfile("css/bootstrap-theme.min.css");
        echo("\n");
        readfile("css/bootstrap.min.css");
    }


    Ausschnitt aus dem simplen Quellcode von datei.php:
    if($_GET["css"]=="bt") {
        include("css/bootstrap-theme.min.css");
    }
    elseif($_GET["css"]=="b") {
        include("css/bootstrap.min.css");
    }
    elseif($_GET["css"]=="beide") {
        include("css/bootstrap.min.css");
        echo("\n");
        include("css/bootstrap-theme.min.css");
    }
    „include“ ist übrigens nicht so geschickt in diesem Fall, das bindet die Datei nämlich nicht nur ein, sonder führt sie auch aus. Es ist zwar unwahrscheinlich, dass in einer CSS Datei zufälligerweise gültiger PHP Code steht, aber für Deine Verwendung ist trotzdem eigentlich readfile gedacht.
    Okay, tausend dank für den Tipp! :smile:

    test42test schrieb:
    […]
    Wenn du ein Bild in deine PHP-Seite einbauen möchtest, kannst du auch einfach
    echo("<img src=' ".$Dateipfad." '>");

    schreiben und schon steht es da wie im gewöhnlichem HTML.

    Du kannst auch mit fopen() eine Datei öffnen um sie in PHP zu bearbeiten.
    Das ist ja aber beides nicht, was ich haben möchte … ich möchte erreichen, dass, wenn der Browser beispielsweise http://example.com/misc/datei.php?img=smiley.jpg aufruft, eine Bilddatei angezeigt bekommt. Komplett ohne HTML o. ä. …

    Beitrag zuletzt geändert: 27.11.2015 20:40:41 von funnyweb
  10. funnyweb schrieb:
    Ich habe doch mit
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
                    header('Content-type: '.finfo_file($finfo, "img/".$_GET["img"]));
                    finfo_close($finfo);
    den Mimetype automatisch erkennen lassen. Klar weiß ich, dass es kein image/jpg gibt, darum lasse ich ja auch extra den Mimetype ermitteln und sage nicht einfach
    header('Content-type: image/'strtolower(substr(strrchr($_GET["img"],"."),1)));
    Aber die Header-Info kann doch eigentlich nicht falsch sein, es sei denn, die Mimetype-Erkennung funktioniere hier bei lima-city bei manchen Dateitypen nicht korrekt, wovon ich nicht ausgehe. Von dem zitierten Script halte ich wenig, weil es leider überhaupt nicht allgemein gilt, sondern man jede Dateiendung selbst einbauen muss – und, falls eine Dateiendung fehlerhaft sein sollte, wird die Datei komplett unbrauchbar, weil der Mimetype falsch übermittelt wird. Trotzdem vielen Dank.
    Lass Dir doch einfach mal den ermittelten Mime-type per echo ausgeben oder schau Dir mit den Entwicklertools des Browsers den HTTP header an, einfach um zu sehen, ob der code auch funktioniert wie erwartet.

    davidlw schrieb:
    test42test schrieb:
    Andere Möglichkeit:
    <link href=" <?php $css="beide"; include "datei.php";?> " rel=...

    und der datei.php
    if($css=="beide"){
        echo("css/bootstrap-theme.min.css");
    }
    if ...


    Damit schreibt die datei.php den CSS-Link in deine PHP-Seite.
    Das löst aber das Problem gar nicht - so wird ja nur eine Datei eingebungen und nicht noch eine 2. hintendran gehängt.
    Ist mir auch aufgefallen. Würde es funktionieren, wenn ich sowas mache?:
    <link href=" <?php $css="beide"; echo("datei.php");?> " rel=...
    und in datei.php
    if($css=="beide"){
        readfile("css/bootstrap-theme.min.css");
        echo("\n");
        readfile("css/bootstrap.min.css");
    }

    Nein, das würde nicht funktionieren. Du musst hier die CSS Variable weiterhin per GET Request übergeben. Sonst ist die in "datei.php" zur Zeit der Ausführung nicht verfügbar.


    Ausschnitt aus dem simplen Quellcode von datei.php:
    if($_GET["css"]=="bt") {
        include("css/bootstrap-theme.min.css");
    }
    elseif($_GET["css"]=="b") {
        include("css/bootstrap.min.css");
    }
    elseif($_GET["css"]=="beide") {
        include("css/bootstrap.min.css");
        echo("\n");
        include("css/bootstrap-theme.min.css");
    }
    „include“ ist übrigens nicht so geschickt in diesem Fall, das bindet die Datei nämlich nicht nur ein, sonder führt sie auch aus. Es ist zwar unwahrscheinlich, dass in einer CSS Datei zufälligerweise gültiger PHP Code steht, aber für Deine Verwendung ist trotzdem eigentlich readfile gedacht.
    Okay, tausend dank für den Tipp! :smile:

    test42test schrieb:
    […]
    Wenn du ein Bild in deine PHP-Seite einbauen möchtest, kannst du auch einfach
    echo("<img src=' ".$Dateipfad." '>");

    schreiben und schon steht es da wie im gewöhnlichem HTML.

    Du kannst auch mit fopen() eine Datei öffnen um sie in PHP zu bearbeiten.
    Das ist ja aber beides nicht, was ich haben möchte … ich möchte erreichen, dass, wenn der Browser beispielsweise http://example.com/misc/datei.php?img=smiley.jpg aufruft, eine Bilddatei angezeigt bekommt. Komplett ohne HTML o. ä. …

    Geht genauso per readfile. Komm aber bloß nicht auf die Idee einfach ein "readfile($_GET['img'])" zu machen, sonst kann jeder sämtliche Dateien auf deinem Webspace lesen, auch PHP Dateien mit Datenbank Passwörtern etc. Solche Parameter gehören IMMER überprüft!
  11. Sicher funktioniert das mit dem include und der Variable. Warum auch nicht? Variablen, die du definierst sind natürlich auch in einer inkludierten Datei verfügbar.

    Du kannst aber in einem include keine GET-Parameter definieren. Ist ja auch kein eigener Request.
  12. muellerlukas schrieb:
    Sicher funktioniert das mit dem include und der Variable. Warum auch nicht? Variablen, die du definierst sind natürlich auch in einer inkludierten Datei verfügbar.

    Du kannst aber in einem include keine GET-Parameter definieren. Ist ja auch kein eigener Request.

    Les dir vielleicht den infrage kommenden Code nochmal durch:
    <link href=" <?php $css="beide"; echo("datei.php");?> " rel=...

    Und jetzt denke noch einmal über deinen Post nach.
  13. Autor dieses Themas

    funnyweb

    Kostenloser Webspace von funnyweb

    funnyweb hat kostenlosen Webspace.

    davidlw schrieb:
    […]
    Lass Dir doch einfach mal den ermittelten Mime-type per echo ausgeben oder schau Dir mit den Entwicklertools des Browsers den HTTP header an, einfach um zu sehen, ob der code auch funktioniert wie erwartet.
    […]
    Der MimeType ist laut Firefox-Seiteninformationen korrekt – image/jpeg. Nur ist mir aufgefallen, dass die übermittelte Datei nur 156 Bytes groß ist, während die ursprüngliche Datei 147,0 KB wiegt. Woran kann das liegen?

    davidlw schrieb:
    […]
    Nein, das würde nicht funktionieren. Du musst hier die CSS Variable weiterhin per GET Request übergeben. Sonst ist die in "datei.php" zur Zeit der Ausführung nicht verfügbar.
    […]
    Okay, dankeschön.

    davidlw schrieb:
    […]
    Geht genauso per readfile. Komm aber bloß nicht auf die Idee einfach ein "readfile($_GET['img'])" zu machen, sonst kann jeder sämtliche Dateien auf deinem Webspace lesen, auch PHP Dateien mit Datenbank Passwörtern etc. Solche Parameter gehören IMMER überprüft!
    […]
    Danke, deswegen habe ich jetzt folgendes geschrieben:
    if(($_GET["img"]!=null)&&($_GET["img"]!="")) {
    				$finfo = finfo_open(FILEINFO_MIME_TYPE);
    				if(explode("/", finfo_file($finfo, "img/".$_GET["img"]))[0]=="image") {
    					header('Content-type: image/'.explode("/", finfo_file($finfo, "img/".$_GET["img"]))[1]);
    					finfo_close($finfo);
    					include ("img/".$_GET["img"]);
    				}
    			}
    aber es funktioniert immer noch nicht …
  14. funnyweb schrieb:
    Danke, deswegen habe ich jetzt folgendes geschrieben:
    if(($_GET["img"]!=null)&&($_GET["img"]!="")) {
    				$finfo = finfo_open(FILEINFO_MIME_TYPE);
    				if(explode("/", finfo_file($finfo, "img/".$_GET["img"]))[0]=="image") {
    					header('Content-type: image/'.explode("/", finfo_file($finfo, "img/".$_GET["img"]))[1]);
    					finfo_close($finfo);
    					include ("img/".$_GET["img"]);
    				}
    			}
    aber es funktioniert immer noch nicht …

    Ersetze das include(" img... mit readfile. Include ist wie gesagt dafür da PHP Dateien einzubinden und auszuführen, nicht um Dateiinhalte auszugebem.
  15. Erstens warum?
    header('Content-type: image/'.explode("/", finfo_file($finfo, "img/".$_GET["img"]))[1]);


    So ist es weniger Fehleranfällig:
    header('Content-type: '. finfo_file($finfo, "img/".$_GET["img"]));


    Und so wie du es geschrieben hast geht es eh nicht.
    So wird ein Schuh draus.
    if(($_GET["img"]!=null)&&($_GET["img"]!="")) {
                    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    		$mime=explode("/", finfo_file($finfo, "img/".$_GET["img"]));
                    if($mime[0]=="image") {
                        header('Content-type: image/'.$mime[1]);
                        finfo_close($finfo);
                        include ("img/".$_GET["img"]);
                    }
                }


    Fehlermeldung?
    Vielelicht mal ein Link zur Seite?

    Und zum zweiten sollte der include auch nur dann kommen, wenn es eine Bilddatei ist. Ansonsten kann man auch PHP-Dateien, HTML-Dateien und weiteres dort includieren.
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!