Katika somo hili tutakwenda kuona jinasi ya ku upload mafaili kwenye database pia ku upload taarifa za faili kwenye database. Katika somo hili pia utajifunza namna ya ku retrive taarifa za mafaili kwenye database pia kufuta faili.
YALIYOMO:-
-
Ku upload taarifa za faili
-
Ku upload faili
-
Ku retrive faili na taarifa zake
-
Ku futa faili kwenye database
-
Kufuta faili kwenye folda
-
Ku download faili
-
Njia nzuri ya kuhifadhi mafaili
Katika somo hili tutaendelea kutumia code zetu kutoka katika somo lililotangulia. Japo tutazikata ili kupunguza uwingi wa code ambazo hazitatumika.
-
Ku upload taarifa za faili:
Ku upload faili kwenye database kuna namna kuu mbili. Namna ya kwanza ni kuhifadhi taaifa za faili kwenye database. Yaani ipi hivi failu linakuwa kwenye storage ama server wakati wa ku upload, kisha kwenye database unaweza taarifa za hilo faili. Hii itasaidia kujuwa wapi faili lipo ili kuweza kulitumia unapolitaka.
Njia hii ni kama ambayo imetangulia. Ni kuwa una upload faili kwenye folda unalotaka kwenye server kisha taarifa zake ndio huenda kwenye database. Kwa kutumia taarifa hizo inakuwa rahisi kulifunguwa faili hilo.
Ni matumaini yangu kuwa umeshapitia mafunzo yetu ya php level 2. Ambapo utakuwa unatambuwa jinsi ya ku connect database, pia jinsi ya kuingiza taarifa kwenye database. Hivyo basi na hapa tunatumia namna hiyohiyo.
Kwa kuwa taarifa za faili ketu tunazo kwenye variable hivyo basi tutatumia hizo variable kwenye ku insert kwenye database. Taarifa ambazo tunakwenda kuingiza ni jina la faili, aina ya faili na ukubwa wake. Hivyo variable zake zitaluwa hizi:-
//kujuwa jina la faili
$fileName = $_FILES["myFile"]["name"];
// kujuwa ukiubwa wa faili
$fileSize = $_FILES["myFile"]["size"];
//kujuwa aina ya faili
$fileType = $_FILES["myFile"]["type"];
Sasa kinachofuwata ni kutengeneza table kwenye database. Katika mfano wa hapo chini nimetumia jina la database test na table files Table yetu tutaiita faili ambapo inatakuwa na column 4, ya kwanza ni ya id ambapo type ni int, itabidi iwe AI yaani auto increment, ya pili ni name ambapo type ni string, na length unaweza weka 255, ya tatu ni size ambapo type itakuwa int, na ya mwisho ni type na aina yake ni string.
Sasa kwa kuwa tayari table tunayo kilichobaki ni kuingiza taarifa hizo kwenye table yetu. KUinsert taarifa kwenye databse utatumia insert into files (name, size, type) VALUES (hapa utaweka variable za hizo data.). Code nzima itaonekana hivi
$sql="INSERT INTO medias (name, size, type) VALUES ('$fileName', '$fileSize', '$tyleType')";
Kama utakuwa umeshafahamu jinsi hizo code zinavtyofanya kazi, basi kinachofata ni kuzichanganya na code zilizotangulia:
<html>
<head>
<title>upload</title>
<meta name="viewport" content="width=device-width=100%">
</head>
<body>
<form method="post" action="#" enctype="multipart/form-data">
<label>Select File:</label>
<input type="file" name="myFile">
<input type="submit" name="submit" value="Upload">
</form>
<?php if (isset($_POST["submit"])) {
//folda la kuhifadhia
$folda = "upload/";
//kujuwa jina la faili
$fileName = $_FILES["myFile"]["name"];
// kujuwa ukiubwa wa faili
$fileSize = $_FILES["myFile"]["size"];
//kujuwa aina ya faili
$fileType = $_FILES["myFile"]["type"];
//kujuwa mahala lilipo link yake
$fileLocation = $_FILES["myFile"]["tmp_name"];
//Kujuwa error code
$errorCode = $_FILES["myFile"]["error"];
//Kujuwa file extension
$fileextension = pathinfo($fileName, PATHINFO_EXTENSION);
//fomati zinazotakiwa
$format = ["jpg", "jpeg", "gif", "pdf"];
/* //kuonyesha taarifa kwenye browser
echo "Filename: " . $fileName . "<br>";
echo "Type : " . $fileType . "<br>";
echo "Size : " . $fileSize . "<br>";
echo "Temp name: " . $fileLocation . "<br>";
echo "Error : " . $errorCode . "<br>";
echo "Extension:" . $fileextension . "<br>";
*/
//kuangalia kama faili lipo
if (
file_exists(
$folda .
date("d" . "-" . "m" . "-" . "y" . "-") .
str_replace(" ", "-", $fileName)
)
) {
echo "sorry file exist". "<br>";
}
// dhibiti ukubwa wa faili
if ($_FILES["myFile"]["size"] > 5000000) {
echo "file is too large." . "<br>";
}
//if (!in_array($fileextension, $format)){echo 'file is not allowed';
//}
// mafaili yanayotakiwa
if (
$fileextension != "jpg" &&
$fileextension != "png" &&
$fileextension != "jpeg" &&
$fileextension != "gif" &&
$fileextension != "pdf"
) {
echo "file is not allowed";
} else {
if (
move_uploaded_file(
$fileLocation,
$folda .
date("d" . "-" . "m" . "-" . "y" . "-") .
str_replace(" ", "-", $fileName)
)
) {
echo "successful";
} else {
echo "unsuccessful";
}
}
echo "<br><br>";
//$servername = "localhost";
$servername = "localhost";
$username = "root";
$password ="";
$dbname = "test";
// Kufanya connection
$conn=mysqli_connect($servername, $username,$password,$dbname);
// kuangalia connection
if(!$conn){die("Connection failed: ".mysqli_connect_error());
}
$sql="INSERT INTO files (name, size, type) VALUES ('$fileName', '$fileSize', '$fileType')";
if(mysqli_query($conn, $sql)){echo "faili limepakiwa";
}else{
echo "Kuna tatizo".mysqli_error($conn);
}mysqli_close($conn);
}
echo "<br><br>";
?>
Kama umefanikiwa ku upload basi kwenye databse yako mafaili yataweza kuonekana kama hivi:-
Mpaka kufikia hapo tumeweza ku upload taarifa za faili kwen ye database. Unaweza ku upload taarifa zaidi na zaidi kadiri unavyohitaji. Sasa kwa kutumia taarifa hizo unaweza kulifikia faili ambalo lipo kwenye folda.
-
Ku upload faili moja kwa moja kwenda kwenye database.
Katika level 2 tumejifunza ku upload faili kwenye database ila kwa kutumia mysql interface. Sasa hapa tunakwenda kutumia php.
Katika database mediua faili huhifadhiwa katika aina ya data inayojulikana kama blob. Hivyo tutakwenda kutumia king blob ili kuwa na uhakika juu ya ukubwa wa faili letu kuwa liutakaa.
Hivyo ingia kwenye table yako ongeza column ingine na iite faili. Column hiin dio itakwenda kuhifadhi faili. Tyupe ya data weka long blob na kwenye length wacha kama palivyo. Unaqweza pia kutumia sql command hivi ALTER TABLE `files` ADD `faili` LONGBLOB NOT NULL AFTER `type`;
Ili kuweza ku upload faili kwe nye database tunatumia function ya php inayoitwa file_get_contents() sasa kwa kuwa data kwenye blob zinahifadhiwa katika namna ya string basi tutahitajika kutumia function inayoitwa addslashed() hii itasaidia kuongeza back slash kwenye sehemu zenye alama ya ku nukuu yaani quotation mart au “” hivyo function nzima itaonekana hivi $file2 = addslashes(file_get_contents());
Sasa function hizi mbili zitakuwa na parameter 2 ndani yake ambazo ni filda ambalo faili lipo na jina la faili. Kwa kuwa itahitajika kuwepo na alama ya / ili kukamilisha link hivyo utaweka alama hiyo kati yao. Hakikisha folda unaloweka hapo ndilo ambalo lina hayo mafaili unayotaka ku upload. Hivyo function inatonekana hivi addslashes(file_get_contents($folda."/".$fileName));
Hapa kuna kitu kingine tukifanye, ni kuwa tunahitaji variable ambayo itakusanya function hizi mbili. Ili kwamba iwe rahisi kwa hizi data kuziweka kwenye database. Tuseme variable yetu tutaiita $faili. Hivyo basi itaweeza kuonekana kama hivi
$faili = addslashes(file_get_contents($folda."/".$fileName));
Hivyo basi variable $faili itawakilisha hilo faili ambalo tunakwenda kuli upload. Hivyo tutatumia varuable hii kwenye ku insert faili. Hivyo basi code zitaonekanna kama hivi:-
$sql="INSERT INTO files (name, size, type, faili) VALUES ('$fileName', '$fileSize', '$fileType', '$faili')";
Code zote zitaonekana hivi
<html>
<head>
<title>upload</title>
<meta name="viewport" content="width=device-width=100%">
</head>
<body>
<form method="post" action="#" enctype="multipart/form-data">
<label>Select File:</label>
<input type="file" name="myFile">
<input type="submit" name="submit" value="Upload">
</form>
<?php if (isset($_POST["submit"])) {
//folda la kuhifadhia
$folda = "upload/";
//kujuwa jina la faili
$fileName = $_FILES["myFile"]["name"];
// kujuwa ukiubwa wa faili
$fileSize = $_FILES["myFile"]["size"];
//kujuwa aina ya faili
$fileType = $_FILES["myFile"]["type"];
//kujuwa mahala lilipo link yake
$fileLocation = $_FILES["myFile"]["tmp_name"];
//Kujuwa error code
$errorCode = $_FILES["myFile"]["error"];
//Kujuwa file extension
$fileextension = pathinfo($fileName, PATHINFO_EXTENSION);
//fomati zinazotakiwa
$format = ["jpg", "jpeg", "gif", "pdf"];
/* //kuonyesha taarifa kwenye browser
echo "Filename: " . $fileName . "<br>";
echo "Type : " . $fileType . "<br>";
echo "Size : " . $fileSize . "<br>";
echo "Temp name: " . $fileLocation . "<br>";
echo "Error : " . $errorCode . "<br>";
echo "Extension:" . $fileextension . "<br>";
*/
//kuangalia kama faili lipo
if (
file_exists(
$folda .
date("d" . "-" . "m" . "-" . "y" . "-") .
str_replace(" ", "-", $fileName)
)
) {
echo "sorry file exist". "<br>";
}
// dhibiti ukubwa wa faili
if ($_FILES["myFile"]["size"] > 5000000) {
echo "file is too large." . "<br>";
}
//if (!in_array($fileextension, $format)){echo 'file is not allowed';
//}
// mafaili yanayotakiwa
if (
$fileextension != "jpg" &&
$fileextension != "png" &&
$fileextension != "jpeg" &&
$fileextension != "gif" &&
$fileextension != "pdf"
) {
echo "file is not allowed";
} else {
if (
move_uploaded_file(
$fileLocation,
$folda .
date("d" . "-" . "m" . "-" . "y" . "-") .
str_replace(" ", "-", $fileName)
)
) {
echo "successful";
} else {
echo "unsuccessful";
}
}
echo "<br><br>";
//$servername = "localhost";
$servername = "localhost";
$username = "root";
$password ="";
$dbname = "test";
// Kufanya connection
$conn=mysqli_connect($servername, $username,$password,$dbname);
// kuangalia connection
if(!$conn){die("Connection failed: ".mysqli_connect_error());
}
$faili = addslashes(file_get_contents($folda."/".$fileName));
$sql="INSERT INTO files (name, size, type, faili) VALUES ('$fileName', '$fileSize', '$fileType', '$faili')";
if(mysqli_query($conn, $sql)){echo "faili limepakiwa";
}else{
echo "Kuna tatizo".mysqli_error($conn);
}mysqli_close($conn);
}
echo "<br><br>";
?>
Utaona hapo faili nimelizumgushia duara. Hilo faili hapo ili kuweza kulisoma utahitajika kutumia code tena. Tutaona kwenye kipengele kinachofuata.
-
Ni ipi njia nzuri ya ku upload mafaili
Hatushauri ku upload mafaili kwenye database kwenye blob kwani inaweza kuchukuwa nafasi kubwa, pia wakati wa ku backup inachukuwa muda. Kama unahitaj9i kufanya hivyo boira iwe kwa mafaili yasiozidi 1 MB.
Ni vyema ku upload mafaili yako kwenye server kisha taarifa zake ndio unaziweka kwenye database. Ukifanya hivi mzigo wa mafaili utabakia kwenye server na kisha taarifa tu ndio zitakuwa kwenye database.
MWISHO:
Mpaka kufika hapa tumeweza ku upload mafaili kwenye database, pamoja na ku upload taarifa za faili kwenye database. Tukutane somo linalofuata ambapo utajifunza jinsi ya ku soma data amabzo tume upload. Pia tutajifunza jinsi ya kufuta mafaili.