Hallo,
ich habe das Anzeigeproblem jetzt anderweitig, über eine Tabelle, gelöst.
Ist zwar vielleicht nicht unbedingt die eleganteste Lösung, aber sie funktioniert.
Nun beschäftigt mich aber ein anderes Problem.
Ich habe folgende, auf mein Problem reduzierte, Ordnerstruktur:
|
+-> Ordner "GRAFIKEN"
| |
| +-> Ordner "SORTIMENT"
| |
| +-> Datei "GewandungMuetzen1.png"
| Datei "GewandungMuetzen2.png"
| ...
|
+-> Ordner "SEITEN"
| |
| +-> Datei "Sortiment.php"
| Ordner "INC"
| |
| +-> Ordner "PHP"
| |
| +-> Datei "BildVerkleinern.php"
| Datei "LogErzeugen.php"
In die Datei "Sortiment.php" binde ich zunächst die Datei "LogErzeugen.php" ein:
include ("INC/PHP/LogErzeugen.php");
Die Datei "LogErzeugen.php" protokolliert etwaige Fehlermeldungen der Datei "BildVerkleinern.php" in einer Textdatei, da ich hier ja nichts über den echo
-Befehl ausgeben lassen kann.
Desweiteren will ich in der Datei "Sortiment.php" zu verkleinernde Grafiken über folgenden Code anzeigen lassen:
echo '<img src="INC/PHP/BildVerkleinern.php?Bild=' . ($Datei . ($i + 1)) . '&Breite=90">';
Die Anweisung $Datei . ($i + 1)
liefert mir beispielsweise "GewandungMuetzen6".
In der Datei "BildVerkleinern.php" arbeite ich dann mit der Variablen "Bild" weiter:
if (isset ($_GET['Bild']) && preg_match ("/^[a-z]+[0-9]+$/i", $_GET['Bild']))
{
$Bild = "../GRAFIKEN/SORTIMENT/" . $_GET['Bild'] . ".png";
if (file_exists ($Bild))
{
if (isset ($_GET['Breite']) && is_numeric ($_GET['Breite']))
GroesseBerechnen ($Bild, $_GET['Breite'], "");
else
if (isset ($_GET['Hoehe']) && is_numeric ($_GET['Hoehe']))
GroesseBerechnen ($Bild, "", $_GET['Hoehe']);
else
LogErzeugen ('Variable "Breite" oder "Hoehe" fehlt oder ist ungültig');
}
else
LogErzeugen ('Datei "' . $Bild . '" wurde nicht gefunden');
}
else
LogErzeugen ('Variable "Bild" fehlt oder ist ungültig');
Leider werden die Grafiken aber nicht angezeigt, die über PHP ermittelten Dateinamen stimmen mit tatsächlich existenten Grafiken im Ordner "GRAFIKEN/SORTIMENT" überein.
Da die Ordner "SEITEN" und "GRAFIKEN" auf gleicher Ebene liegen, muss ich in der Datei "BildVerkleinern.php" die Pfadangaben der Bilder ja um "../" ergänzen, da ich eine Ordnerebene zurück gehen muss.
Trotz dass die Grafiken nicht angezeigt werden, wird aber auch keine Log-Datei angelegt. Auch dann nicht, wenn ich gleich zu Beginn der Datei "BildVerkleinern.php" einen Testeintrag in der Textdatei anlegen lassen will.
Es wird nur dann etwas "geloggt", wenn ich den Log-Befehl direkt in der Datei "Sortiment.php" aufrufe.
Da ich nicht weiß, ob mein Problem mit Pfad-Angaben oder der Datei "BildVerkleinern.php" selber zusammenhängt, hier der komplette Code dieser Datei:
if (isset ($_GET['Bild']) && preg_match ("/^[a-z]+[0-9]+$/i", $_GET['Bild']))
{
$Bild = "../GRAFIKEN/SORTIMENT/" . $_GET['Bild'] . ".png";
if (file_exists ($Bild))
{
if (isset ($_GET['Breite']) && is_numeric ($_GET['Breite']))
GroesseBerechnen ($Bild, $_GET['Breite'], "");
else
if (isset ($_GET['Hoehe']) && is_numeric ($_GET['Hoehe']))
GroesseBerechnen ($Bild, "", $_GET['Hoehe']);
else
LogErzeugen ('Variable "Breite" oder "Hoehe" fehlt oder ist ungültig');
}
else
LogErzeugen ('Datei "' . $Bild . '" wurde nicht gefunden');
}
else
LogErzeugen ('Variable "Bild" fehlt oder ist ungültig');
function GroesseBerechnen ($Bild, $xNeu, $yNeu)
{
if ($Groesse = getimagesize ($Bild))
{
$x = $Groesse[0];
$y = $Groesse[1];
if ($xNeu != "")
{
$yNeu = round ($y / ($x / $xNeu));
$xNeu = round ($x / ($y / $yNeu));
BildErzeugen ($Bild, $x, $y, $xNeu, $yNeu);
}
else
if ($yNeu != "")
{
$xNeu = round ($x / ($y / $yNeu));
$yNeu = round ($y / ($x / $xNeu));
BildErzeugen ($Bild, $x, $y, $xNeu, $yNeu);
}
else
LogErzeugen ("Breiten- oder Höhenangabe fehlt");
}
else
LogErzeugen ('"getimagesize" ist fehlgeschlagen');
}
function BildErzeugen ($Bild, $x, $y, $xNeu, $yNeu)
{
if (! $Bild = imagecreatefrompng ($Bild))
LogErzeugen ('"imagecreatefrompng" ist fehlgeschlagen');
if (! $Thumbnail = imagecreatetruecolor ($xNeu, $yNeu))
if (! $Thumbnail = imagecreate ($xNeu,$yNeu))
LogErzeugen ('"imagecreatetruecolor" und "imagecreate" als Fallback sind fehlgeschlagen');
if (! imagecopyresampled ($Thumbnail, $Bild, 0, 0, 0, 0, $xNeu, $yNeu, $x, $y))
if (! imagecopyresized ($Thumbnail, $Bild, 0, 0, 0, 0, $xNeu, $yNeu, $x, $y))
LogErzeugen ('"imagecopyresampled" und "imagecopyresized" als Fallback sind fehlgeschlagen');
$Farbcode = imagecolorallocate ($Thumbnail, 255, 0, 0);
imagecolortransparent ($Thumbnail ,$Farbcode);
header("Content-type:image/png");
imagepng ($Thumbnail, "", 9);
}
Ich hoffe sehr, dass ihr mir hier weiterhelfen könnt, da es ganz essentiell für unseren Webshop ist, dass die verkleinerte Anzeige von Grafiken reibungslos funktioniert.
Vielen Dank und Gruß,
Enrico