| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

14-12-2010, 11:46
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
Und wieder ein Bilder-Thread
Hallo zusammen,
ich habe ein Problem mit meinem Bilderscript.
Der Upload eines Bildes funktioniert und das Bild wird auch korrekt abgelegt. Allerdings erstellt er mir einfach kein Thumb davon.
Leider sehe ich den Wald vor lauter Bäumen nicht mehr, vielleicht jemand von euch?
PHP-Code:
if (is_uploaded_file($_FILES["product_imageurl"]["tmp_name"]))
{
if (strrpos($_FILES["product_imageurl"]["type"],"image/") === false)
{
$inform = "Warnung: Falsche Bilddatei! Daten wurden aktualsiert, jedoch nicht der Link!";
}else
{
$newpath = "upload/image/".time(). substr($_FILES["product_imageurl"]["name"],strrpos($_FILES["product_imageurl"]["name"],"."));
echo $newpath; //Ausgabe /upload/image/1291908266.jpg <-- funktioniert
$imgfile = $newpath;
// Erstellt ein thumbnail eines Bildes
// Ordner unter $speicherordner benötigt ggf. Schreibrechte CHMOD(777)
// Parameter:
// $imgfile: Pfad zur Bilddatei
// $speicherordner: Ordner indem die Thumbnails gespeichert werden sollen
// $filenameOnly: Soll nur der Dateiname als Name für Thumbnail verwendet werden,
// ansonsten inkl. Pfad
function thumbnail($imgfile, $speicherordner="upload/image/thumb/", $filenameOnly=true)
{
//Max. Größe des Thumbnail (Höhe und Breite)
$thumbsize = 100;
//Dateiname erzeugen
$filename = basename($imgfile);
//Fügt den Pfad zur Datei dem Dateinamen hinzu
//Aus ordner/bilder/bild1.jpg wird dann ordner_bilder_bild1.jpg
if(!$filenameOnly)
{
$replace = array("/","\\",".");
$filename = str_replace($replace,"_",dirname($imgfile))."_".$filename;
}
//Schreibarbeit sparen
$ordner = $speicherordner;
//Speicherordner vorhanden
if(!is_dir($ordner))
return false;
//Wenn Datei schon vorhanden, kein Thumbnail erstellen
if(file_exists($ordner.$filename))
return $ordner.$filename;
//Ausgangsdatei vorhanden? Wenn nicht, false zurückgeben
if(!file_exists($imgfile))
return false;
//Infos über das Bild
$endung = strrchr($imgfile,".");
list($width, $height) = getimagesize($imgfile);
$imgratio=$width/$height;
//Ist das Bild höher als breit?
if($imgratio>1)
{
$newwidth = $thumbsize;
$newheight = $thumbsize/$imgratio;
}
else
{
$newheight = $thumbsize;
$newwidth = $thumbsize*$imgratio;
}
//Bild erstellen
//Achtung: imagecreatetruecolor funktioniert nur bei bestimmten GD Versionen
//Falls ein Fehler auftritt, imagecreate nutzen
if(function_exists("imagecreatetruecolor"))
$thumb = imagecreatetruecolor($newwidth,$newheight);
else
$thumb = imagecreate ($newwidth,$newheight);
if($endung == ".jpg")
{
imageJPEG($thumb,$ordner."temp.jpg");
$thumb = imagecreatefromjpeg($ordner."temp.jpg");
$source = imagecreatefromjpeg($imgfile);
}
else if($endung == ".gif")
{
imageGIF($thumb,$ordner."temp.gif");
$thumb = imagecreatefromgif($ordner."temp.gif");
$source = imagecreatefromgif($imgfile);
}
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//Bild speichern
if($endung == ".png")
imagepng($thumb,$ordner.$filename);
else if($endung == ".gif")
imagegif($thumb,$ordner.$filename);
else
imagejpeg($thumb,$ordner.$filename,100);
//Speicherplatz wieder freigeben
ImageDestroy($thumb);
ImageDestroy($source);
//Pfad zu dem Bild zurückgeben
return $ordner.$filename;
}
if (move_uploaded_file($_FILES["product_imageurl"]["tmp_name"], $newpath))
{
$inform = "";
$product_imageurl = $newpath;
}else
{
$inform = "Bild konnte nicht verschoben werden!!!";
}
}
}else
$product_imageurl = isset($_POST['product_imageurl_text'])?$_POST['product_imageurl_text']: $product_imageurl;
Vielen Dank für die Hilfe
Jörn
|

14-12-2010, 12:21
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Du solltest deinen Code besser formatieren. Man blickt ja kaum noch durch!
Zum Erstellen eines Thumbnails hast du zwar eine Funktion, rufst sie aber nicht auf. Dann wird natürlich auch kein Thumb erstellt. ;-)
|

