Avatar billede zurekk Nybegynder
20. juli 2007 - 04:32 Der er 29 kommentarer og
1 løsning

"Fatal error: Allowed memory"

Hej Eksperter,

Jeg får denne fejl når jeg prøver at uploade et billede der fylder 1 mb.

"Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 10240 bytes) in"

Som i kan se er Allowed memory sat til 16 mb, så har ingen idé om hvor de 15 mb kommer fra :(?

Nogen der har haft samme problem?
Avatar billede jakobdo Ekspert
20. juli 2007 - 07:01 #1
Er det et jpeg billede du prøver at uploade?
Billede fylder mere end når de behandles, end lige den 1 mb som filen rent faktisk fylder.
Det blev lidt kryptisk, men håber du forstod hvad jeg mente! :o)
Avatar billede ravsted-dk Nybegynder
20. juli 2007 - 14:45 #2
er det et phpbb forum, for det kan være din chache der fylder din serveren.
Avatar billede zurekk Nybegynder
20. juli 2007 - 16:40 #3
Jakob >
Det er et JPG :)
Hvad kan jeg så gøre ved det?


ravsted-dk >
Nej :)
Avatar billede zurekk Nybegynder
20. juli 2007 - 16:52 #4
Altså.. Det er et stort(x,y) digital billede, som jeg resizer til 1000x1200(ca.) så hvad er det der fylder 16mb?
Det er lidt et problem da det er med ét billede, og det bliver en multiuploader, dvs. man skal kunne uploade flere billeder af gangen.
Avatar billede jakobdo Ekspert
20. juli 2007 - 21:35 #5
Hvor stort er dit billede inden du resizer det?
Avatar billede erikjacobsen Ekspert
20. juli 2007 - 21:39 #6
JPG-billeder er komprimerede. For at kunne lave beregninger på dem, så skal du af-komprimeres. Et 1MB JPG-billede kan sagtens fylde omkring 16 MB. En øvelse til dig: gem dit billede som ikke komprimeret BMP, og se hvad det fylder - meget illustrativt...

Jo, man kan gøre noget ved det: få dig en webserver med mere RAM sat af til PHP. Det kan kræve du skifter webhotel. Eller får din egen server. Eller: resize billedet inden du lægger det op.
Avatar billede zurekk Nybegynder
20. juli 2007 - 22:16 #7
Well, det bliver en upload service, så kan ikke bede mine brugere om at gemme i BMP eller resize inden :)

Siden bliver lagt op på egen server, men hvis et billede er for meget for et almindeligt webhotel, skal der vel ikke mere end 100 uploads på samme tid til at lægge en server ned :(?
Avatar billede erikjacobsen Ekspert
20. juli 2007 - 22:27 #8
Hver PHP-process får tildelt en max RAM - den sætter du bare op. Jeg skulle engang sætte op fra fra 8 til 16MB, nej det var ikke nok, så til 32MB. Det var nu også en person med et kamera med MANGExFLERE pixels - husker ikke tallene. Er RAM større end Nx32MB, så er der plads til N samtidige brugere (sådan ca.)

Men måske skal man slet ikke bruge PHP til billedupload, men skrive noget mere dynanisk i C++ eller sådan noget. PHP har nu sine begrænsninger...

Du skal ikke bede dine brugere gemme i BMP - det er en øvelse til DIG for at se hvad et ikke-komprimeret billede fylder.
Avatar billede erikjacobsen Ekspert
20. juli 2007 - 22:29 #9
Og man behøver jo ikke resize billederne med det samme, men putte dem i en kø, så man ikke får lagt serveren ned, fordi der pludselig er mange samtidige brugere.
Avatar billede zurekk Nybegynder
20. juli 2007 - 22:34 #10
Oh.. på den måde.
Men jeg koder ikke C++, så det må blive en anden gang ^^

Det må være det ram noget, for den viser samme fejl, bare jeg prøve at flytte filen(move_uploaded_file).

Så må jeg bare stoppe hvis man uploader for store filer.

Så tænkte jeg på om du vidste hvorfor jeg får denne fejl:
Warning: imagecopyresized(): supplied argument is not a valid Image resource in

min resource er $imgthumb = imagecreatefromgif( $newimgpath ); break;

Og jeg er 100% sikker på at billede findes.
Avatar billede zurekk Nybegynder
20. juli 2007 - 22:35 #11
Erik >
Hvordan gør jeg det?
Avatar billede jakobdo Ekspert
20. juli 2007 - 22:43 #12
Hvor stort er dit originale billede?
Avatar billede zurekk Nybegynder
20. juli 2007 - 22:47 #13
Det der giver problemer er ca. 3000x?
Det er digital billeder :)

Mindre billeder(prøvet med et 900x400) giver ikke problemet, der får jeg så bare "Warning: imagecopyresized(): supplied argument is not a valid Image resource in" :)
Avatar billede erikjacobsen Ekspert
20. juli 2007 - 22:53 #14
"Hvordan gør jeg det?"  -  jamen, lær noget om programmering, og servere og hvad ved jeg - et lille skridt af gangen. Det kan du få sikkert få lidt hjælp til her ;)  Eller betal nogen for at løse dine problemer. Kan du ikke se at du pludselig spørger om meget mere end du kan forvente andre bare løser for dig gratis i deres fritid?

Og nej, jeg ved ikke hvorfor du får "Warning: imagecopyresized(): supplied argument is not a valid Image resource in ...". Kan du ikke du ikke se at du mangler, at vise hele koden der leder frem til fejlen. Der er ikke så mange profeter på eksperten.dk ...
Avatar billede erikjacobsen Ekspert
20. juli 2007 - 22:54 #15
Et 1MB JPG-billede på 3000xNOGET pixels er godt nok komprimeret en hel del. Det er vist der man oversælger på pixel-størrelse ... ;)
Avatar billede zurekk Nybegynder
20. juli 2007 - 23:00 #16
erik >
Var ikke meningen at det skulle lyde som om jeg bad om en fuld løsning :)
Mere en metode e.l., f.eks. hvis det har et navn, eller et sted jeg kan læse om det.

Mht. fejlen:

switch( $imgsize[2] )
                                            {
                                                case 1:
                                                    $imgthumb = imagecreatefromgif( $newimgpath ); break;
                                                case 2:
                                                    $imgthumb = imagecreatefromjpeg( $newimgpath ); break;
                                                case 3:
                                                    $imgthumb = imagecreatefrompng( $newimgpath ); break;
                                            }
                                        imagecopyresized( $imgpath . 'thumbs/' . $newfilename, $imgthumb, 0, 0, 0, 0, $width, $height, $imgsize[0], $imgsize[1] );
Avatar billede jakobdo Ekspert
20. juli 2007 - 23:12 #17
Du kunne måske lave et tjek med:

getimagesize() og tjekke om størrelsen på billedet er for stort.
F.eks. over 800x600 ?
1000x1000 eller noget?
Avatar billede zurekk Nybegynder
20. juli 2007 - 23:17 #18
Jep.. Det var også det jeg gjorde, og så skulle den så resize.
Men jeg tror bare at jeg sætter en maks filstørrelse istedet.
Men det nytter jo så ikke så meget hvis en JPG på 1,2 lægger det hele ned, så kan en 0,99 sikkert også.

Men jeg må bare finde ud af noget når jeg kan teste på egen server.
Avatar billede erikjacobsen Ekspert
20. juli 2007 - 23:36 #19
Du kan som sådan ikke bruge filstørrelsen til noget - den har ikke en direkte sammenhæng  med de oprindelige XXXxYYY pixels. Du vil derfor ramme forkert mange gange: Enten afviser du nogen, der kunne have været behandlet, eller også slipper du nogen igennem, der vil give fejl.
Avatar billede zurekk Nybegynder
20. juli 2007 - 23:46 #20
Erik >

Det er egentlig heller ikke så vigtigt om billedet er 2323123x32123423 eller 23x23.
Det skal bare tage for meget plads, derfor ville jeg resize alt over 1000x? til 1000x?, da filestørrelsen jo så også bliver mindre(forhåbentlig).
Avatar billede erikjacobsen Ekspert
21. juli 2007 - 00:20 #21
Det er vel netop vigtigt hvor stort billedet er i PIXELxPIXEL, da det den størrelse der går ud over din PHP RAM-allokering, og den kan man ikke se direkte i filstørrelsen.
Avatar billede zurekk Nybegynder
21. juli 2007 - 00:48 #22
Aha.. Men hvad anbefaler du så?(hvis noget :))

Jeg vil jo gerne have at man skal kunne uploade billeder direkte fra digital kameraet.

Er det bare at bruge lidt flere ram?
Avatar billede erikjacobsen Ekspert
21. juli 2007 - 08:26 #23
Ja, det er vel i første omgang løsning, fx fra 16MB til 32MB RAM allokering i PHP, og så se hvad der sker. Det er normalt ikke noget man bare lige får et webhotel til at ændre, men du kan jo eksperimentere med fx Apache/PHP på din egen maskine først.
Avatar billede jakobdo Ekspert
21. juli 2007 - 09:10 #24
getimagesize() burde vel netop kunne bruges til at lave en løsning på nuværende platform.
Den kan give dig X og Y ud fra et billede.
Avatar billede zurekk Nybegynder
22. juli 2007 - 19:13 #25
jakob >

Ja, men det nytter jo ikke så meget når siden ikke kan arbejde med den ^^
Det hele går jo ned når den prøver at uploade filen.
Avatar billede erikjacobsen Ekspert
22. juli 2007 - 19:15 #26
Det går ikke ned når du uploader, men når du skal til at arbejde med billedet med magecreatefromgif osv. Du kan (formentlig) godt uploade billedet og tjekke dimensionerne, uden det går galt.
Avatar billede jakobdo Ekspert
22. juli 2007 - 19:24 #27
Hvis det går galt under upload, så er det max_upload_size i php som ikke er korrekt.
Din kode fejler med stor sandsynlighed først, når du begynder at arbejde med billedet via gdlib, som Erik også siger.
Avatar billede zurekk Nybegynder
24. juli 2007 - 20:01 #28
Oh.. well, det lyder jo straks bedre, smidt et svar begge, eller bare jakob da erik ikke "samler på point" ^^
Avatar billede jakobdo Ekspert
25. juli 2007 - 20:21 #29
Svar!
Avatar billede jakobdo Ekspert
26. juli 2007 - 10:32 #30
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester