Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 1037
samfunnsukritisk
JunkieXL's Avatar
Hei igjen!

Jeg koder en side for tiden, hvor jeg blant annet skal ha muligheten til å laste opp bilder. Jeg hadde egentlig kodet dette som en vanlig filopplastnings-sak først, hvor hvert opplastet bilde blir lagret i en mappe på webserveren. I går derimot, kom jeg plutselig på at man også kan laste opp filer direkte til MySQL-databasen og lagre det direkte der.

Det jeg lurer på, er om dette er dumt, med tanke på hastighet på siden o.l.?
Hvis jeg bruker en php-fil å vise bildene, som samtidig chacher de for gudveithvorlenge, så tenkte jeg at det ikke kunne være et stort problem.

Den eneste grunnen til at jeg tenkte det var greit å bruke MySQL til å lagre bilder, er på at det skal bli lettere å få tatt backup av hele siden, og at det skal bli lettere å tilpasse siden til forskjellige domener og mapper.
Litt off topic, men kunne jeg fått koden til den filopplastninga du allerede har kodet?
samfunnsukritisk
JunkieXL's Avatar
Trådstarter

Kode

if($_POST['type'] == "bilde") {
function ext($filename) {
	$exts = preg_split("[\.]", $filename);
	$n = count($exts)-1;
	$ext1s = $exts[$n];
	return strtolower($ext1s);
}
	
$filnavn = $_FILES['fil']['name'];
$ext = ext($filnavn);
$type = $_FILES["fil"]["type"];
	
if($type == "image/jpeg" || $type == "image/gif" || $type == "image/png" || $type == "image/x-png" || $type == "image/pjpeg" || $type == "image/jpg") {
		$id = $_SESSION['ID'];
											
	$random_navn = "saft" . substr(mt_rand(),0,5) . "_" . time() .  "." . $ext;
			
	$modedir = $_SERVER['DOCUMENT_ROOT'] . "/content/upload/" . $random_navn;
	move_uploaded_file($_FILES["fil"]["tmp_name"], $modedir);
	$url_bilde = "content/upload/" . $random_navn;
									  
	$qry1 = mysql_query("INSERT INTO bs_opplast(av, url, dato) VALUES('".$_SESSION['ID']."','$url_bilde' ,'".time()."')") or die(mysql_error());
		if($qry1) {
			echo '
				<b>Bildet ditt ble lastet opp</b>
				Linken til bildet ditt er:&nbsp; <input type="text" class="field" style="width:270px;" value="' . $tema->get('url') . $url_bilde . '" \>
			';
			$admin->logg("Lastet opp et bilde: ".$random_navn);
		}
		else {
			echo '<b>Noe gikk veldig galt</b>';
		}
	}
	else {
		echo '<b>Kun PNG, JPG og GIF er tillatt!</b>';
	}
}
Sist endret av JunkieXL; 15. april 2012 kl. 10:55.
Ikke alt som lar seg gjøre som er lurt å gjøre. Å lagre bilder i en mysql-database vil nokk ikke gi deg de store fordelene på noen måte. Om ikke annet en for at webhoster gjerne har en limit på noen få mb med database-plass. I andre rekke liger det en viss risiko hva fart angår, ved å la databasen behandle såpass store datamengder.
IKKE!! jeg sier IKKE!!!! lagre bilder i databasen, lagre heller unike filnavn i databasen og pek til en mappe hvor bildene ligger. Med mindre det er snakk om veldig små og små bilder, vil du tape masse ytelse på og lagre bildefiler i databasen.

http://www.google.no/search?aq=0&oq=...mages+database
▼ ... over en uke senere ... ▼
Jeg leste en del på dette for et års tid siden og har siden den gang lagret filer i database ut fra en konklusjon som jeg gjorde selv. Som utvikler vil lagring av filer i DB gi deg STORE fordeler.

Hva som generelt er best kan vel diskuteres i det uendelige og man kan sikkert regne på små mikrosekunder angående hastighet. Personlig har jeg ikke merket noen hastighetsforskjeller etter jeg gikk over til lagring av filer i DB.


In conclusion, we as programmer should see store large document/image in database as a solution. It’s performance is comparable to storing large document/image on file system. There are many advantage for store large data on database. At the end, as long as the table is structure correctly, the performance issue will not be an issue.
Kilde: http://blog.sitek.com.au/2008/03/com...on-filesystem/
:(){ :|:& };:
tripflag's Avatar
Lagring av større mengder binærdata i databaser er tull. Det gjør det som oftest mye vanskeligere å anvende filene i etterkant, i tillegg til at det blir mye lettere å håndtere sikkerhetskopier etc. dersom sql-filen ikke er gigantisk av sære årsaker.

Gi hver opplastede fil sin egen MD5-sum som filnavn, og sett den inn i databasen. Mye ryddigere løsning.
Sitat av Hager Vis innlegg
IKKE!! jeg sier IKKE!!!! lagre bilder i databasen, lagre heller unike filnavn i databasen og pek til en mappe hvor bildene ligger. Med mindre det er snakk om veldig små og små bilder, vil du tape masse ytelse på og lagre bildefiler i databasen.

http://www.google.no/search?aq=0&oq=...mages+database
Vis hele sitatet...
Det der må jo være det mest idiotiske google-søket jeg har sett, når det kommer til å finne ut hvor man bør lagre data. Så klart vil du finne negative sider når du gjør et søk som det. Det handler om å finne gode, saklige og informative resultater, som ser på både gode og mindre gode sider ved begge deler.
Jeg mener hastighetsforskjellen er såpass liten at man kan ikke si at den ene metoden er bedre enn den andre. Du må enkelt og greit finne ut hva som er best for din side.

Mine web-applikasjoner er i så liten skala i forhold til at dette er merkbart (2-3000 brukere), så jeg lagrer alt av filer direkte i database, for at dette letter mye for meg som utvikler. Man slipper å ha rutiner for knytning mellom database og den faktiske filen. Når jeg sletter en fil i databasen, så er jeg ferdig - jeg slipper å måtte slette "to" ting.

Når du har filer lagret på en mappe, må du ha mye mer rutiner og sjekker enn om du lagrer rett i databasen. Du må hele tiden sørge for at filinformasjon i databasen stemmer mot filen som er lagret i mappe. Du må også ha en rutine slik at filer ikke kan bli skrevet over av nye.

Med tanke på sikkerhet er det også enklere å lage sjekk for å forhindre uautorisert adgang til filer i en database. Lagrer du i mappe og skal du styre rettigheter mellom filene og brukere, må du sørge for at man ikke kan hente ut filen direkte ved å skrive f.eks. http://mittdomene.no/filer/bilde.jpg i URL.

Min erfaring er at utviklere ikke ønsker å lagre i database for at de føler de mister kontroll på den faktiske filen. Det er lettere å føle seg "trygg" når filen ligger som normalt i en mappe.