14-12-2010, 12:22
|
|
Wyveres
Registrierter Benutzer
|
|
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
|
|
1. bissel breit der quelltext.
2. wird die function thumbnail überhaupt aufgerufen?
OffTopic:
ah mist 1ne minute zulang gezögert
|

14-12-2010, 12:55
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
Hi,
ja, die function wird aufgerufen.
Vielleicht hat ja jemand auch ne andere Lösung, die ich einbauen könnte.
Wie gesagt, das große Bild wird im korrekten Verzeichnis in der richtigen Größe gespeichert, nur eben kein Thumb.
Gruß
Jörn
|

14-12-2010, 13:23
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Wo wird sie denn aufgerufen, die Funktion "thumbnail"? Im bisher gezeigten Code jedenfalls überhaupt nicht.
|

14-12-2010, 13:36
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
Funktion
Hi,
ich habe nur die Funktion direkt in den Quelltext kopiert, damit man alles zusammen hat.
Normal sieht es so aus:
PHP-Code:
$newpath = "upload/image/".time(). substr($_FILES["product_imageurl"]["name"],strrpos($_FILES["product_imageurl"]["name"],"."));
function thumbnail();
if (move_uploaded_file($_FILES["product_imageurl"]["tmp_name"], $newpath)) { $inform = ""; $product_imageurl = $newpath; }else { $inform = "Bild konnte nicht verschoben werden!!!"; }
Gruß
Jörn
|

14-12-2010, 14:01
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Das hat doch damit nichts zu tun, du rufst sie einfach nicht auf, das ist das Problem. Der aktuelle Code erzeugt einen Parserfehler.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

14-12-2010, 14:22
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Kurze Nachhilfe fällig. So definiert man eine Funktion:
PHP-Code:
function name($parameter, ...) { // code }
Jetzt existiert sie, wird aber nicht ausgeführt und bewirkt daher erstmal gar nichts. Um sie auszuführen, muss man sie aufrufen. Das geht so:
So einen Aufruf gibt es bei dir nicht! Deine Funktion wird also nicht ausgeführt und deshalb auch kein Thumbnail erstellt.
Ich hoffe wir haben es jetzt langsam.
|

14-12-2010, 14:42
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
ok, hab ich gemacht
PHP-Code:
$newpath = "upload/image/".time(). substr($_FILES["product_imageurl"]["name"],strrpos($_FILES["product_imageurl"]["name"],"."));
$imgfile = $newpath;
thumbnail ();
Muss ich aus der Funktion einen Wert zurückgeben?
Eigentlich ja nicht, denn das Thumbnail sollte ja on the fly erstellt werden und die Funktion braucht keinen Rückgabewert.
Geändert von pjoern (15-12-2010 um 09:06 Uhr)
|

14-12-2010, 14:44
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Rückgabe muss nicht sein, aber die Funktion erwartet mindestens einen Parameter. Du solltest dringend dein error-reporting schärfer einstellen. Lies unsere Regeln, da steht wie es geht!
|

14-12-2010, 15:06
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
Ich habe mein error reporting einegschaltet mit
error_reporting(E_ALL);
ini_set('display_errors', 1);
Er bringt mir aber keinen Fehler mehr.
Leider erstellt er auch kein Thumb und ich weiss nicht, wie ich die function auf ihre Funktionalität testen kann.
|

14-12-2010, 15:09
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
Ich übergebe nun folgendes:
PHP-Code:
$newpath = "upload/image/".time(). substr($_FILES["product_imageurl"]["name"],strrpos($_FILES["product_imageurl"]["name"],"."));
$imgfile = $newpath;
thumbnail ($imgfile);
echo $imgfile;
Aber in der Variablen $imgfile steht immer noch der alte Pfad drin, den ich vorher aus $newpath bekommen habe, also in dem Fall upload/image/1292335543.gif
Allerdings gibt es keine Fehlermeldung sonst...
Geändert von pjoern (15-12-2010 um 09:06 Uhr)
|

14-12-2010, 15:39
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
PHP-Code:
$imgfile = thumbnail($imgfile); var_dump($imgfile);
|

14-12-2010, 15:53
|
|
pjoern
Registrierter Benutzer
|
|
Registriert seit: Aug 2006
Ort: Neunkirchen
Beiträge: 107
|
|
liefert mir ein bool(false) zurück
|

14-12-2010, 17:01
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Dann schauen wir jetzt in die Funktion und suchen die Stelle(n) wo false zurück gegeben wird. Was steht davor? Wann passiert das?
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|