imagedestroy() - nur WANN und WAS ??
Didi (der Verzweifelte)
- php
Hallo liebe SelfHTML-Gemeinde,
ich weiß nun wirklich nicht mehr weiter und hoffe als blutiger PHP-Anfänger auf euer Verständnis und Hilfe.
Ich benutze folgenden Code:
[code=php]
include("config.inc.php");
$tim01 = time();
$tim02 = rand(10,99);
$newpicname = $tim02.$tim01;
$ext = strrchr($bilddatei,'.');
$zipname = $newpicname;
$newpicname = $newpicname.$ext;
copy($bilddatei,"../images/full/$newpicname");
$bildpfad = "../images/full/";
$bildpfad_small = "../images/";
$dateiname = $newpicname;
if ($ext == ".jpg" || $ext == ".JPG") {
$function_image_create = "ImageCreateFromJpeg";
$function_image_new = "ImageJpeg";
}
$size = getimagesize("$bildpfad"."$dateiname");
$breite = $size[0];
$hoehe = $size[1];
$neueBreite = 310;
$neueHoehe = 232;
$altesBild=$function_image_create("$bildpfad"."$dateiname");
$neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe);
ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite, $neueHoehe,$breite,$hoehe);
$function_image_new($neuesBild,"$bildpfad_small"."$dateiname");
// Watermark Sequenz
$insertfile_id = imageCreateFromPng("../pictures/poweredby.png");
$sourcefile_id = $function_image_create("../images/full/$newpicname");
$sourcefile_width=imageSX($sourcefile_id);
$sourcefile_height=imageSY($sourcefile_id);
$gr= filesize("$bildpfad"."$dateiname");
$gr= $gr/1024;
$sourcefile_size= round($gr,2);
$insertfile_width=imageSX($insertfile_id);
$insertfile_height=imageSY($insertfile_id);
$inheight = $sourcefile_height - $insertfile_height;
imageCopyMerge($sourcefile_id, $insertfile_id,x,$inheight,0,0,$insertfile_width,$insertfile_height,100);
$function_image_new($sourcefile_id,"../images/full/"."$dateiname");
include("config.inc.php");
$bilddatei_size = $bilddatei_size/1024;
$anfuegen01="INSERT INTO db_pics (name, breite, hoehe, groesse, votes, rank, downloads, thumbviews, votesum) VALUES ('$newpicname','$sourcefile_width', '$sourcefile_height', '$sourcefile_size', '0', '0', '0','0', '0')";
$speicher = mysql_query($anfuegen01);
echo mysql_error();
mysql_close();
[/code]
Vorweg rufe ich eine PHP auf, die den Inhalt eines temporären Verzeichnisses (Bilder) ausliesst und dann pro Bild diesen Code ausführt (Erstellung eines Thumbs, Verschieben in einen anderen ordner und versehen des Originalbildes mit einem Bild-Wasserzeichen). Soweit habe ich mir ja den Code schon "zusammengesucht" und zum laufen bekommen. Mein Problem ist
nun, das durch den andauernden Durchlauf dieses Scriptes (wenn mehr als ein Bild in dem auszulesendem Ordner sind) immer einen Fatal Error aufgrund der Memory-Begrenzung bekomme. Ich habe es auch schon soweit verstanden, das dieses geschieht, weil die erzeugten Bilder im Speicher bleiben und so diesen killen. Die Lösung wäre ja theoretisch der Befehl "imagedestroy($bezeichner)" (jedenfalls wenn ich die Doku verstehe) - aber jetzt stehe ich da und weiß weder
WO ich den Befehl setzten muß, noch WAS jeweils als Bezeichner angegeben werden muß.
(Ich weiß, immer die Newbies...)
Es wäre toll, wenn man mir das mal hier erklären könnte (super wenns mit den richtigen Stellen usw. wäre).
Viele Grüße
Didi
Ahoi Didi (der Verzweifelte),
ich weiß nun wirklich nicht mehr weiter und hoffe als blutiger PHP-Anfänger auf euer Verständnis und Hilfe.
noch so einer, schrecklich ;-)
Ich benutze folgenden Code:
[...]
Mein Problem ist
nun, das durch den andauernden Durchlauf dieses Scriptes (wenn mehr als ein Bild in dem auszulesendem Ordner sind) immer einen Fatal Error aufgrund der Memory-Begrenzung bekomme. Ich habe es auch schon soweit verstanden, das dieses geschieht, weil die erzeugten Bilder im Speicher bleiben und so diesen killen. Die Lösung wäre ja theoretisch der Befehl "imagedestroy($bezeichner)" (jedenfalls wenn ich die Doku verstehe) - aber jetzt stehe ich da und weiß weder
WO ich den Befehl setzten muß, noch WAS jeweils als Bezeichner angegeben werden muß.
am besten nachdem du mit dem image fertig bist bevor du das nächste
nimmst und bearbeitest. also bevor du die schleife das nächstemal
durchläufst, bzw verläßt.
http://de2.php.net/manual/de/function.imagedestroy.php
(Ich weiß, immer die Newbies...)
ja schrecklich, nicht war? ;-)
MfG
Hallo,
nun, das ich imagedestroy() spätestens am Ende de Schleife setzten muß, war mir eigentlich schon klar. Die Frage ist nun eigentlich für mich, wo und mit welchem Bezeichner...
Da ja der Code nicht von mir stammt und ich so ganz noch nicht durchblick (von wegen Bezeichner), wäre es supi wenn man mir einen (oder mehrere :-) Tipps geben könnte.
VG
Didi (der noch immer recht verzweifelte)
PS: Vielen dank für die Antwort, nur leider blick ich den Code (s.o.) noch nicht so ganz durch...
Hello,
[...]
Wenn Du mit fopen() eine Datei öffnest, was schreibst Du dann in fclose() stäter als Argument rein?
...Siehst Du, und genauso geht das mit den Images auch, nur eben ansteller der Dateifunktionen mit den Bilderzeugungs-Funktionen.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Ahoi Didi (der Verzweifelte),
Hallo,
nun, das ich imagedestroy() spätestens am Ende de Schleife setzten muß, war mir eigentlich schon klar. Die Frage ist nun eigentlich für mich, wo und mit welchem Bezeichner...
du weist doch wo, oder wie jetzt? wenn du meinem link gefolgt bist
hast du das hier gelesen:
Beschreibung:
int imagedestroy ( int im )
ImageDestroy() gibt den durch das Bild im belegten Speicher wieder
frei. Im ist der Bezeichner, der ihnen beim Aufruf der Funktion
ImageCreate() zurück gegeben worden ist.
also machst du $im = ImageCreate(...); und korekt platziert vor
wiederholten durchlauf der schleife dann ImageDestroy($im);
Da ja der Code nicht von mir stammt und ich so ganz noch nicht durchblick
am anfang sollte man erstmal mit den "Hallo Welt" programmen beginnen
bevor man sich an komplexere aufgaben heranwagen sollte, Code zu
kopieren und verwenden ist kein guter programmier stil.
MfG
Hallo Didi, Daniel & Tom,
du weist doch wo, oder wie jetzt? wenn du meinem link gefolgt bist
hast du das hier gelesen:
Beschreibung:
int imagedestroy ( int im )
Ich denke einmal, das das ganz genau sein Problem ist, denn wenn man sich seinen (kopierten oder was auch immer) Code anschaut, dann fällt einem auf, das er ja erst die Funktion in einer Vari definiert und erst später die Vari aufruft. So einfach den Bezeichner zu finden ist in dem Kuddelmuddel ja nu doch nicht.
Ferner macht er ja nicht nur ein neues Bild, sondern wenn ich richtig liege 2 mit insgesamt 3 Bildern (Ein Original, das wird verschoben, dann ein Thumb aus dem Original, dann nimmt er sich wieder das Original und setzt noch ein zweites rein (Wasserzeichen).
am anfang sollte man erstmal mit den "Hallo Welt" programmen beginnen
bevor man sich an komplexere aufgaben heranwagen sollte, Code zu
kopieren und verwenden ist kein guter programmier stil.
Ich denke einmal, das er diesen "Anfang" schon hinter sich gelassen hat, denn sonst wäre er wohl nicht in der Lage, die wenn auch kopierten Codeteile, so zusammenzubretseln das es läuft - und das tut es immerhin. Wenn ich dann noch sehe, das er schreibt, das er davor ein Script hat das einen Ordner ausließt und dann pro Bild diesen Code aufruft, denke ich einmal das "Hallo Welt" doch ein wenig dekradierend ist, zumal er ja auch schon die Lösung im weitesten Sinne hatte (imagedestroy war im ja anscheinend klar, nur nicht wie bzw. mit welchem Bezeichner).
Ich denke wir haben einmal alle damit angefangen, Code zu kopieren und dann zu verändern um die Funktion (mal früher oder später :-) zu verstehen.
So, nun zurück zum Thema:
Schau mal deinen Code an, dort definierst du z.B. $altesBild mit einer imageCreate-Funktion (über die Vari "$function_image_create" - in dem Fall ist also $altesBild der Bezeichner.
Am besten schaust du dir den Code komplett durch, wo die mit der Vari "$function_image_create" arbeitest, dann findest du auch den entsprechenden Bezeichner.
Gruss
Georg