Bilder per PHP anzeigen lassen

D

damuxu

Grünschnabel
Hi Leute,

ich wollte mir eine kleine Bildergalerie einrichten und wollte die Bilder per PHP einbinden also hier ein Beispiel

normal ist es ja so:
Code:
<img src="unterordner/bildername.jpg />


ich wollte es aber lieber so haben:
Code:
<img src="bild.php?bild=bildernamen.jpg />

kann mir jemand den code vielleicht aufschreiben?
danke im vorraus

Michi =)
 
Code:
<?php
$datei = fopen($_GET['bild'], r);
echo fread($datei,5000);
fclose $datei;
?>

Wobei in der Zeile mit echo die 5000 die Größe deines Bildes in Byte betragen sollte (Kann auch größer sein).
Dies ist ohne Fehlerbehandlung und sonstiges und ohne Sicherheitsüberprüfung, denn er könnte auch in die URL als GET-Parameter etwas anderes hineinschreiben, etwa /etc/passwd, oder irre ich mich?
 
ah ok danke das hilft schon weiter, aber was ich dann jetzt bei dem Code von Murpf sehe ist, dass man ihn nur auf Seiten einsetzen kann, wo PHP genutzt wird. Jedoch möchte ich Freunden anbieten können, dass sie die Gleichen Bilder auf deren Page einsetzten können. Die haben jedoch keinen Webserver, der PHP unterstützt.
 
Code:
<img src="bild.php?bild=bildernamen.jpg />
Welchen Sinn soll das erfuellen?
 
damuxu schrieb:
ah ok danke das hilft schon weiter, aber was ich dann jetzt bei dem Code von Murpf sehe ist, dass man ihn nur auf Seiten einsetzen kann, wo PHP genutzt wird. Jedoch möchte ich Freunden anbieten können, dass sie die Gleichen Bilder auf deren Page einsetzten können. Die haben jedoch keinen Webserver, der PHP unterstützt.

Das PHP-Skript kann natürlich auch bei dir liegen, sie müssen das dann allerdings mit kompletter URL einbinden.

EDIT: Sie können, falls mein Skript modifiziert wird, auch Bilder von einem externen FTP-Server laden.
 
theton schrieb:
Code:
<img src="bild.php?bild=bildernamen.jpg />
Welchen Sinn soll das erfuellen?

Ich würde den Sinn darin sehen, dass man seine Bilder schützen kann. Anstatt die Bilder ins "/html" zu legen, wo sie bequem per Browser erreichbar sind, kann man sie geschützt in ein Verzeichnis abseits von "/html" legen. Zugriff geht nur über die bild.php. Diese kann das Anzeigen der Bilder von vorhandenen Cookies abhängig machen.

Gruss, Xanti
 
Und wie will man dafuer sorgen, dass nur die bild.php auf das Verzeichnis zugreifen kann? Spaetestens wenn sich jemand das Bild auf der Platte speichert, sieht er aus welchem Ordner es kommt.
 
Wenn man das Bilderverzeichnis ins "/cgi-bin" legt, sollte man nicht vom Browser direkt drauf zugreifen können.
 
ja ich will halt so erreichen, dass man das Bild nicht direkt verlinken kann sondern es dann halt so über die PHP datei sieht.
Oder ist das auch mit Java möglich?
 
ja ich will halt so erreichen, dass man das Bild nicht direkt verlinken kann sondern es dann halt so über die PHP datei sieht.
Oder ist das auch mit Java möglich?

Dein Ansatz ist falsch.

So verlinken die Jungs dann nimmer auf das Bild sondern auf das Script. Du hast also einen Schutz der nicht schützt sondern nur zusätzlich Last erzeugt, es sei denn du weißt was eine Session ist und wie man sie verwenen könnte um das direkte Verlinken doch zumindest zu 95% zu unterbinden ( Aber selbst eine Session bietet keinen wirklichen Schutz für öffentliche Bilder, wenn der Junge ein wenig Ahnung ( und ein wenig bedeutet das KnowHow wie verstecke ich einen iframe auf meiner Seite zu deiner Seite um eine Session zu erstellen ) hat und das Bild unbedingt einbinden möchte )

Google mal nach Modrewrite und Bilder schützen , oder ModSecurity sollte sowas auch können.

Gruß Sono
 
Zuletzt bearbeitet:
Hallo miteinander, bitte um Hilfe für folgendes Problem:

Ich habe die Datei "input.html" mit einem Eingabeformular und einem Textfeld, in dem die URL eines Bildes eingegeben werden kann:

