Avatar billede blaatand Nybegynder
08. april 2004 - 18:13 Der er 20 kommentarer og
1 løsning

Allowed memory size of 8388608 ?

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 6528 bytes) in /usr/home/web/web22474/image_resize.php on line 18

Jeg får den her når jeg uploader en fil via. et script til min side. (jeg har web10.com webhotel)

Hvis filerne ikke fylder særlig meget, kan man godt uploade, men den gider ikke tage alle filer der f.eks fylder 80kbs :(

selve image-resize.php som den brokker sig over ser sådan her ud:

<?php

function image_resize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{
    $types=Array();
    $types[1]='gif';
    $types[2]='jpeg';
    $types[3]='png';
    $types[6]='wbmp';
    list($width,$height,$type)=getimagesize($sourcefile);
    $type_name=$types[$type];
    $imagecreatefromtype='imagecreatefrom'.$type_name;
    $imagetype='image'.$type_name;
    if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
    {
        return false;
    }
    if($img_src=$imagecreatefromtype($sourcefile))
    {
        $ratio_height=$maxheight/$height;
        $ratio_width=$maxwidth/$width;
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=$width*$ratio;
        $newheight=$height*$ratio;
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
//        $img_dst=imagecreate($newwidth,$newheight);

        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//        imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);        
        if($destinationfile==false)
        {
            //header("Content-type: image/jpeg");
            $imagetype($img_dst);
        }
        else
            $imagetype($img_dst,$destinationfile);
        imagedestroy($img_dst);
        return true;
    }
    else
    {
        return false;
    }
}
?>

linie 18 er:
    if($img_src=$imagecreatefromtype($sourcefile))

Ved ikke om der er brug for upload formsne også, ellers hvis der er så skriv =)
Avatar billede the-gnu.dk Nybegynder
09. april 2004 - 04:48 #1
Det er måske din GD lib der fejler. GD kan ikke tage billeder der er større end 1200x1200 pixels.
Avatar billede blaatand Nybegynder
09. april 2004 - 06:11 #2
Det lyder sandsynligt... :D

Jeg vil køre nogle tests i aften, og vende tilbage med svar om det er det...

(vil vil jeg i hvert fald gå i seng, zZzZzz)
Avatar billede dennismp Nybegynder
09. april 2004 - 12:44 #3
Det er PHP der "fejler", da du sandsynligvis har sagt i din php.ini at den max må bruge 8 megabyte (default setting):
I din php.ini har du en linje:
memory_limit = 8M

Prøv at sætte denne op til 12M eller mere.
Avatar billede blaatand Nybegynder
09. april 2004 - 18:06 #4
gnu du havde ret. Jeg testede det igennem med det samme billede i op til 800KB størelse, og der var intet problem når jeg resizer det til 1200x900.

Så problemet er ikke større end at jeg må oplyse brugerne om at det ikke kan være større end disse dimintioner =)
Avatar billede blaatand Nybegynder
09. april 2004 - 18:13 #5
Forresten: the-gnu.dk, kan man lave et tjek for dette i sit script? Lidt irrierterende hvis folk smider noget op men den ikke gemmer det, for den smider nemlig info i databasen aligevel...
Avatar billede sukos Juniormester
09. april 2004 - 18:39 #6
if(true == $img_src=$imagecreatefromtype($sourcefile)) {
query.............
Avatar billede dennismp Nybegynder
09. april 2004 - 18:59 #7
gnu: jeg har aldrig hørt at gd har en brgrænsning (udover hukommelsen) på antal pixels den arbejder med. Har du en reference?

blaatand: prøv evt at lave et billede i to farver, 2000x2000 px og se om det virker (jeg har ikke selv gd installeret) ?
Avatar billede blaatand Nybegynder
09. april 2004 - 19:21 #8
2 farver i 2000x2000 giver samme fejl. billede fyldte ikke over 50 kb (47kb tror jeg)
Avatar billede dennismp Nybegynder
09. april 2004 - 19:25 #9
Tak. Du fik dit problem løst :) Jeg undre mig bare over at de skulle have lagt sådan en begrænsning ind (og tvivler på det).
Avatar billede blaatand Nybegynder
09. april 2004 - 19:27 #10
Det er lidt irrierterende, men jeg overlever =)
Avatar billede the-gnu.dk Nybegynder
10. april 2004 - 14:03 #11
Ja, det er noget værre lort. Jeg har ingen reference, men det var noget jeg fandt på google efter at have siddet 4 timer og bøvlet med GD.

