I denne artikel vil jeg forklare hvordan man meget let, kan gemme filer i
sin mysql database.
Det skal siges at det til normalt brug ikke kan
anbefales at gemme filer i mysql, da php's egen fil-håndtering er meget bedre
til sådanne opgaver. I nogle tilfælde vil metoden dog have sin berettigelse.
Forklaring: Man laver en
form med en input af typen "file", og selvfølgelig en submit-knap. Når formen
submittes, skal scriptet meget simpelt åbne filen, læse fil-koden ind i en
variable, og tilsidst skrive det i et felt af typen 'blob', 'mediumblob' eller
'longblob' i databasen.
Kode:
<?php
//
files in mysql by Jonas Delfs
// jonas at delfs dot dk
//
http://delfs.dk
// CREATE TABLE files (
// id int(11) DEFAULT '0'
NOT NULL auto_increment,
// file_code blob NOT NULL,
// file_size int(50)
DEFAULT '0' NOT NULL,
// file_type varchar(50) NOT NULL,
// PRIMARY KEY
(id)
// );
if ($form_data && $form_data != "none") {
$file_code = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
$connect = mysql_connect("MYSQLSERVER","USERNAME","PASSWORD");
mysql_select_db("YOURDB",$connect);
if (mysql_query("insert into files (file_code, file_size, file_type) values ('$file_code',
'$form_data_size', '$form_data_type')")) {
echo "Your file is saved i the mysql-table 'files'";
} else {
echo "A problem occured, and the file hasn't been saved";
}
}
echo '<form action="Filer_i_mysql.php" method="post"
enctype="multipart/form-data">';
echo 'Select file: <input
type="file" name="form_data">';
echo '<input type="hidden"
name="MAX_FILE_SIZE" value="1000000"><br>'; //Defines max_file_size of
files
echo '<input type="submit">';
echo '</form>';
?>
Det første du skal gøre, er at
oprette den tabel der er lagt kode til ovenover. Så skal du tilpasse
MYSQLSERVER, USERNAME samt PASSWORD OG YOURDB, og til sidst smide hele koden i
en fil. Så skulle det spille! :)
Træk dataerne ud igen
Jeg
går ud fra at du gerne vil trække dataerne ud igen, så til det skal vi bruge en
seperat fil, som vi kalder file.php
Forklaring:
Først
connecter vi til databasen. Så sender vi et simpelt query afsted, der henter
fil-dataerne, og til sidst sætter vi de korrekte headers for den pågældende
fil-type, og skriver fil-koden ud.
Kode:
<?php
//
files in mysql by Jonas Delfs
// jonas at delfs dot dk
//
http://delfs.dk
$connect = mysql_connect("MYSQLSERVER","USERNAME","PASSWORD");
mysql_select_db("YOURDB", $connect);
$q = mysql_query("SELECT file_code,file_type FROM files WHERE id='$id'") or die(mysql_error());
if (mysql_num_rows($q)) {
extract(mysql_fetch_array($q));
header("Content-type: $file_type");
echo $file_code;
} else {
echo "404 - file not found!";
}
?>
Du kalder så en fil fra databasen med fx.
file.php?id=1
Eller hvis det er et billede: <img
src="file.php?id=1">
Håber du fandt artiklen nyttig! Jeg hører gerne
fra dig hvis du mener der er fejl i artiklen!