[PHP]Foto uploaden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 20-09 02:48
Ik heb problemen met het uploaden van een foto en die foto vervolgens in een database te plaatsen.

het script:
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
72
73
74
75
76
<?
        $maxX = "250"; 
        $maxY = "250"; 


        $imgsize = getimagesize($_FILES['pic']['tmp_name']);        
        switch($imgsize[2]) 
            {
            case 1:
               # GIF image
                $timg = imageCreateFromGIF($_FILES['pic']['tmp_name']);
                $type = "gif";
                break;
            case 2:
               # JPEG image
                $timg = imageCreateFromJPEG($_FILES['pic']['tmp_name']); //Regel 40
                $type = "jpg";
                break;
            case 3:
               # PNG image
                $timg = imageCreateFromPNG($_FILES['pic']['tmp_name']);
                $type = "png";
                break;
            }
        
        $imgsize = getimagesize($_FILES['pic']['tmp_name']);        
        $imgX = $imgsize[0];
        $imgY = $imgsize[1];
    
        // Zoomfactor Berekenen
        $_X = $imgX/$maxX * 100;
        $_Y = $imgY/$maxY * 100;

        // Zoomfactor selecteren
        if((100-$_X) < (100-$_Y))
            {
            $_K = $_X;
            }
        else 
            {
            $_K = $_Y;
            }

        // Nieuwe grootte berekenen
        $newX = floor($imgX/$_K * 100);
        $newY = floor($imgY/$_K * 100);
        
        //Nieuw plaatje maken
        $imgh = imageCreateTrueColor($newX, $newY);
        imagecopyresized($imgh, $timg, 0,0,0,0,$newX,$newY,$imgX,$imgY);
        $copyright = imagecreatefromjpeg("images/copyright.jpg");   

        $white = imagecolorallocate($copyright, 255, 255, 255);

        imagecolortransparent($copyright,$white);
        //imagecopy($imgh,$copyright,0,0,0,0,$newX,$newY);
        
        ImageJPEG($imgh, "temp/temp1.jpg");

        $file = "temp/temp1.jpg";
        $fullfile = fread(fopen($file,"r"),filesize($file)); 
        $coded = chunk_split(base64_encode($fullfile)); 
        
        $query = mysql_query("SELECT id FROM user_photo WHERE id_user ='".$_USER['id']."'");
        if (mysql_num_rows($query))
            {
            mysql_query("UPDATE user_photo SET photo='".$coded."',date='".$_SET['dateu']."' WHERE id_user='".$_USER['id']."'");
            }
        else
            {
            mysql_query("INSERT INTO user_photo (id_user,date,photo) VALUES('".$_USER['id']."','".$_SET['dateu']."','".$coded."')");
            }

        echo("De foto is succesvol geplaatst!");

?>



De error
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 11328 bytes) in /home/www/web2/web/sites/setup/photo.php on line 40

Ik heb de standaard memory_size van 8 MB naar 16 Mb verandert. Schijnt dat 16 MB nu ook niet genoeg is. De foto is maar 500 KB

Hoe kan ik dit probleem anders oplossen?

Nico

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

sqrt(16777216 / 3) = 2364

Oftewel een plaatje van 2364 * 2364 pas net in 16Mb. Hoe groot is het plaatje dat je probeert?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

Ik weet het niet precies maar het zou kunnen dat het PHP-script zelf het plaatje groter maakt.
Welke regel is trouwens regel 40 in het script wat hierboven staat?

[ Voor 27% gewijzigd door intermusic op 19-04-2004 13:26 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

curry684 schreef op 19 april 2004 @ 13:21:
sqrt(16777216 / 3) = 2364
Oftewel een plaatje van 2364 * 2364 pas net in 16Mb. Hoe groot is het plaatje dat je probeert?
500 kb.

Verder: je zet het plaatje in je db? Of het pad?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

TeeDee schreef op 19 april 2004 @ 13:24:
[...]

500 kb.

Verder: je zet het plaatje in je db? Of het pad?
Ik denk dat curry684 naar de afmetingen vroeg en niet naar de bestandsgrootte.

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

MatHack schreef op 19 april 2004 @ 13:25:
[...]


Ik denk dat curry684 naar de afmetingen vroeg en niet naar de bestandsgrootte.
Idd, hij pakt het plaatje uit in het geheugen om er true color beeldbewerking op te doen, en dan heb je dus width*height*colordepth/8 bytes nodig aan geheugen.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 20-09 02:48
Regel 40 =

(na Case 2, in het begin)

$timg = imageCreateFromJPEG($_FILES['pic']['tmp_name']);

Het plaatje is 500KB groot.

Kan ik dit probleem ok op een andere manier oplossen in plaats van het geheugen te vergroten ?

Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

Ik vind het plaatje toch een beetje aan de grote kant.
Probeer het eens met een ander 'kleiner' plaatje.
Misschien dat het plaatje niet helemaal goed is, of toch echt te groot is.

Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 20-09 02:48
Het plaatje is groter dan 2364 * 2364


Wanneer ik een kleiner plaatje pak, dan werkt het wel gewoon.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

partypas schreef op 19 april 2004 @ 16:30:
Het plaatje is groter dan 2364 * 2364


Wanneer ik een kleiner plaatje pak, dan werkt het wel gewoon.
Wat ik dus 3 uur geleden al zei :z

Als je een image true color wil 'processen' moet je width*height*3 bytes geheugen beschikbaar hebben. Zet dus gewoon je memory size op 64Mb of bouw een beveiliging op dat width*height niet groter mag zijn dan 5 miljoen oid.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 20-09 02:48
Oke, bedankt.
Ikpas het geheugen aan naar 25 Mb, dat meot volgens mij voorlopig wel genoeg zijn.


Groet,

Nico
Pagina: 1