CGollhardt
Mitglied
Guten Abend, ich verzweifel gerade. Ich habe eine Datei, die mir Grafiken ausgibt bzw. resized.
Damit die Grafik nicht jedesmal "berechnet" werden muss, speichere ich diese seit neuesten auf den Server. Wurde länger als 1 Monat darauf nicht zugegriffen werden, wird diese gelöscht.
Problem:
:arrow: Interne Grafiken ($_GET['file']) können ohne Probleme gespeichert werden
:arrow: Externe Grafiken ($_GET['url']) werden nicht gespeichert
Test $_GET['url'] String:
echo von $cache_url ergibt korrektes Verzeichnis.
Hier meine grafik.php:
Woran kann das liegen? Vielen Dank für eure Hilfe
edit
Das Bild exestiert jedoch! Die url ist nur rawurlencode() codiert. Die Grafik wird korrekt durch imagejpeg ($imagetc, NULL, 100); ausgegeben. Lediglich imagejpeg ($imagetc, $cache_url, 100); funktioniert nicht
edit 2
Habe den Fehler selber gefunden. Ich habe keine höhe und breite übergeben, dadurch muss das Bild nicht resized werden, also auch kein Bild gespeichert werden.
Sorry falls Ihr euch schon damit auseinandergesetzt habt. Manchmal sieht man den Wald vor Bäumen nicht und Postet erst, bevor man auf die Lösung kommt.
Damit die Grafik nicht jedesmal "berechnet" werden muss, speichere ich diese seit neuesten auf den Server. Wurde länger als 1 Monat darauf nicht zugegriffen werden, wird diese gelöscht.
Problem:
:arrow: Interne Grafiken ($_GET['file']) können ohne Probleme gespeichert werden
:arrow: Externe Grafiken ($_GET['url']) werden nicht gespeichert
Test $_GET['url'] String:
Code:
http://ggs-clan.de/grafik.php?url=http%3A%2F%2Ftiles.xbox.com%2Ftiles%2Foo%2FP5%2F0mdsb2JgbA9ECgR8GgMfWSpVL2ljb24vMC84MDAwIAABAAAAAP3Wg70%3D.jpg
echo von $cache_url ergibt korrektes Verzeichnis.
Hier meine grafik.php:
PHP:
<?php
define("SCRIPT_TIME", microtime(true));
$errorMessage = 'Die Grafik konnte nicht erstellt werden';
require('php/global/settings.inc.php');
//Grafik definieren
if (isset ($_GET['file'])) {
$_GET['file'] = strip_tags ($_GET['file']);
$url = 'grafiken/' . $_GET['file'] . '.jpg';
if (!file_exists ($url)) {
die ($errorMessage);
}
} elseif (isset ($_GET['url'])) {
$_GET['url'] = strip_tags ($_GET['url']);
$url = rawurldecode ($_GET['url']);
} else {
die ($errorMessage);
}
//Größe berechnen
$info = getimagesize($url);
if ($info[2] != 1 && $info[2] != 2 && $info[2] != 3) {
die ($errorMessage);
}
$NoThumbnail = false;
if (isset ($_GET['width']) && isset ($_GET['height'])) {
$width = $_GET['width'];
$height = $_GET['height'];
} elseif (isset ($_GET['width']) || isset ($_GET['height'])) {
if (isset($_GET['width'])) {
$width = $_GET['width'];
$height = ($width/$info[0])*$info[1];
} else {
$height = $_GET['height'];
$width = ($height/$info[1])*$info[0];
}
if (($height > $info[1]) || ($width > $info[0])) {
$NoThumbnail = true;
}
} else {
$height = $info[1];
$width = $info[0];
$NoThumbnail = true;
}
//Grafiken aus den Cache laden
$Tage = 14;
$exp_gmt = gmdate("D, d M Y H:i:s", time() + 60 * 60 * 24 * $Tage) ." GMT";
$mod_gmt = gmdate("D, d M Y H:i:s", getlastmod())." GMT";
header('Expires: ' . $exp_gmt);
header('Last-Modified: ' . $mod_gmt);
header('Cache-Control: private, max-age=' . (60 * 60 * 24 * $Tage));
header('Cache-Control: pre-check=' . (60 * 60 * 24 * $Tage), false);
header('Content-type: image/jpeg');
//Cache URL erstellen
$cache_url = 'cache/grafik/' . md5 ($url . 'w' . $width . 'h' . $height) . '.jpg';
//Bild in Speicher laden
if (file_exists ($cache_url)) {
$image = imagecreatefromjpeg($cache_url);
$NoThumbnail = true;
} else {
if($info[2] == 1) {
$image = imagecreatefromgif($url);
} elseif($info[2] == 2) {
$image = imagecreatefromjpeg($url);
} elseif($info[2] == 3) {
$image = imagecreatefrompng($url);
}
}
if ($NoThumbnail) {
imageinterlace($image,$script['grafik_interlace']);
imagejpeg($image, NULL, 100);
} else {
$imagetc = imagecreatetruecolor ($width, $height);
imagecopyresampled ($imagetc, $image, 0, 0, 0 ,0, $width, $height, $info[0], $info[1]);
imageinterlace ($imagetc, $script['grafik_interlace']);
imagejpeg ($imagetc, $cache_url, 100);
imagejpeg ($imagetc, NULL, 100);
}
?>
Woran kann das liegen? Vielen Dank für eure Hilfe
edit
Das Bild exestiert jedoch! Die url ist nur rawurlencode() codiert. Die Grafik wird korrekt durch imagejpeg ($imagetc, NULL, 100); ausgegeben. Lediglich imagejpeg ($imagetc, $cache_url, 100); funktioniert nicht
edit 2
Habe den Fehler selber gefunden. Ich habe keine höhe und breite übergeben, dadurch muss das Bild nicht resized werden, also auch kein Bild gespeichert werden.
Sorry falls Ihr euch schon damit auseinandergesetzt habt. Manchmal sieht man den Wald vor Bäumen nicht und Postet erst, bevor man auf die Lösung kommt.
Zuletzt bearbeitet: