 |
15.01.2008, 18:02
| Nach oben
#1 | | Neuer Benutzer
Registriert seit: 15.01.2008
Beiträge: 4
| Ich bekomme Thumbnail Funktion von Jann Hendrik nicht zum laufen!
Hallo ich ahbe mir den Code von dem Tutorial raus kopiert. Verstehe soweit auch was da passiert nur bringe ich es nicht zum laufen. Bekomme eine Fehlermeldung. Ich gebe mal den kompletten Code und die Fehlermeldung. PHP-Code: <?php function mkthumb($pic, // Dateiname $img_width = "100", // max. Größe in x-Richtung $img_height = "100", // max. Größe in y-Richtung $folder_scr = "org", // Ordner der normalen Bilder $des_src = "thumb") // Ordner der Thumbs { // Größe und Typ ermitteln list($src_width, $src_height, $src_typ) = getimagesize($folder_scr."/".$pic);
// neue Größe bestimmen if($src_width >= $src_height) { $new_image_width = $img_width; $new_image_height = $src_height * $img_width / $src_width; } if($src_width < $src_height) { $new_image_height = $img_width; $new_image_width = $src_width * $img_height / $src_height; }
if($src_typ == 1) // GIF { $image = imagecreatefromgif($folder_scr."/".$pic); $new_image = imagecreate($new_image_width, $new_image_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); imagegif($new_image, $des_src."/".$pic, 100); imagedestroy($image); imagedestroy($new_image); return true; } elseif($src_typ == 2) // JPG { $image = imagecreatefromjpeg($folder_scr."/".$pic); $new_image = imagecreatetruecolor($new_image_width, $new_image_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); imagejpeg($new_image, $des_src."/".$pic, 100); imagedestroy($image); imagedestroy($new_image); return true; } elseif($src_typ == 3) // PNG { $image = imagecreatefrompng($folder_scr."/".$pic); $new_image = imagecreatetruecolor($new_image_width, $new_image_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); imagepng($new_image, $des_src."/".$pic); imagedestroy($image); imagedestroy($new_image); return true; } else { return false; } }
$bild_result = mysql_query("Select * From $tab_bild where catid='".strip_tags(mysql_real_escape_string($_GET['catid']))."'")or die(mysql_error());
$i=1; while($bild_row = @mysql_fetch_array($bild_result)){ $bild_id = $bild_row['id']; $bild_catid = $bild_row['catid']; $bild_bild = $bild_row['bild']; $bild_view = $bild_row['view'];
$pic = $bild_bild; if($i==1){echo "<tr>";} echo" <td> <table cellspacing=\"0\" cellpadding=\"0\" border=\"1\" width=\"140\"> <tr> <td colspan=\"3\" align=\"center\">1</td> </tr> <tr> <td width=\"10\">2</td> <td width=\"120\" align=\"center\"> <a href=\"javascript:window.open('show_pic.php?id=".$bild_row['id']."','fenster','width=600,height=500,left=250,top=150');void(0)\"> ";
/* echo mkthumb($pic, // Dateiname $img_width = "100", // max. Größe in x-Richtung $img_height = "100", // max. Größe in y-Richtung $folder_scr = "org", // Ordner der normalen Bilder $des_src = "thumb"); */
echo "".$des_src."/".$pic.""; echo" </a> </td> <td width=\"10\">3</td> </tr> <tr> <td colspan=\"3\" align=\"center\">4</td> </tr> </table </td> "; if($i==3) {echo "</tr>";$i=0;} $i++; } ?> </table>
Ich hoffe sehr das mir jemand helfen kann. Vielen Dank MFG der Litter
Geändert von litterauspirna (15.01.2008 um 20:26 Uhr).
|
| |
15.01.2008, 18:04
| Nach oben
#2 | | Neuer Benutzer
Registriert seit: 27.11.2007
Beiträge: 5
|
du deklarierst die Funktion innerhalb der Schleife, du kannst sie aber nur einmal deklarieren. Einfach vor der Schleife oder sogar in einer extra Datei deklarieren.
|
| |
15.01.2008, 18:40
| Nach oben
#3 | | Neuer Benutzer
Registriert seit: 15.01.2008
Beiträge: 4
|
Ok dankeschön. Nur jetzt zeigt es mir gar kein Bild mehr an. wie muss ich denn die echo Ausgabe jetzt schreiben? Sorry habe mit Thumbnails noch keine Erfahrung
|
| |
15.01.2008, 18:57
| Nach oben
#4 | | Christian W. Achatz
Registriert seit: 05.02.2007 Ort: München
Beiträge: 132
|
Hallo litterauspirna,
was wird dir statt dessen angezeigt? Bitte präzisiere deine Posts ein wenig, da es sonst sehr schwer für aussenstehende ist den Code zu debuggen.
An sich denke ich, dass am Schleifenkonstrukt liegt. Man kann in einem Request nicht mehrere und vor allem unterschiedliche Bilder an den Browser senden.
|
| |
15.01.2008, 19:01
| Nach oben
#5 | | Neuer Benutzer
Registriert seit: 15.01.2008
Beiträge: 4
|
Ich habe den Code noch mal überarbeitet und bekomme keine Fehlermeldung mehrm,aber es gibt mir kein Bild aus sondern da steht nur die Bilddatei. Irgendwas mache ich bei der echo Ausgabe flasch,ich komme aber einfach nicht dahinter. In den Ordner thumb werden die Beilder aber auch geschrieben.
Geändert von litterauspirna (15.01.2008 um 20:31 Uhr).
|
| |
15.01.2008, 20:43
| Nach oben
#6 | | Neuer Benutzer
Registriert seit: 15.01.2008
Beiträge: 4
|
Warum schreibt er mir nun keine Bilder mehr in den Ordner thumb? Ich verzweifel langsam. erst schreibt er sie rein aber gibt sie net aus,dann gab er sie aus und schreibt nun keine mehr rein! PHP-Code: <?php function mkthumb($pic, // Dateiname $img_width = "100", // max. Größe in x-Richtung $img_height = "100", // max. Größe in y-Richtung $folder_scr = "org", // Ordner der normalen Bilder $des_src = "thumb") // Ordner der Thumbs { // Größe und Typ ermitteln list($src_width, $src_height, $src_typ) = getimagesize($folder_scr."/".$pic);
// neue Größe bestimmen if($src_width >= $src_height) { $new_image_width = $img_width; $new_image_height = $src_height * $img_width / $src_width; } if($src_width < $src_height) { $new_image_height = $img_width; $new_image_width = $src_width * $img_height / $src_height; }
if($src_typ == 1) // GIF { $image = imagecreatefromgif($folder_scr."/".$pic); $new_image = imagecreate($new_image_width, $new_image_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); imagegif($new_image, $des_src."/".$pic, 100); imagedestroy($image); imagedestroy($new_image); return true; } elseif($src_typ == 2) // JPG { $image = imagecreatefromjpeg($folder_scr."/".$pic); $new_image = imagecreatetruecolor($new_image_width, $new_image_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); imagejpeg($new_image, $des_src."/".$pic, 100); imagedestroy($image); imagedestroy($new_image); return true; } elseif($src_typ == 3) // PNG { $image = imagecreatefrompng($folder_scr."/".$pic); $new_image = imagecreatetruecolor($new_image_width, $new_image_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height); imagepng($new_image, $des_src."/".$pic); imagedestroy($image); imagedestroy($new_image); return true; } else { return false; } }
$bild_result = mysql_query("Select * From $tab_bild where catid='".strip_tags(mysql_real_escape_string($_GET['catid']))."'")or die(mysql_error());
$i=1; while($bild_row = @mysql_fetch_array($bild_result)){ $bild_id = $bild_row['id']; $bild_catid = $bild_row['catid']; $bild_bild = $bild_row['bild']; $bild_view = $bild_row['view'];
$pic = $bild_bild; if($i==1){echo "<tr>";} echo" <td> <table cellspacing=\"0\" cellpadding=\"0\" border=\"1\" width=\"140\"> <tr> <td colspan=\"3\" align=\"center\">1</td> </tr> <tr> <td width=\"10\">2</td> <td width=\"120\" align=\"center\"> <a href=\"javascript:window.open('show_pic.php?id=".$bild_row['id']."','fenster','width=600,height=500,left=250,top=150');void(0)\"> "; $folder_scr="org"; $img_width = "100"; // max. Größe in x-Richtung $img_height = "100"; // max. Größe in y-Richtung $folder_scr = "org"; // Ordner der normalen Bilder $des_src = "thumb";
echo "<img src=\"".$des_src."/".$pic."\"";
echo" </a> </td> <td width=\"10\">3</td> </tr> <tr> <td colspan=\"3\" align=\"center\">4</td> </tr> </table </td> "; if($i==3) {echo "</tr>";$i=0;} $i++; } ?> </table>
Geändert von litterauspirna (15.01.2008 um 21:07 Uhr).
|
| |
16.01.2008, 07:47
| Nach oben
#7 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.203
|
Ich kann das bei mir nicht nachvollziehen, da ich nicht weiß, welche Daten bei dir in der Datenbank stecken.
Wenn du den Aufbau der Tabelle sowie ein paar Datensätze hier posten würdest, dann könnte ich das mal ausprobieren.
Wenn Probleme auftauchen, die man nicht nachvollziehen kann, dann sind diese oftmals in der Logik des Programmaufbaus begründet.
Wenn das nicht der Fall ist, dann könnten Fehlermeldungen hilfreich sein. Diese unterdrückst du jedoch mit dem @ vor dem mysql_fetch_array.
Daher hier mal die folgenden 3 Hinweise: error_reporting
Du solltest zu Beginn des Skriptes folgendes stehen haben: PHP-Code: <?php
error_reporting(E_ALL);
?> Dann werden dir Fehler im PHP-Code angezeigt. Dann weißt du, was du noch beseitigen musst. http://de2.php.net/error_reporting
Ebenso kann man das auch in die config-Datei schreiben, wenn diese auf jeder Seite zu Beginn eingebunden wird.
Mögliche Fehler die dann auftreten und wie man sie beheben kann: Notice: Use of undefined constant ... Notice: Undefined variable ... mysql_error
Man sollte bei kritischen Anwendungen immer mysql_error() verwenden. Manchmal ist es ggf. besser darauf zu verzichten, beim debuggen aber sollte es imho dabei sein! Etwa so: PHP-Code: <?php
$sql = "SELECT
`feldname`, `nocheinfeldname`, `undnochfeldname`
FROM
`tabellenname`
WHERE
`feldname` LIKE '%suchwort%'
AND
`nocheinfeldname` = 'wert'
ORDER BY
`undnochfeldname` ASC
LIMIT
0 , 30";
$result = mysql_query($sql) or exit('<h2>Fehler</h2>sql-querry: '$sql.'<br />error: '.mysql_error());
// ...
?> exit mysql_error Fehlerunterdrückung
Ein @ vor einer Funktion sorgt dafür, dass die Fehler, die man auf andere Weise auffangen sollte, nicht angezeigt werden.
Zum debuggen (also dem Auffinden von Fehlern) ist das absolut destruktiv.
|
| |
16.01.2008, 09:58
| Nach oben
#8 | | Bastian Fenske
Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
|
Unabhängig vom konkreten Fehler: Wie wäre es mal mit „ausklammern“? PHP-Code: <?php
...
$aTypes = array( 1 => 'gif', 2 => 'jpeg', 3 => 'png' );
if (!array_key_exists($src_typ, $aTypes)) return false;
$sType = $aTypes[$scr_typ];
$sCreateFunction = 'imagecreatecreatefrom' . $sType; $sOutputFunction = 'image' . $sType;
$rImage = call_user_func($sCreateFunction, "$folder_scr/$pic"); $rNewImage = imagecreatetruecolor($new_image_width, $new_image_height);
imagecopyresampled($rNewImage, $rImage, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
call_user_func($sOutputFunction, $rNewImage, "$des_src/$pic", 100);
imagedestroy($rImage); imagedestroy($rNewImage);
return true; |
| |
16.01.2008, 10:37
| Nach oben
#9 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.203
| Zitat:
Zitat von Basti Unabhängig vom konkreten Fehler: Wie wäre es mal mit „ausklammern“? | wenn ich das richtig verstehe, dann betrifft das nicht das Problem, sondern ist ein Lösungsansatz die Funktion enorm zu verkürzen.
Sehe ich das richtig?
|
| |
16.01.2008, 11:53
| Nach oben
#10 | | Bastian Fenske
Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
| Zitat:
Zitat von Jann Hendrik Zitat:
Zitat von Basti Unabhängig vom konkreten Fehler: Wie wäre es mal mit „ausklammern“? | wenn ich das richtig verstehe, dann betrifft das nicht das Problem, sondern ist ein Lösungsansatz die Funktion enorm zu verkürzen.
Sehe ich das richtig? | Ja. Mit dem Problem hier hat das direkt nichts zu tun, aber da bluten einem doch die Augen, wenn da dreimal hintereinander 7 praktisch identische Zeilen stehen.  Solcher Copy`n Paste-Code läd ja die Fehler geradezu ein.
Ob mein Code oben von der Funktion her identisch ist und funktioniert hab ich allerdings jetzt nicht getestet.
Basti
|
| |
16.01.2008, 12:37
| Nach oben
#11 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.203
| Zitat:
Zitat von Basti jetzt nicht getestet. | Ich kannte die Funktion call_user_func() bisher nicht, so dass ich das nicht nutzen konnte...
Ich werde das aber bei Gelegenheit in das Tutorial einarbeiten.
|
| |
16.01.2008, 18:14
| Nach oben
#12 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 591
|
Der Gedanke mit call_user_func ist gar so schlecht, wirft aber Probleme mit sich.
1. ein GIF-Bild muss nicht unbedingt mit TrueColor erzeugt werden
2. beim Speichern wird der Parameter zur Qualität Fehler verursachen
Somit sind wir wieder bei der ersten Lösung mit Abfrage 
Aber müsste man halt mal ausprobieren.
Geändert von CIX88 (16.01.2008 um 18:23 Uhr).
|
| |
17.01.2008, 08:21
| Nach oben
#13 | | Bastian Fenske
Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
|
Zuviele Parameter dürften eigentlich keinen Fehler werfen. PHP-Code: <?php
...
$aTypes = array( 1 => 'gif', 2 => 'jpeg', 3 => 'png' );
if (!array_key_exists($src_typ, $aTypes)) return false;
$sType = $aTypes[$scr_typ];
$sCreateFunction = 'imagecreatecreatefrom' . $sType; $sOutputFunction = 'image' . $sType; $sNewImageFunction = 'imagecreate'; if ($sType !== 1) $sNewImageFunction .= 'truecolor';
$rImage = call_user_func($sCreateFunction, "$folder_scr/$pic"); $rNewImage = call_user_func($sNewImageFunction, $new_image_width, $new_image_height);
imagecopyresampled($rNewImage, $rImage, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
call_user_func($sOutputFunction, $rNewImage, "$des_src/$pic", 100);
imagedestroy($rImage); imagedestroy($rNewImage);
return true; Basti
PS:
… immer noch ungetestet.
Geändert von Basti (17.01.2008 um 08:25 Uhr).
|
| |
17.01.2008, 09:10
| Nach oben
#14 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 591
|
Komisch, komisch es wird auch kein Fehler angezeigt.
Ich habe es jetzt getestet: http://www.mediacix.de/code/Thumbnai...-174-code.html
Normalerweise wird bei ImageGIF(source, name, parameter) ein Fehler ausgeworfen, weil es gerade bei GIF keine Parameter gibt. Bei PNG ist es von der PHP-Version anhängig.
Interessant, dass es dennoch ohne Fehler funktioniert!
|
| |
17.01.2008, 11:58
| Nach oben
#15 | | Bastian Fenske
Registriert seit: 04.01.2006 | |