Mit PHP Bilder ausgeben klappt nicht
Dinn
- php
Hallo,
ich möchte auf meiner "Visitenkartenseite" ein Paar Bilder aus meinem Blog anzeigen.
Da ich aber nur mir die Rechte gegeben habe(und das auch vorerst nicht ändern möchte) auf das Verzeichnis des Bolgs zuzugreifen, kann ich das ganze nicht einfach über einen Imagetag in Html machen.
Doch wenn ich in PHP das Bild ausgeben möchte, wird es nicht angezeigt selbst, wenn ich die Rechte doch änder.
Picture.php
<?php
include_once '../classes/db.class.php';
include_once '../data/mysql_data.ini.php';
$lc_db = new db(L_C_SQL_HOST, L_C_SQL_USER, L_C_SQL_PW, L_C_SQL_DATABASE);
//Sucht durch Zufall Bilder von Lc aus und gibt sie aus
$lc_db->query("SELECT id FROM news WHERE Picture != ''");
$ids = array();
while($row = $lc_db->fetch_object()){
$ids[] = $row->id;
}
$size = sizeof($ids)-1;
$lc_db->query("SELECT Picture FROM news WHERE id = ".$ids[rand(0, $size)]);
$row = $lc_db->fetch_object();
$file = 'http://licentious-creativity.de/images/uploads/'.$row->Picture;
unset($lc_db);
header("Content-Type: image/jpeg");
$img = imagecreatefromjpeg($file);
imagejpeg($img);
?>
Index.html
...
<body>
<img src="picture.php" alt="Ein Bild aus meinem Blog">
</body>
</html>
Könnte mir jemand vielleicht den feher nennen, den ich mache und bitte nicht einfach nur Verweise auf andere Seiten geben.
Gruß
Dinn
Hi,
erhältst du eine Fehlermeldung wenn du Picture.php direkt aufrufst?
~dave
Nein, dort ist als alternative nur der Pfad der Picture.php angezeigt
Dinn
Hi,
Nein, dort ist als alternative nur der Pfad der Picture.php angezeigt
Den Satz verstehe ich nicht.
Du rufst im Browser die Picture.php auf und es kommt _was_ vom Server?
Du hast das error_reporting richtig eingestellt um auch alle Fehler zu sehen?
~dave
Nein, dort ist als alternative nur der Pfad der Picture.php angezeigt
Im Imagetag gibt es alt="" und das gibt er aus.
Keine Fehlermeldungen werden angezeigt:/ Obwohl ich Error_reporting auf E_ALL hab.
Hi,
Nein, dort ist als alternative nur der Pfad der Picture.php angezeigt
Im Imagetag gibt es alt="" und das gibt er aus.
Du sollst es *direkt* aufrufen - nicht per IMG-Element in einem HTML-Dokument, sondern in dem du die Adresse des Scriptes, welches das Bild ausgeben soll, in die Adresszeile deines Browsers eingibst.
MfG ChrisB
Du sollst es *direkt* aufrufen - nicht per IMG-Element in einem HTML-Dokument, sondern in dem du die Adresse des Scriptes, welches das Bild ausgeben soll, in die Adresszeile deines Browsers eingibst.
Selbst dann klappt es ja auch nicht:/
Hi,
wenn vom Server beim direkten Aufrufen der Picture.php gar nichts zurück kommt würde ich mal die komplette Logik rausnehmen und "Hallo Welt!" rein schreiben.
Wenn das dann angezeigt wird die Logik wieder rein und nach jeder Zeile eine Kontrollausgabe.
Dann solltest du zumindest sehen wie weit er kommt.
Ich kann mir immer noch nicht vorstellen dass da gar kein Fehler kommt.
~dave
Ich habe sowas ja schon gemacht..
Ich lass das ganze erstmal.
Vielleicht sehe ich den Fehler ja morgen, trozdem danke!
Hi,
Da ich aber nur mir die Rechte gegeben habe
diesen wichtigen Aspekt solltest du näher erklären: Was heißt "nur mir"? Hast du einen Benutzer-Account auf dem Host? Oder hast du eine Zugriffsbeschränkung mit HTTP-AUTH beim Webserver?
kann ich das ganze nicht einfach über einen Imagetag in Html machen.
Mit anderen Worten: Die Bilder sind nicht über HTTP zugänglich.
$file = 'http://licentious-creativity.de/images/uploads/'.$row->Picture;
Das ist nicht dein Ernst, oder??
Weiter oben hast du etwas verschwurbelt erklärt, die Bilder seien über HTTP nicht erreichbar, und das sollte wohl auch so sein, und nun willst du vom Script aus über HTTP zugreifen? Siehst du den Widerspruch?
$img = imagecreatefromjpeg($file);
imagejpeg($img);
Nebenbei: Um nur die Bilddaten durchzureichen, brauchst du nicht die gd-lib zu bemühen, die mit diesen beiden Zeilen das JPEG-Bild erst komplett decodiert (und dabei viel Arbeitsspeicher braucht) und dann neu komprimiert. Ein einfaches
readfile($file);
wäre angebrachter. Und natürlich sollte $file dann auch den Dateinamen enthalten, nicht den Namen der entsprechenden HTTP-Ressource.
So long,
Martin
Hi,
$img = imagecreatefromjpeg($file);
imagejpeg($img);Nebenbei: Um nur die Bilddaten durchzureichen, brauchst du nicht die gd-lib zu bemühen, die mit diesen beiden Zeilen das JPEG-Bild erst komplett decodiert (und dabei viel Arbeitsspeicher braucht) und dann neu komprimiert.
... und dabei auch noch die Qualität verringert.
MfG ChrisB