Avatar billede or.han Nybegynder
27. maj 2008 - 19:15 Der er 13 kommentarer og
1 løsning

For store billeder - for lidt hukommelse

Jeg har et lidt irriterende problem. Jeg har nogle relativt store billeder gemt i en MySQL database. Billederne er samlet i gallerier, og det vil sige, at hvis jeg vil hente alle billeder i et galleri og vise dem sammen, stopper PHP-scriptet fordi der ikke er nok hukommelse.

Jeg kan ikke forøge hukommelsen, fordi det ikke er tilladt på serveren. Hvad kan jeg så gøre? Er der egentlig noget forkert med min teknik, fordi jeg kan ikke finde artikler om lignende problemer??
Avatar billede yHec Novice
27. maj 2008 - 19:25 #1
Hvad med at gemme billederne på serveren, og en henvisning til dem i databasen?

Så skal der ikke bruges serverkraft til at behandle outputtet fra DB, istedet hentes billederne bare fra serveren.

/y
Avatar billede or.han Nybegynder
27. maj 2008 - 19:37 #2
Men er det muligt at beskytte indholdet af en mappe med billeder? Brugere som er logget ind skal kunne se, men andre skal ikke...
Avatar billede dkfire Nybegynder
27. maj 2008 - 21:13 #3
Kunne det tænkes at du ikke frigiver hukommelsen for hver gang du henter et billede.
Men det er kun et gæt efter som du ikke viser noget kode.
Avatar billede or.han Nybegynder
27. maj 2008 - 21:28 #4
Jeg frigiver nok ikke hukommelsen. Hvordan gøres det?
Avatar billede olebole Juniormester
27. maj 2008 - 21:40 #5
<ole>

Dine billeder ligger ikke en snus mere sikkert i en DB end i en mappe ... men til gengæld har du den 'fordel', at du slæber rundt på en helt unødigt stor DB  ;o)

/mvh
</bole>
Avatar billede dkfire Nybegynder
27. maj 2008 - 21:40 #6
Det tør jeg ikke lige spå, da jeg ikke kan se hvordan du gør.
Men et bud vil være imagedestroy().
Se evt http://www.php.net/imagedestroy
Avatar billede or.han Nybegynder
27. maj 2008 - 22:41 #7
Billederne er på url'en: /gallery_images/read/{$id}

Controllerens read-metode:
    public function read($id)
    {
        $gallery_image = $this->GalleryImage->findById($id);
        header('Content-type: '.$gallery_image['GalleryImage']['type']);
        header('Content-length: '.$gallery_image['GalleryImage']['size']);
        header('Content-Disposition: filename='.$gallery_image['GalleryImage']['image_name']);
        echo $gallery_image['GalleryImage']['content'];

        exit;
    }
Avatar billede or.han Nybegynder
27. maj 2008 - 22:43 #8
olebole>> Hvorfor er det ikke mere sikkert? Gør det generelt forespørgslerne langsommere i alle tabeller, når man har en tabel som fylder meget?
Avatar billede olebole Juniormester
27. maj 2008 - 22:47 #9
"Hvorfor er det ikke mere sikkert?" >> Fordi, det ikke er mere sikkert. Du kan sikre dine billeder ligeså godt i en mappe - alt efter kontekst  =)
Avatar billede or.han Nybegynder
28. maj 2008 - 22:50 #10
I mit tilfælde ville et imagedestroy() vel ikke gøre noget??
Avatar billede olebole Juniormester
28. maj 2008 - 23:03 #11
Du kan bare lægge dine billeder i en mappe udenfor webspace (dvs. over roden for sitet).

Brugeren kan så kalde en php-fil, hvor du først sætter passende headers - og derefter outputter billedfilen med php's readfile funktion. Så ligger dine billeder mindst ligeså godt beskyttet som i en DB  =)
Avatar billede olebole Juniormester
28. maj 2008 - 23:04 #12
- og php-filen ligger naturligvis indenfor alm. webspace  ;o)
Avatar billede or.han Nybegynder
29. maj 2008 - 12:57 #13
Hvad mener du med "over roden for sitet"??
Avatar billede or.han Nybegynder
03. juni 2008 - 22:29 #14
Lukker.
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