| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 147
| PHP Memory Error bei Image Script
Hi, habe seit längerer Zeit ein Script, über das User jpg Bilder hochladen können und für die dann automatisch ein Thumbnail und eine neue Version in den von mir vorgegebenen Dimensionen erstellt werden. Soweit so gut, das Ganze funktionierte monatelang problemlos. Nun bekomme ich bei Ausgangsbildern über ~ 500kb die Fehlermeldung: Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 8192 bytes) in /var/www/web196/html/ratsschlag/admin/admin_photo_add.php on line 68 Das Script scheint also das Speicherlimit von 12 MB des Providers überzogen zu haben. Ich ruf den Provider an und frag nach... ein Tag später lief es wieder ohne jede weitere Angabe von Gründen. Jetzt, eine Woche danach, das gleiche Problem wieder. In der betreffenden Zeile ist lediglich ein "$src_img = ImageCreateFromJPEG($pfad);" Mein Provider ist sich anscheinend keiner Schuld bewusst, wie zumindest die Antwort auf meine Mail besagt: "von unserer seite wurde auch nix verändert" dazu fällt mir sowieso nichts mehr ein... Frage: Kennt einer das Problem bzw. wie ich in dem Zusammenhang "Speicher" sparen kann ausser durch frühzeitiges imagedestroy() ? Bei Bedarf kann ich das ganze Script mal anhängen, ist recht groß (und unübersichtlich ^^) MfG PeFro |
| | |
| | #2 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
wendest du nach jedem bild ein imagedestroy an? bzw was heist frühzeitig? nach dem abspeichern solltest du das bild wieder freigeben, wenn du es überlädst denke ich das du die referenz zum bild verlierst und den speicher nicht (sofort) freigeben kannst.
__________________ Geändert von binary blade (30-08-2004 um 17:29 Uhr) |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 147
| PHP-Code: |
| | |
| | #6 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
uiuiui ![]() nicht so den durchblick. wieso machste denn da soviele bilder auf? das sollte doch mit dem öffnen des orginalbildes völlig reichen, dann arbeitest du dich von groß nach klein runter.
__________________ |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 147
|
aaaaaaaaaaalso ![]() in skript-reihenfolge: $src_img = da wird das hochgeladene Ursprungsbild reingeladen $thumb = (dummer Name) das is das skalierte Ursprungsbild ($src_img) $rsimage = "goldener Schnitt" vom skalierten Ursprungsbild ($thumb) $src_img = $rsimage (das könnt ich wahrscheinlich weglassen) $thumb2 = thumbnail vom "neuen" $src_img also $rsimage Habs mal ausprobiert und das vorletzte bild weggelassen und direkt $rsimage genommen, hat aber leider auch nix gebracht. Gibts nich ne Möglichkeit sich den verbrauchten Arbeitsspeicher ausgeben zu lassen oder selber zu berechnen? Geändert von PeFro (30-08-2004 um 18:12 Uhr) |
| | |
| | #8 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
naja ich würde versuchen nur das originalbild zu öffnen, weil jedes öffnen php ne menge arbeit macht. eigentlich sollte aber der speicher freigegeben werden, es könnte aber das das es ein bug ist, der hier sieht ziemlich ähnlich aus: http://bugs.php.net/bug.php?id=29558&edit=1
__________________ |
| | |
| | #9 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
so pi mal daumen könntest du den arbeitsspeicher berechenen wenn du alle benutzten bilder mit der imagegd2() funktion abspeicherst, das ist das rohe format womit gearbeitet wird, übrigens ganz nützlich wenn du einzelne bilder öfter laden musst. ansonsten vielleicht irgendwelche debugger oder so: http://pecl.php.net/package/Xdebug aber das bringt dir in dem falle nicht viel, ansoch von php aus weis ich da keine möglichkeit.
__________________ |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 147
|
ich müsste ja mind. 2 bilder öffnen, original und zielbild an den bug glaub ich auch nicht wirklich was mich am meisten irritiert... ich habe jetzt alles nach dem ersten imagecreateFromJPEG() auskommentiert und der Fehler kommt immernoch habe mir vor dem befehl mal den benutzten speicher ausgeben lassen und bekomme "375392" also knapp 400kB, danach kann ich nix mehr ausgeben lassen, weil das script ja direkt nach dem imagecreatefromjpeg abkackt wie in aller Welt schafft er es dann von einem ~ 630kB jpg nach einem Aufruf 12 MB Speicher zu belegen?? ich checks nich... edit: der befehl für den belegten speicher is übrigens memory_get_usage() ab PHP 4.3.2 wie ich gerade gelesen hab Geändert von PeFro (30-08-2004 um 18:29 Uhr) |
| | |
| | #11 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
vielleicht liegts am bild mal nen anderes nehmen oder einmal mit PS öffnen, mit und ohne progressiv testen. kann ja sein das der speicher noch immer von vorherigen bildern belegt ist?!? kannst ja mal local mit der CLI version testen und gucken wie/ob sich der speicher hochschaukelt. so jetzt muss ich aber einen trinken gehen
__________________ |
| | |
| | #12 (permalink) |
| Neuer User Registriert seit: Nov 2002 Ort: Wien
Beiträge: 449
|
Also ich denke es könnte evtl. daran liegen, dass der Server auf dem Dein Shared-Host untergebracht ist bisher nicht voll ausgelastet war und deshalb Dein Skript anstandslos lief. Jetzt haben die lieben Administratoren noch ein "paar" shared-Hosts mit draufgeknallt und plötzlich steigt der insg. Speicherverbrauch an. Es funktioniert "glaube ich" so, dass man nicht jedem shared-host einen eigenen Speicher-Bereich zur Verfügung stellt, sondern sich dies nur für alle zusammen einstellen lässt. D.h., dass die ~12MB für sagen wir mal 1000 shared-hosts zur Verfügung steht. Natürlich geht der Hoster davon aus, dass von diesen 1000 shared-hosts maximal ~5 wirklich im gleichen Zeitrahmen angesurft werden und in diesem Fall jedem shared-host 2,4 MB Ram zur verfügung stehen. EISKALTE KALKULATION. Ich hatte vor ein paar Monaten das gleiche Problem, einzige Lösung war zu einem Hoster zu wechseln, bei dem das Verhältnis von zugewiesenem Speicher zu Anzahl der User besser proportioniert ist. Bei mir ist es kein Problem ein 2MB JPEG File in einem Arbeitsschritt zu verkleinern, überblenden und dann noch ein Thumbnail zu erstellen. Wo mein alter Hoster schon bei einem File über 100kb Schwierigkeiten gemacht hat. Also lange Rede kurzer Sinn, Du musst wahrscheinlich zu einem Hoster wechseln, der Dir zumindest indirekt garantieren kann, dass Dir genügend Ram zur Verfügung steht. Ich habe auf www.all-inkl.com gesetzt und fahre damit sehr gut! |
| | |
| | #13 (permalink) |
| Neuer User Registriert seit: Aug 2001
Beiträge: 147
|
Das hab ich mir schon fast gedacht... War sowieso kurz vor nem Umstieg, weil ich im letzten Monat ca. 3-4 Tage Komplettausfall oder aber mysql down hatte...nich dass das die Monate vorher wesentlich besser gewesen wäre. Ist immer verdammt schwer bei den "kleineren" günstigen Anbietern langfristig solides Hosting zu finden ![]() Danke nochmal an alle PeFro |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |