[PHP] Problemen met imagedestroy

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ik heb een script waarmee ik foto's upload en resize t.b.v. het toevoegen van producten aan een database en publiceer deze op de website.

Nu krijg ik steeds de melding 'Fatal error: Allowed memory size of 33554432 bytes exhausted ...'. Ik heb bij mijn ISP al de memory_limit verhoogd en memory_size via htaccess naar iets van 40MB.

Het zou tenslotte nog aan aan imagedestroy kunnen liggen, aangezien ik dit niet toepas. Alleen ik kom er niet uit hoe ik dit in mijn script moet gebruiken. Ik heb het na ' $image = imagecreatefromjpeg("../images/products/thumb/" . $file); ' geprobeerd maar dat wil niet helpen.

Kan iemand mij opweg helpen? PS let niet op mijn knullige php taal- en code, maar voorheen werkte het gewoon bij het uploaden van 1 foto.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
      <?

## Uploadscript

//kijken of er een bestand is geselecteerd 
if(isset($_FILES['bestand'])) { 

//random naam geven
function GenRandomPassword($lenght) { 
        
    $str = "abcdefghijkmnopqrstuvwxyz0123456789"; 

    srand((double)microtime()*1000000); 
    for ($i=0; $i<$lenght; $i++) {
        $num = rand() % strlen($str); 
        $tmp = substr($str, $num, 1); 
        $pass = $pass . $tmp; 
    }     
    return $pass; 
}

$naamnieuw = GenRandomPassword("8");

//strip de extensie om die achter de nieuwe bestandsnaam te plakken
                
$x = strrchr($_FILES['bestand']['name'], "."); 
$file = $naamnieuw . $x; 

//het bestand uploaden met de nieuwe of oude naam 
            
            
if(move_uploaded_file($_FILES['bestand']['tmp_name'], "../images/products/" . $file))
     {
            
//Thumb
//eigenschappen van de foto

list($breedte, $hoogte, $image_type) = getimagesize("../images/products/" . $file);

//verhouding tussen hoogte en breete
$image_ratio = $hoogte / $breedte;
    
 //nieuwe hoogte
if($image_ratio > 1) {
       $rs_breedte = 200;
       $rs_hoogte = 200 * $image_ratio;
   
} else {

        $rs_hoogte = 200;
        $rs_breedte = 200 / $image_ratio;
         }

//maak resize image aan in het geheugen
    $resize = imagecreatetruecolor($rs_breedte, $rs_hoogte);
    
//bron om te resizen
    $source = imagecreatefromjpeg("../images/products/" . $file);

//foto resize
    imagecopyresized($resize, $source, 0, 0, 0, 0, $rs_breedte, $rs_hoogte, $breedte, $hoogte);

// foto opslaan
    imagejpeg($resize, "../images/products/thumb/" . $file);
    $image = imagecreatefromjpeg("../images/products/thumb/" . $file);

    $size = getimagesize("../images/products/thumb/" . $file);
          imagedestroy($size);

// toevoegen aan DB
...

Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Je kunt (nee, je moet) imagedestroy aanroepen op de image handle (dus $source en $resize) zodra je de image resource niet meer nodig hebt. Dus na de imagecopyresized() functie kan de $source weg, en na imagejpeg() kan $resize weg.

Dit stukje code:
PHP:
1
2
3
4
    $image = imagecreatefromjpeg("../images/products/thumb/" . $file);

    $size = getimagesize("../images/products/thumb/" . $file);
          imagedestroy($size);


...slaat als een tang op een varken.

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • Ad Hox
  • Registratie: Maart 2003
  • Laatst online: 19:58
Ja je hebt gelijk, dat laatste stukje slaat inderdaad nergens op. Ik heb het toegepast zoals je het aangeeft en nu krijg ik de melding niet meer dat het geheugen vol zit. Dankje, nu snap ik ook hoe ik het in het vervolg kan toepassen (na de handlers dus)!

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

PHP:
1
$naamnieuw = GenRandomPassword("8");
Je gaat een integer ( 8 ) als tekst behandelen? Overigens vind ik het een vreemde functie benaming voor hetgeen je het gebruikt, het genereren van een random bestandsnaam. Ook de functienamen zou ik persoonlijk altijd toch wel enigsinds de bedoeling ervan laten uitleggen... ;)

[ Voor 57% gewijzigd door CH4OS op 17-05-2008 19:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

GJ-tje schreef op zaterdag 17 mei 2008 @ 19:03:
PHP:
1
$naamnieuw = GenRandomPassword("8");
Je gaat een integer ( 8 ) als tekst behandelen?
Dat komt wel goed door type juggling. Dat het nogal lomp is om het zo te doen, is inderdaad wel waar.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op zaterdag 17 mei 2008 @ 19:04:
[...]

Dat komt wel goed door type juggling. Dat het nogal lomp is om het zo te doen, is inderdaad wel waar.
Is dat hetzelfde als typecasting trouwens? Of is dat weer compleet anders? Want ik had dat dus in gedachten... :p

Acties:
  • 0 Henk 'm!

Verwijderd

GJ-tje schreef op zaterdag 17 mei 2008 @ 19:09:

Is dat hetzelfde als typecasting trouwens? Of is dat weer compleet anders? Want ik had dat dus in gedachten... :p
Type juggling is automatische type casting op basis van de context.

Acties:
  • 0 Henk 'm!

Verwijderd

Pagina: 1