Katika somo hili utakwenda kujifunza jinsi ya ku upload mafaili kwenye server kwa kutumia PHP
JINSI YA KU UPLOAD MAFAILI :
Katika somo hili utakwenda kujifunza jinsi ya ku upload mafaili. Somo hili limegawanyika katika sehemu kuu 8:-
Kuandaa html form
Kupata taarifa za faili
Jinsi ya ku upload
Kuedit jina
Kuangalia kama faili lipo
Jinsi ya kuzuia kiwango maalumu cha faili yaani ukubwa
Jinsi ya kuzuia aina maalumu ya mafaili
Jinsi ya kuthibitisha faili
Jinsi ya kubadili jina la faili
Jinsi ya ku upload kwenye taarifa kwenye database.
Jinsi ya ku upload blob file kwenye database
Jinsi ya kujuwa error code zinazotokea na maana yake
Kutokana na ukubwa wa somo hili tutaliendeleza katika sehemu kadhaa.
Kwanza kabla ya kuanza somo unatakiwa uhakikishe kuwa server yako inakubali ku upload. Kawaida server zote zinakuwa automatic zinaupload ila endapo haitakubali basi ingia kwenye faili lililoandikwa php.in. Kisha tafuta falipoandikwa file_uploads = On kama pamewekwa off weka on kisa save.
Jinsi ya kuandaa HTML form
Uandaaji wa hii fomu hauna utofauti na tulivyojifunza kwenye mafunzo ya html. Form yako itakuwa na infut type file. Ambapo itakuhitaji uchaguwe faili. Kitu cha tofauti ni kuwa attribute ya fomu imeongezeka moja ambayo ni enctype ambayo ni attribute itakayofahamisha kuwa fomu hii inakusanya data za aina nyingi. Hivyo inakuwa kama hivi enctype="multipart/form-data"
Form nzima ya html itakuwa fupi ti kama hivi
Select Image File:
Kupata taarifa za faili
Unahitaji kujuwa taarifa mbalimbali kuhusu faili unalotaka ku ipload. Taarifa hizo ni kama:-
Ukubwa wa hilo faili yaani lina MB ngapi
Aina ya hilo faili mfano kama ni picha au audio
Jina la hilo faili yaani linaitwaje
Pahali linapopatikana hilo faili yaani kwa sasa lipo kwenye folda gani
Kujuwa taarifa hizi na nyinginezo utahitajika kutumia global variable $_FILES[];
Ndani ya hayo mabano utaweka name ulioichaguw akutoka kwenye user input ya kwenye html form.
Kwa mfano kwenye form yetu hapo name tumeweka myFile kama inavyoonekana hapo Baada ya hapo utaweka mabano mengine ambayo ndio yatatupatia taarifa tunayotaka. Kwa mfano kama tunataka kujuwa ukubwa wa faili tutaweka [“size”]. Mfano wa variable nzima itakuwa hivi $_FILES['myFile']['size'];Hivyo basi ili kupata taarifa hizo unaweza kutengeneza variable kama hivi:-
// 1. kujuwa jina la faili
$fileName = $_FILES['myFile']['name'];
// 2. kujuwa ukiubwa wa faili
$fileSize = $_FILES['myFile']['size'];
// 3. kujuwa aina ya faili
$fileType = $_FILES['myFile']['type'];
// 4. kujuwa mahala lilipo link yake
$fileLocation = $_FILES['myFile']['tmp_name'];
// 5. Kujuwa error code
$errorCode = $_FILES['myFile']['error'];
Kuna taarifa ingine ambayo tunatakiwa tuipate nayo ni file extension. Hizi ni zile kama .mp4, .pdf, .mp3, .php, .doc na kuendelea. Hivyo tutahitajika kujuwa taarifa hizi ili kuweza ku dhibiti ku upload. Taarifa hii kuipata kwake ni tofauti na hizo zilizotangulia. Hii utaipata kwa kutumia function inayoitwa pathinfo();Kisha itakuwa na parameta 2 ambazo ni jina la faili ambalo kwa maelezo ya hapo juu tumetumia variable $fileName kisha parameta nyingine ni PATHINFO_EXTENSION
// 6. Kujuwa file extension
$fileextension = pathinfo($fileName, PATHINFO_EXTENSION);
3. Kuonyesha taarifa hizi kwenye browser
Sasa hatuwa iliyobaki ni kuweza ku onesha hizi taarifa kwenye browser yako. Endapo utaweza kuonyesha basi itakuwa rahisi kuweka kwenye database yako. Sasa kuonyesha hizi taarifa tutatumia echo.
//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);
//kuonyesha taarifa kwenye browser
echo "Filename: " . $fileName."
";
echo "Type : " . $fileType ."
";
echo "Size : " . $fileSize ."
";
echo "Temp name: " . $fileLocation."
";
echo "Error : " . $errorCode . "
";
echo "Extension:". $fileextension . "
";
4. Isset Function
Sasa hapa kuna kitu kingine inabidi tujifunze kabla ya kuendelea mbele. Kama uta run code hizo mwanzo kabisa kabla ya ku upload mafaili utaletewa error nyingi kuwa variable bado undefined kama unavyoona kwenye picha hapo juu. Ili kutatuwa tatizo hili tutatumia function inayoitwa isset()Ambayo itakuwa na parameta moja nayo ni hile name ya ile input ya ku submit file kwenye html form. Kwa mujibu wa form yetu hapo juu name yetu ilikuwa submit hivyo function hii itakuwa isset($_POST["submit"])
Kazi ya function hii ni kiutest kama input ina kitu ama haina kitu. Hivyo itasaidia kupunguza error kwa kuwa baada ya kuwa variable kuambiwa undefined zenyewe zitapewa null na kubakia kama zilivyo. Sasa kwa kuwa function hii inatest uwepo wa data baada ya ku submit, hivyo tutatumia if hivyo itakuwa katika sura hii if(isset($_POST["submit"])) {}
Ndani ya hayo mabano {} ndipo kutakaa code zako.
Code zote zitakuwa hivi:-
upload
Select File:
if(isset($_POST["submit"])) {
//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);
//kuonyesha taarifa kwenye browser
echo "Filename: " . $fileName . "
";
echo "Type : " . $fileType . "
";
echo "Size : " . $fileSize . "
";
echo "Temp name: " . $fileLocation . "
";
echo "Error : " . $errorCode . "
";
echo "Extension:" . $fileextension . "
";
}
?>
Mfano wa matokeo ya code hizo:
Mpaka kufika hapo tumeweza kupata taarifa zetu za faili. Sasa nikueleze kidogo kuhusu error code. Kama unavyoona hapo juu error code ni 0. Hii ina maana faili halina shida yeyote. Endapo ingekuwa tofauti na hapo basi ingelikuwa ni shida. Baadhi ya error nyingine zinaweza kutokea wakati wa ku upload.sasa tutaendelea hatuwa ya 3 ambayo ni ku upload faili.
JINSI YA KU UPLOAD FILE
Hapa sasa kuna taarifa nyingine tunatakiwa tuiongeze kwenye zile data zetu nayo ni folda ambalo tunataka mafaili yetu yawe yana kaa baada ya kuwa uploaded. Sasa tutatengeneza folda kwenye kwa mfano tuliite upload. Hivyo hapo ndipo ambapo mafaili yetu yatakwenda kukaa. Kisha tutatengeneza variable ya kuwakilisha hilo folda. Mfano $folda = "upload/";
Ili ku upload file tutatumia function ya move_uploaded_file()Hii function ndio hasa hutumika ku upload faili. Function hii ina parameta kuu 2 ambazo ni lazima ziwepo. Kwanza ni locatio ya faili kwa sasa ukiangalia kwenye data zetu hapo juu tumetumia variable ya $fileLocation, parameta nyingine ni folda ambalo faili litakwenda kuwekwa. Parameta hii sio lazima. Kwa maana usipoiweka faili litabakia kwenye root folda yaani folda ambalo hiyo ukurasa wenye code upo. Parameta ya tatu ambayo ni lazima ni jina la faili. Katika data zetu hapo juu jina la faili nimelipa variable $fileName. Kwa mfano function hii itakaa hivi move_uploaded_file($fileLocation, $folda. $fileName)
Kwa kuwa hapa tutataka kuangalia kuwa je faili lipo uploaded ama bado hivyo tutatumia if…..else condition. Ili kiwa upload imefanikiwa itatuambia successful na vinginevyo iseme unsuccessful. Hivyo code nzima itakuwa hivi
if (move_uploaded_file($fileLocation, $folda. $fileName) ) {
echo "successful";
} else {echo "unsuccessful";
}
Kama utaweka code hizo chini ya pale tulipoishia na uka run utaweza ku upload file. Mfano mimi ni kama hiyo picha hapo chini
Kubadili jina
Utaona hapo changamoto kuwa hiko jina la faili kama limeandikwa kwa kuwacha nafasi linakuwa hivyo hivyo kitu ambacho sio kizuri. Hivyo tunataka kubadili baada ya alama za barabarani iwe alama-za-barabarani. Kufanya hivi utatumia function ya ku replace ambayo tulishajifunza katika level 1 mafunzo ya php. Hiyo variable inayobeba jina utaifany akama parameta ya function hii. Sasa utatafyta kila ambapo pamerukwa nafasi na ku replace na alama - ama unaweza ku replace na alamma yeyoye ama namba amba herufi kadiri utakavyo.
Kama utakuwa umeweka vyema vbasi code zako zitaonekana hivi:
if (move_uploaded_file($fileLocation, $folda. str_replace(" ", "-", $fileName) )) {echo "successful";
} else {echo "unsuccessful";
}
Ongeza vitu kwenye jina
Unaweza pia kwenye hilojina kuongeza tarehe ama kuweka maneno amba kuweka namba. Kwa mfano tunataka hilo faili lianze jina kwa kuandika tyarehe ya siku lilipotumwa. Mfano hapo faili letu liandike 27-9-2022-alama-za-barabarani.jpeg. Kufanya hivi utaongeza parameta yenye hiyo tarehe nyuma ya hiyo parameta yenye jina la faili. Mfano function ya tarehe itakuwa hivi date('d'.'-'.'m'.'-'.'y'.'-')Kwa ujumla code yote itakuwa hivi
if (move_uploaded_file($fileLocation, $folda. date('d'.'-'.'m'.'-'.'y'.'-'). str_replace(" ", "-", $fileName) )) {echo "successful";
} else {echo "unsuccessful";
}
Jinsi ya kuangalia kama faili tayari lipo:
Sasa tunataka kujuwa kama faili tayari lipo ituambie na endapo halipo basi iendelee ku upload. Hii itatusaidia kuzuia ku upload kitu kimoja kila wakati, Sasa hapa tutakwenda ku test jina. Yaani je jina la hilo faili tayri lipo?. Kufanya hivi tutatumia function inayoitwa file_exists()Nayo itabeba parameta mbili, ya kwanza ni jina la folda ambalo faili linakwenda ku uploadiwa na ingine ni jina la faili hivyo itaonekana kama hivi file_exists($folda.$fileName)
Sasa hapa ndipo tunaingia sehemu tata. Maana hapa tunataka kuzuia kama faili lipo basi ikataliwe ku upload tena. Endapo hatutafanya hivi faili lita uploadiwa tena na kuwa overwriten. Hivyo basi itatubidi tu test kama faili lipo ikataliwe na kama halipo basi function ua ku upload ifanikiwe. Hapa tutatumia if ….. Else.
Endapo faili lipo basi iseme sorry file exist, na endapo faili halipo basi iendelee ku upload. Code inaweza kuwa hivi
//kuangalia kama faili lipo
if (file_exists($fileName)) {
echo "sorry file exist";
}
Sasa kuna kitu tunatakiwa hapa tuwe makini nacho. Kamas unakumbuka tumebadili jina la faili hapo hapo mwanzo. Natumelifanya liwe na tarehe kisha sehemu ambazo zipo wazi ziwe na alama hii - hivyo basi wakati wa kuangalia kama faili lipo au halipo itatubidi kuweka hivyo vitt tulivyoongeza ili kupata mfanano. Kwa hiyo code zitaonekana hivi
//kuangalia kama faili lipo
if (file_exists($folda.date('d' . '-' . 'm' . '-' . 'y' . '-') . str_replace(" ", "-",$fileName))) {
echo "sorry file exist";
}
Mpaka kufika hapa code zote zimekaa hivi
upload
Select File:
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);
//kuonyesha taarifa kwenye browser
echo "Filename: " . $fileName . "
";
echo "Type : " . $fileType . "
";
echo "Size : " . $fileSize . "
";
echo "Temp name: " . $fileLocation . "
";
echo "Error : " . $errorCode . "
";
echo "Extension:" . $fileextension . "
";
//kuangalia kama faili lipo
if (file_exists($folda.date('d' . '-' . 'm' . '-' . 'y' . '-') . str_replace(" ", "-",$fileName))) {
echo "sorry file exist";
}
else{
if (move_uploaded_file($fileLocation, $folda . date('d' . '-' . 'm' . '-' . 'y' . '-') . str_replace(" ", "-", $fileName))) {
echo "successful";
} else {
echo "unsuccessful";
}
}
}
?>
Jinsi ya kudhibiti ukubwa wa faili
Chukulia mfano unataka web yako iwe ina upload faili zisilozidi MB 5, hivyo itakubidi kudhibiuti ukubwa wa faili. Kitiu cha kwanza unachotakiwa kujuwa ni kuwa ukubwa wa faili unapimwa kuanzia byte na sio kilobyte au mega byte…. Hivyo basi kwa byte 1024. Hesabu hii ni kulingana na window inavyohesabu. Ila kulingana na watengenezaji wa disk yaani hard drive byte 1000 ni sawa na kilobyte moja. Unaweza kutumia yeyote kati ya hizo.
Hivyo kulingana na mahesabu ya Microsoft 1 GB = 1024*1024*1024 = 1,073,741,824 bytes. Na kuloingana na mahesabu ya drive 1 GB is 1,000,000,000 bytes. Kwa tofauti hii ndio maana unaona unanunua memori ya GB 7 lakini unakuta zipo GB 6 na nukta kadhaa.
Sasa turudi kwenye somo letu. Sisi tunataka ku upload faili lisilozidi MB 5 hivyo basi kwanza tutatakiwa kubadili MB tano kuwa bytes ambapo ni sawa na kusema 5*1000*1000 ambapo ni sawa na 5000,000 au kwa mahesabu ya MS utasema 5*1024*1024 ambapo ni sawa na 5,242,880. Hapa kwa kuwa kunakwenda ku dili na drive kwenye server tutatumia hiyo ya kwanza ya 5000000.
Hivyo basi tunakwenda kusema ikiwa faili ni kubwa kuliko 5000000 basi iseme file is too large na ikiwa ni vinginevyo iendelee ku upload.
// dhibiti ukubwa wa faili
if ($_FILES["myFile"]["size"] > 5000000) {
echo "file is too large.";
}
else{
if (move_uploaded_file($fileLocation, $folda . date('d' . '-' . 'm' . '-' . 'y' . '-') . str_replace(" ", "-", $fileName))) {
echo "successful";
} else {
echo "unsuccessful";
}
}
Ukiangalia hilo faili hapo juu ni kubwa sana hapo chini ya imeandikwa file is too large. Ukiangalia hapo ni bytes 26598760 ambayo ni sawa na MB 26.59 au sawa na MB 25.36 hapo nimetumia mahesabu yote mawili. Hivyo utaona faili ni kubwa sana kuliko MB 5 tulizotaka
Kuthibiti aina ya mafaili
Kipengele hiki ni muhimu sana kiusalama. Kwani unaweza kuwa unahitaji mtu aweze ku upload picha lakini badala yake aka upload faili lingine. Sasa kudhibiti hili unatakiwa uweze kuzuia mafaili ya ku upload.
Sasa tychukulie mfano tunataka ku upload picha na mafaili ya pdf tu. Hivyo kwanza tujuwe kuwa picha zipo katika format nyingi kwa mfano kuja .PNG, JPG, JPEG, GIF, PSD, TIFF na WEBP. Hivyo tunatakiwa kuchaguwa eidha picha zote ama picha za format maalumu. Kwa mfano sisi hapa tunataka picha za aina ya PNG, JPG, JPEG na GIF. pia kwa PDF hakuna aina zake kwani PDF nayo ipo katika aina za picha .
Kudhibiti aina ya faili pia kutakusaidia kuthibitisha kama je ni kweli hilo faili ndilo unalotaka ama ni tofauti.
Sasa katika kudhibiti hapa tunaweza kutumia array ama kutumia if else. Sasa tutatumia nyia zote mbili ili kuweza kukupa uwanja mpana wa kuelewa. Wacha tuanze kwa kutumia array. Kwanza tunatakiwa tutengeneze variable itakayobeba array yetu. Mfano variable tuiite format mfano itakuwa hivi $format = array('jpg', 'jpeg', 'gif', 'pdf');Weka variable hiyo kule juu kabisa tuilipoweka variable zingine.
Ili kuweza kuthibiti tutatumia function ya in_array() ambayo kinyume chake ni !in_array(). Function ya in_array() hutumika katika kutafuta item fulani kwenye array list. Sasa sisi tuna list yetu ambayo ina hizo format. Sasa kichume cha hii ni !in_array ambayo inatafuta item ambayo haipo.
Happ tutatumia hiyo ya !in_array ambayo itaangalia je file extension la faili letu ipo kwenye list ya item kwenye array?. Kama ipo basi faili liendelee ku upload na kama haipoo iambiwe file is not allowed hivyo itakuwa kama hivi
Function hiyo itabeba parameta mbili ambazo ni file extension na format ambazo tunazihitaji. Sasa file extension tayari variable yake ipo, na hizi format nazo tumeshaziweka kwenye variable ya $format. Hivyo code zinaweza kukaa hivi
if (!in_array($fileextension, $format)){echo 'file is not allowed';
}
else{
if (move_uploaded_file($fileLocation, $folda . date('d' . '-' . 'm' . '-' . 'y' . '-') . str_replace(" ", "-", $fileName))) {
echo "successful";
} else {
echo "unsuccessful";
}
}
.
Kwa kutumia if else
Sasa tunakwenda kurudia kitu kama hicho kwa kutumia if else. Hapa tutatumia alama ya != kumaanisha sio sawa. Tutatumia file extension ambapo tutaangalia aina ya faili extension kama tulivyoona hapo awali jinsi ya kujuwa aina ya faili extension. Kisha tutakwenda kuilinganisha na formati zeti. Endapo zitakuwa sawa basi iendelee ku upload na kama sio sawa isema file is not allowed. Katika logic hii tutatumia and au &&. Rejea mafunzo ya php level 2.
Hivyo tutasema endapo aina ya faili extension sio sawa na jpg na endapo aina ya faili extension sio sawa na png na endapo aina ya faili extension sio sawa na gif na endapo aina ya faili extension sio sawa na pdf basi isema file is not allowed vinginevyo faili liendelee ku upload. Hivyo code zitakuwa hivi
// mafaili yanayotakiwa
if ($fileextension != "jpg" && $fileextension != "png" && $filextension != "jpeg"
&& $fileType != "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";
}
}
CODE ZOTE KWA UJUMLA
upload
Select File:
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 = array('jpg', 'jpeg', 'gif', 'pdf');
//kuonyesha taarifa kwenye browser
echo "Filename: " . $fileName . "
";
echo "Type : " . $fileType . "
";
echo "Size : " . $fileSize . "
";
echo "Temp name: " . $fileLocation . "
";
echo "Error : " . $errorCode . "
";
echo "Extension:" . $fileextension . "
";
//kuangalia kama faili lipo
if (file_exists($folda.date('d' . '-' . 'm' . '-' . 'y' . '-') . str_replace(" ", "-",$fileName))) {
echo "sorry file exist";
}
// dhibiti ukubwa wa faili
if ($_FILES["myFile"]["size"] > 5000000) {
echo "file is too large.". '
';
}
//if (!in_array($fileextension, $format)){echo 'file is not allowed';
//}
// mafaili yanayotakiwa
if ($fileextension != "jpg" && $fileType != "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";
}
}
}
?>
12. FILE UPLOAD ERROR
Kama unakumbuka huko juu tumezungumzia kuhusu error code. Hapo awali nimekueleza kuhusu error code 0 ambayo inamaanisha kuwa kila kitu kipo sawa. Sasa hapa ninakwenda kukueleza error code nyingine ambazo unaweza kuziona:-
Error code 1
Hii humaanisha kuwa ukubwa wa faili umezidi kiwango ambacho kimeruhusiwa kwenye php.in
Error code 2
Hii humaanisha kuwa ukjubwa wa faili umezidi kiasi kilichoruhusiwa kwenye html form
Error code 3
Hii humaanisha kuwa faili lime uploadiwa n usu
Error code 4
Hii humaanisha kuwa hakuna faili lililo uploadiwa
Error code 6
Hii humaanisha folda ambalo unakwenda ku upload hilo faili halipo
Error code 7
Hii humaanisha kuwa faili halikuseviwa
Kwa maelezo zaidi tembelea link hii https://www.php.net/manual/en/features.file-upload.errors.php
Mwisho
Tukutane somo linalofuata tutakwenda kuzungumzia jinsi ya ku upload faili kwenye database. Hapa tutakwenda kujifunza jinsi ya ku upload taarifa hizo kwenye database ama ku upload faili moja kwa moja kwenda kwenye database.
Je! umeipenda hii post?
Ndio Hapana Save post
Imeandikwa na Rajabu Terehe 2023-10-18 Download PDF Share on facebook WhatsApp