Avatar billede coolcom Nybegynder
11. juli 2008 - 23:21 Der er 13 kommentarer og
1 løsning

Problemer med galleri kode

Hej

Jeg har et problem med følgende kode:

// List of our known photo types
        $known_photo_types = array(
                            'image/pjpeg' => 'jpg',
                            'image/jpeg' => 'jpg',
                            'image/gif' => 'gif',
                            'image/bmp' => 'bmp',
                            'image/x-png' => 'png'
                        );
       
        // GD Function List
        $gd_function_suffix = array(
                            'image/pjpeg' => 'JPEG',
                            'image/jpeg' => 'JPEG',
                            'image/gif' => 'GIF',
                            'image/bmp' => 'WBMP',
                            'image/x-png' => 'PNG'
                        );
   
        // Fetch the photo array sent by preupload.php
        $photos_uploaded = $_FILES['photo_filename'];
   
        // Fetch the photo caption array
        $photo_caption        = $_POST['photo_caption'];
        $photo_category    = $_POST['category'];
        $number_of_fields    = $_POST['number_of_fields'];
       
        $path = realpath($_SERVER['DOCUMENT_ROOT']) . $settings['galleryImageDir'];
       
       
        if (empty($photo_category)){
            $form_error = $error->form_error($error = 'Du har ikke valgt en kategori');
            $this->upload();
            return;
        }
        $photo_category='"'.addslashes($_POST['category']).'"';       

        foreach($photos_uploaded['error'] as $key=>$error){
            if($error!=UPLOAD_ERR_OK){
                switch($error){
                    case UPLOAD_ERR_INI_SIZE:$reason="File Size exceeds server defined size";break;
                    case UPLOAD_ERR_FORM_SIZE:$reason="File Size exceeds size defined in form";break;
                    case UPLOAD_ERR_PARTIAL:$reason="Only a part of the file was uploaded";break;
                    case UPLOAD_ERR_NO_FILE:$reason="No file was uploaded";break;
                    case UPLOAD_ERR_NO_TMP_DIR:$reason="No temporary directory for file uploads";break;
                    case UPLOAD_ERR_CANT_WRITE:$reason="File was not written to disk";break;
                    case UPLOAD_ERR_EXTENSION:$reason="File had a wrong extension";break;
                }
                $this->output = $error->error('Lykkedes ikke at uploade:'.$photos_uploaded['name'][$key].'<br>Reason:'.$reason);               
                continue;
                        }

            if($photos_uploaded['size'][$key] <= 0){
                continue;
            }
            if(!array_key_exists($photos_uploaded['type'][$key], $known_photo_types)){
                $this->output = $error->error('Ugyldig filtype i blandt de uploadede billeder');
                continue;
            } 
            $connector->query('INSERT INTO cms_gallery_photos SET photo_filename="0", photo_caption="'.addslashes($photo_caption[$key]).'",
                              photo_category="'.addslashes($_POST['category']).'"');
                       
            $new_id = mysql_insert_id();
            $filetype = $photos_uploaded['type'][$key];
            $extention = $known_photo_types[$filetype];
            $filename = $new_id.".".$extention;

            $connector->query('UPDATE cms_gallery_photos SET photo_filename="'.addslashes($filename).'" WHERE photo_id="'.addslashes($new_id).'"');

            // Store the orignal file
            if(!move_uploaded_file($photos_uploaded['tmp_name'][$key], $path . $filename)){
                $this->output = $error->error('Failed to permanently save the file.');
                continue;
                        }

            // Let's get the Thumbnail size
            $size = GetImageSize( $path . $filename );
            if($size[0] > $size[1]){
                $thumbnail_width = 150;
                $thumbnail_height = (int)(150 * $size[1] / $size[0]);
            }
            else
            {
                $thumbnail_width = (int)(150 * $size[0] / $size[1]);
                $thumbnail_height = 150;
            }
               
            // Build Thumbnail with GD 1.x.x, you can use the other described methods too
            $function_suffix = $gd_function_suffix[$filetype];
            $function_to_read = "ImageCreateFrom".$function_suffix;
            $function_to_write = "Image".$function_suffix;

            // Read the source file
            $source_handle = $function_to_read ( $path . $filename );
                       
            if(!$source_handle)
            {
              $this->output = $error->error('Kunne ikke lave source billed');             
              continue;
            }
                       
            // Let's create an blank image for the thumbnail
            $destination_handle = imagecreatetruecolor( $thumbnail_width, $thumbnail_height );
                       
            // Now we resize it
            imagecopyresampled( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );

            // Let's save the thumbnail
            $function_to_write( $destination_handle, $path."thumbs/tb_".$filename );
            ImageDestroy($destination_handle );
            //
                       
            //Let's make the small images
            $size = GetImageSize( $path . $filename );
            if($size[0] > $size[1])
            {
                $small_width = 486;
                $small_height = (int)(486 * $size[1] / $size[0]);
            }
            else
            {
                $small_width = (int)(486 * $size[0] / $size[1]);
                $small_height = 486;
            }

            // Let's create an blank image for the small
            $destination_handle = imagecreatetruecolor( $small_width, $small_height );
                       
            // Now we resize it
            imagecopyresampled( $destination_handle, $source_handle, 0, 0, 0, 0, $small_width, $small_height, $size[0], $size[1] );

            // Let's save the small
            $function_to_write( $destination_handle, $path."small/s_".$filename );
            ImageDestroy($destination_handle );
                                                                                               
            $result_final .= "<img src='".$path."tb_".$filename."' /> File ".($key+1)." Added<br />";
            $this->output = $this->html->add_complete($result_final, $key);
            imagedestroy($source_handle);


Når jeg vil uploade billeder der er over 1600 * 1200, melder den Fatal error: Allowed memory size of.. osv. I kender den sikkert :)

Jeg har prøvet med: ini_set('memory_limit','32M'); i toppen af scriptet, men det virkede helelr ikke.

Hvad kan jeg gøre?
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 23:41 #1
Din egen server? Webhotel - og hvilket?
Avatar billede jakobdo Ekspert
12. juli 2008 - 08:09 #2
Hvis du har webhotel, er det med stor sandsynlighed ikke muligt at rette memory_limit.
Avatar billede coolcom Nybegynder
12. juli 2008 - 13:21 #3
Det er et webhotel hos one.com
Avatar billede erikjacobsen Ekspert
12. juli 2008 - 18:09 #4
De er kendt for en ret lav grænse, som selvfølgelig ikke kan ændres.
Avatar billede coolcom Nybegynder
12. juli 2008 - 21:37 #5
Når jeg får fejlen står der Allowed memory size of 16 xxx xxx, så den må jo stå til 16M.

Men kan man ændre i koden så den, ikke bruger så meget hukommelse?
Avatar billede jakobdo Ekspert
13. juli 2008 - 17:32 #6
Nej, du må bare fortælle dine brugere, de ikke skal uploade for store billeder.
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 19:35 #7
Jah, eller lade være med at lave billederne små - det er hvad der koster plads her. Lav billederne i den rigtige størrelse inden upload, for det kan man også bedre gøre selv.
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 19:35 #8
(eller finde et andet webhotel...)
Avatar billede coolcom Nybegynder
14. juli 2008 - 16:15 #9
@Jakobdo:

Det er også løsningen indtil videre

@erikjacobsen:

Problemet ligger i at mine bruger er ikke de skrappeste til computere og slet ikke når det kommer til billed redigering.

Men jeg kom til at tænke på noget:

Kan man ikke lave det sådan, at når brugeren klikker på et thumbnail, laver scriptet, en reseize af det store billed, som så bliver vist?
Eller vil dette komme til at tage for lang tid at loade?
Avatar billede jakobdo Ekspert
14. juli 2008 - 17:35 #10
Det kan man godt lave, men vil give samme problem.
Avatar billede coolcom Nybegynder
14. juli 2008 - 21:59 #11
hmm.. træls.. Nå men tak for hjælpen alligevel.
Jeg må bare sætte en begrænsninger på billedernes størrelse

Smid et svar begge to for point :D
Avatar billede jakobdo Ekspert
14. juli 2008 - 21:59 #12
Svar!
Avatar billede erikjacobsen Ekspert
14. juli 2008 - 22:13 #13
Ingen point til mig, tak.
Avatar billede jakobdo Ekspert
15. juli 2008 - 16:51 #14
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