Et alternativ kunne være at bruge imagemagick.

Du kan evt. checke først:

$size = getimagesize($img);
if($size[0] > 1200 || $size[1] > 1200)
  error
else
  bla bla
Avatar billede blaatand Nybegynder
10. april 2004 - 17:47 #12
Mener du således her:

<?php
$size = getimagesize($img);
if($size[0] > 1200 || $size[1] > 1200){
echo "Fejl: Filen er ikke mindre end 1200x1200";
}
{
function image_resize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{
    $types=Array();
    $types[1]='gif';
    $types[2]='jpeg';
    $types[3]='png';
    $types[6]='wbmp';
    list($width,$height,$type)=getimagesize($sourcefile);
    $type_name=$types[$type];
    $imagecreatefromtype='imagecreatefrom'.$type_name;
    $imagetype='image'.$type_name;
    if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
    {
        return false;
    }
    if($img_src=$imagecreatefromtype($sourcefile))
    {
        $ratio_height=$maxheight/$height;
        $ratio_width=$maxwidth/$width;
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=$width*$ratio;
        $newheight=$height*$ratio;
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
//        $img_dst=imagecreate($newwidth,$newheight);

        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//        imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);        
        if($destinationfile==false)
        {
            //header("Content-type: image/jpeg");
            $imagetype($img_dst);
        }
        else
            $imagetype($img_dst,$destinationfile);
        imagedestroy($img_dst);
        return true;
    }
    else
    {
        return false;
    }
}
};
?>
Avatar billede blaatand Nybegynder
10. april 2004 - 17:47 #13
hov mangler lige en else
Avatar billede blaatand Nybegynder
10. april 2004 - 18:22 #14
Det kører ikke rigtig i hvert fald :(
Avatar billede dennismp Nybegynder
10. april 2004 - 18:30 #15
Er det dette du prøver?
<?php
$size = getimagesize($img);
if($size[0] > 1200 || $size[1] > 1200){
    echo "Fejl: Filen er ikke mindre end 1200x1200";
}
else {
  image_resize(..);
}

function image_resize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{
    $types=Array();
...
?>
Avatar billede blaatand Nybegynder
10. april 2004 - 18:33 #16
err, ser sådan ud ja =)

hvad er den image_resize(..); der?
Avatar billede dennismp Nybegynder
10. april 2004 - 20:13 #17
Det er den funktion du selv har lavet. Ideen er, test om billedet er mindre end 1200x1200, hvis den ikke er - lav fejl, ellers brug funktionen (som så helst burde virke med billeder undre 1200x1200)
Avatar billede blaatand Nybegynder
10. april 2004 - 23:14 #18
image-resize filen:

<?php
$size = getimagesize($img);
if($size[0] > 1200 || $size[1] > 1200){
    echo "Fejl: Filen er ikke mindre end 1200x1200";
}
else {

function image_resize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{

    $types=Array();
    $types[1]='gif';
    $types[2]='jpeg';
    $types[3]='png';
    $types[6]='wbmp';
    list($width,$height,$type)=getimagesize($sourcefile);
    $type_name=$types[$type];
    $imagecreatefromtype='imagecreatefrom'.$type_name;
    $imagetype='image'.$type_name;
    if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
    {
        return false;
    }
    if($img_src=$imagecreatefromtype($sourcefile))
    {
        $ratio_height=$maxheight/$height;
        $ratio_width=$maxwidth/$width;
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=$width*$ratio;
        $newheight=$height*$ratio;
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
//        $img_dst=imagecreate($newwidth,$newheight);

        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//        imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);        
        if($destinationfile==false)
        {
            //header("Content-type: image/jpeg");
            $imagetype($img_dst);
        }
        else
            $imagetype($img_dst,$destinationfile);
        imagedestroy($img_dst);
        return true;
    }
    else
    {
        return false;
    }
}
};
?>

Filen med forms n'shit:

                <?php
                $max_fil_storelse     = "100000"; // i bytes
                $billede_max_bredde    = "1200"; // I pixels
                $billede_max_hojde    = "1200"; // Også i pixels
                $fil_path        = $_SERVER['DOCUMENT_ROOT'] . "/screenshots";
               
                require($_SERVER['DOCUMENT_ROOT'] . "/image_resize.php");
                require($_SERVER['DOCUMENT_ROOT'] . "/conn.php");
               
               
                function form() {
               
                global $max_fil_storelse;
               
                $action = $_SERVER['PHP_SELF'];
                ?>
                <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" class="site-tekst">
                  <tr>
                    <td height="75" valign="middle"><form method="post" action="<? echo $action ?>" enctype="multipart/form-data">
                          <p>Din kommentar til billedet (udfyld venligst).<br>
                            <textarea name="comment" cols="59" rows="10" class="site-forms-standard" ></textarea>
                            <br>
                            Fil :
                            <input name="filen" type="file" class="site-forms-standard" size="37">
                            *Max dimentioner p&aring; 1200x900!</p>
                          <p>Billede kategori:
                            <select name="kategori" class="site-forms-standard" id="kategori">
                              <option value="1">Generelle screenshots</option>
                              <option value="2">Scores</option>
                              <option value="3">War screenshots</option>
                              <option value="4">Cheaters cought in action</option>
                              <option value="5">Diverse screenshots</option>
                              <option value="6">Screenshots fra andre spil</option>
                            </select>
                          </p>
                        <p> bruger:
                          <input name="forfatter" type="text" class="form-standard-gray" id="forfatter"  onclick="java script:alert('Du kan ikke ændre brugernavnet!');this.blur();" value="<?php print_r($_SESSION['username']);?>">
                          <br>
                          <br>
                          <input name="submit_fil" type="submit" class="form-button-standard" value="Upload">
                          <input name="B2" type="reset" class="form-button-standard" value="Slet alt">
                        </p>
                      </form></td>
                  </tr>
                  <tr>
                    <td>Kun brugere her på siden har rettighed til at se billederne!</td>
                  </tr>
                  <tr>
                    <td>&nbsp;</td>
                  </tr>
                  <tr>
                      <td><a href="screenshots.php?show=index" target="_top" class="10-bold-blue"><<
                        Tilbage til screenshot index</a> |</td>
                  </tr>
                </table>
                <?php
                }
                function upload() {
                ?>
                <?php
                global $fil_path, $vare_id;
               
                    $user_id        = $_SESSION["user_id"];
               
                    $fil_path_temp = $fil_path . "/temp/" . $_FILES['filen']['name'];
               
                    if(!eregi(".jpg$|.jpeg$", $fil_path_temp)) { $error = "Det er ikke en jpg fil !"; }
               
                    if ($error) {
                        echo $error;
                        form();
                    } else { # nice, vi kan fortsætte
               
               
                        if (!@copy($_FILES['filen']['tmp_name'],$fil_path_temp)) {
                            echo $_FILES['filen']['tmp_name'];
                            echo "<br>";
                            echo $fil_path;
                            echo "\n<b>Tag dig sammen hehe!</b>";
                            form();
                        } else {
               
                            //image_resize($fil_path_temp, 300, 1000, $fil_path_temp);
                            $comment = $_POST["comment"];
                            $kategori = $_POST["kategori"];
                            $bruger_id = $_SESSION["user_id"];
               
                            mysql_query("INSERT INTO screenshots (bruger_id, kommentar, kategori, dato) values ('$bruger_id', '$comment', '$kategori', NOW())");
                           
                            $id = mysql_insert_id();
                            $endeligt_navn = $fil_path . "/" . $id . ".jpg";
                            $endeligt_thumb_navn = $fil_path . "/tn" . $id . ".jpg";
                            rename($fil_path_temp, $endeligt_navn);
                           
                            image_resize($endeligt_navn, 164, 123, $endeligt_thumb_navn);
               
                            $fraurl    = $_SERVER['HTTP_REFERER'];
               
                            echo "<span class=\"site-tekst\">Screenshot tilføjet til databasen!</a><br><br>";
                            echo "<a href=\"screenshots.php?show=index\" class=\"10-bold-blue\" target=\"_top\"><< Tilbage til screenshots index!</a>";
               
                           
                        }
                    }
                ?>
                <?php
                }
               
               
                ### Start koden ####
               
                if (isset($_REQUEST['submit_fil'])) {
                    upload();
                }else{
                    form();
                }
                ?>
Avatar billede the-gnu.dk Nybegynder
11. april 2004 - 17:43 #19
<?php
$size = getimagesize($img);
if($size[0] > 1200 || $size[1] > 1200){
echo "Fejl: Filen er ikke mindre end 1200x1200";
}
else {
function image_resize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{
    $types=Array();
    $types[1]='gif';
    $types[2]='jpeg';
    $types[3]='png';
    $types[6]='wbmp';
    list($width,$height,$type)=getimagesize($sourcefile);
    $type_name=$types[$type];
    $imagecreatefromtype='imagecreatefrom'.$type_name;
    $imagetype='image'.$type_name;
    if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
    {
        return false;
    }
    if($img_src=$imagecreatefromtype($sourcefile))
    {
        $ratio_height=$maxheight/$height;
        $ratio_width=$maxwidth/$width;
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=$width*$ratio;
        $newheight=$height*$ratio;
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
//        $img_dst=imagecreate($newwidth,$newheight);

        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//        imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);       
        if($destinationfile==false)
        {
            //header("Content-type: image/jpeg");
            $imagetype($img_dst);
        }
        else
            $imagetype($img_dst,$destinationfile);
        imagedestroy($img_dst);
        return true;
    }
    else
    {
        return false;
    }
}
}
?>
Avatar billede the-gnu.dk Nybegynder
11. april 2004 - 17:44 #20
<?php
$size = getimagesize($img);
if($size[0] > 1200 || $size[1] > 1200){
echo "Fejl: Filen er ikke mindre end 1200x1200";
}
else {
    $types=Array();
    $types[1]='gif';
    $types[2]='jpeg';
    $types[3]='png';
    $types[6]='wbmp';
    list($width,$height,$type)=getimagesize($sourcefile);
    $type_name=$types[$type];
    $imagecreatefromtype='imagecreatefrom'.$type_name;
    $imagetype='image'.$type_name;
    if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
    {
        return false;
    }
    if($img_src=$imagecreatefromtype($sourcefile))
    {
        $ratio_height=$maxheight/$height;
        $ratio_width=$maxwidth/$width;
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=$width*$ratio;
        $newheight=$height*$ratio;
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
//        $img_dst=imagecreate($newwidth,$newheight);

        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//        imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);       
        if($destinationfile==false)
        {
            //header("Content-type: image/jpeg");
            $imagetype($img_dst);
        }
        else
            $imagetype($img_dst,$destinationfile);
        imagedestroy($img_dst);
        return true;
    }
    else
    {
        return false;
    }
}
?>

Sådan tror jeg.
Avatar billede blaatand Nybegynder
11. april 2004 - 22:25 #21
Fatal error: Call to undefined function: image_resize() in /usr/home/web/web22474/screenshot-upload.php on line 191

:(
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