Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Mener du at du vil lægge billedet i databasen? Det er et helvede at arbejde med, men kan dog lade sig gøre (Ved dog ikke lige hvordan).
Jeg har noget kørende, hvor Sti og filnavn bliver puttet i databasen, sammen med description, title, og hvem der har uploaded billedet. samtidigt laves en thumbnail.
Du skal kigge på PHP's image funktioner, på filesystem funktionerne, og på mysql funktionerne.
budda> Det er bedst og smartest at gøre som chanoa har gjort. Databasen vil hurtigt køre tungt med billederne direkte ind i databasen, de fleste vælger kun at lægge stien...
chanoa> Kunne man låne din kode eller dele af den?
Jeg gør det at jeg uploader billedet som fil og laver et thumbnail samstidigt. Jeg navngiver (omdøber) billeder på denne måde : tabelnavn_id.jpg på den måde bliver billedet knyttet til den aktuelle mysql tabel og brugerens id. Jeg kan herefter tilbageføre billedet (slå op i tabellen efter oplysninger knyttet til billeder) ved at bruge explode() funktionen. Dette er rigtigt smart da man så hverken behøver at komme sti'er i databasen, men kun tekst. eks. en billedetekst osv.
Her der lidt kode ! Jeg har lagt en folder kaldet upload i samme bib som filen upload.php (indeholdende koden som vist nedenfor). I upload folderen er der endnu en folder kaldet thumbs. Kig det igennem og se omd et er noget I kan bruge. Jeg er ikke sikker på at tuborgklammer er ordentligt lukket da jeg lige har klippen det ud fra et større script (I må tælle) ;-)
I kan jo kigge lidt på det:
if($file != "none") { //Directory in which to work $image_dir = "/den/fulde/sti/til/upload/"; $dest = $image_dir.$file_name; //Array containing valid file types $formats = array('jpg', 'gif', 'png'); //Definition of filename $file_name = stripslashes($file_name); //Set max filesize $size = 200000; //Get filetype $file_type = strtolower(substr($file_name,-3)); //Define name of file when renamed $renamed = "navn_på_fil_når_uploadet".$file_type;
//Check if file has zero size if($file_size == 0){ error("Filen er tom!"); } //Check if file is above limit for file if($file_size > $size){ $file_size = round($file_size/1000, 0); $size_in_kb = $size/1000; error("Filen er for stor - $file_size KB! <br> Filen må højst fylde $size_in_kb KB.<br>\n Prøv evt. at gemme filen i et andet format eller gøre billedet mindre."); }
//Check if file is uploaded via HTTP POST if(!is_uploaded_file($file)){ error("Muligt 'crackattack' fra uploadet fil!"); }
//Check if filetype is valid if(!in_array($file_type, $formats)) { error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.gif, *.jpg, *.png"); }
//Failed to copy file on server or greenlight for "go" if(!copy($file, $image_dir.$file_name)) { error("Unable to create $dest - check permissions<br>\n"); }
//Try to rename file. Delete on failure if(@!rename($image_dir.$file_name, "upload/$renamed")){ unlink("$image_dir/$file_name"); error("Kunne ikke omdøbe fil - prøv igen"); }
//CREATE A THUMBNAIL
//set quality parameter $quality = 40; //Get size of big image $src_dim = getimagesize($image_dir.$renamed);
//Set correct dimensions for new image (thumb) if($src_dim[0] < $src_dim[1]){ $dest_width = 80; $dest_height = 100; } else { $dest_width = 100; $dest_height = 80; } //Create thumb dependent of image type if($file_type == "jpg"){
//Create a image in buffer from source image $src_img = imagecreatefromjpeg("$image_dir"."$renamed");
//Create distination image in buffer with correct dimensions $dst_img = imagecreatetruecolor($dest_width,$dest_height);
//Copy the image from source to destination imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_dim[0], $src_dim[1]); imagejpeg($dst_img, $image_dir."/thumbs/$renamed", $quality);
//Destroy the buffers imagedestroy($src_img); imagedestroy($dst_img);
} elseif($file_type == "gif"){ if(!copy($file, "$image_dir/thumbs/$renamed")) { error("Unable to create $dest - check permissions<br>\n"); } } else { error("Forkert filtype. Det er kun muligt at uploade billeder af filtypen *.gif, *.jpg, *.png"); }
Og jeg staver rigtigt flåt - sorry. Læg mærke til at jeg kun laver thumbs af jpg og png. Gif's er IKKE understøttet af GDLib i nyeste versioner af PHP, derfor. Men altså gif's er også rimeligt komprimerede så det burde gå. Ellers kan accepterede filtyper ændres så det kun er muligt at uploade jpg's og png's - your choice...
1. Næ, den indsætter det ikke i db. Hvis du vil det så skal du læse billedfilen igennem med fpassthru()-funktionen, og så knalde hele billedets kode i db. Dernæst skal du når du vil ha' et billede vist, få PHP til at generere en billedfil af det billede-data der ligger i db. Jeg vil dog ikke anbefale denne løsning. Se på www.mysql.com hvorfor -->det sløver din db helt sindsygt!! 2. Altså PHP kører jo server-side, så du skal som minimum give plads til en stor billedfil, der uploades. Dernæst kan du lave et thumb og så kan du slette det oprindelige uploade'ede billede med unlink()-funktionen
Jeg synes iøvrigt det er interessant at du kun har 20 MB plads men ubegrænset mysql plads !! Sig mig gerne hvilken udbyder du hoster hos ? Det lyder som et slag tilbud ;-)
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.