Code:
<input size="60" name="personFoto" id="personFoto" type="text" value="" placeholder="URL zum Foto" />

Über die Datei "output.php" lese ich diese URL dann so aus:

Code:
<?php
$personFoto = $_POST["personFoto"];

echo
''.$personFoto.'';
?>

Das funktioniert auch.

Jetzt möchte ich aber in der "output.php" nicht nur die URL zum Bild, sondern auch das Bild selbst anzeigen lassen und dazu den img-Tag "<img src="">" einsetzen. Irgendwie müsste ".$personFoto." mit in den Tag - oder der img-Tag mit in die Zeile ".$personFoto." - aber ich habe keine Ahnung wie ich das umsetzen soll.

Hat jemand eine Idee bzw. kann mir jemand dabei helfen?

Herzlichen Dank vorweg!

Beste Grüße,
Salva
 
Zuletzt bearbeitet:
Das <img src="">-Tag brauchst du in Deinem PHP nicht - es sei denn, Du willst mit dem PHP HTML "rendern". (=Content-Type: text/html)

Wenn du kein HTML rendern will, sondern einen binären Datenstrom (wie Bilder) anzapfen, dann musst du a.) den "Content-Type" als "image" deklarieren und (evtl.?) muss du auch dafür sorgen dass korrekt ausgegeben wird - wie man mit "echo" binäre Daten ausgeben kann, ist mir z. Zt. nicht bekannt. Geht vielleicht. ;)

$imagePath = $_POST['image'];
$imageType = null;

if(imagePath.contains('.jpg') || imagePath.contains('.jpeg') || imagePath.contains('.jfif'))
{
$imageType = 'jpeg';
}

if(imagePath.contains('.gif'))
{
$imageType = 'gif';
}

if(imagePath.contains('.png'))
{
$imageType = 'png';
}

if(imageType!=null && imageType!='') // String ist weder eine Nullinstanz noch leer. (leer heisst intern ein "array" mit der länge 0, also instanziert aber leer!)
{
header('Content-Type: image/'.$imageType); // String zusammensetzen!!
$binaryImageData = getBinaryFileContent($imagePath);
echo $binaryImageData; // Frage die sich hier stellt: Kann man binäre Daten mit "echo" ausgeben...?
}
else
{
// Trifft zu wenn kein Bild, oder nicht unterstützt...
// die("Fehlermeldung"); oder exit; sollte nicht notwendig sein, sollte ich selbst "bereinigen" ohne dass du was aufrufen muss. Schaden tut es allerdings nicht ;) Wenn du unbedingt eine Fehlermeldung willst -> die(string); verwenden...
}


Wichtig: getBinaryFileContent(arg) existiert so nicht in dieser Form, ist nur zum Demo-Zwecken!!

Natürlich könntest du es auch dynamischer machen, indem immer die hintersten 3 Zeichen des Dateinamens AUTOMATISCH zum "Content-Type: "-String zusammengesetzt werden, ohne vorherige Prüfung.

Hat alles seine Vor- und Nachteile, du musst diese gegeneinander abwägen - je nach "Use Case"...

Nachtrag: Evtl. kannst du auch switch/case verwenden anstelle der vielen if's, keine Ahnung wie das bei PHP ist, evtl. geht das mit strings. Bei Java konnte man früher zumindest nur integer-Werte verwenden.
 
Zuletzt bearbeitet:
Hallo @jmar83 und DANKE für deine Bemühungen!

Ich habe das html gerendert und mein Problem bereits gelöst ;)

Wie bereits erwähnt, zeige ich die URL zum Bild als reinen Text mit
$personFoto = $_POST["personFoto"];
auf der php-Vorschau- und Ausgabeseite an.
Das html dazu:
<p id="personInfo"><?php echo $personFoto; ?></p>

Und mit der Kombination php echo/ html-Tag img
<img id="personFoto" src="<?php echo $personFoto; ?>">
bekomme ich nun auch das Bild selbst angezeigt. Ebenfalls in der php-Vorschau- und Ausgabeseite. Alles okay also ;)

HERZLICHEN DANK nochmal und einen schönen Abend noch!

Beste Grüße,
Salva
 
Hallo Salva
Bitte sehr, kein Problem! Dir ebenfalls einen schönen Abend!
 

Ähnliche Themen

Erweiterbarer Wrapper für GNU find

Sicherheitsfragen zu PHP-Anwendungen auf der Webseite

mit makefile bilder convertieren (ImageMagick)

lighttpd: Bilder nur über html-file anzeigen, nicht direkt

Heimserver Konfiguration für Ubuntu Server?!

Zurück
Oben