PHP - somo la 39: Jinsi ya kutengeneza mafaili na mafolda kwenye server kwa kutumia PHP


image



Katika somo hili utakwenda kujifunza jinsi ya kuzungumza na server ili kutengeneza mafaili, mafolda, kufuta na ku edit kwa kutumia PHP.



Katika somo hili utakwenda kujifunza jnsi ya kucheza na mafaili.hapa utajifunza kutengeneza mafaili kwenye server kwa kutumia php. Pia utajifunza kuyafuta na ku edit. Zaidi utajifunza kuhusu kuyalinda mafaili haya, na tutajifunza mengi zaidi. Somo hili kwakuwa nalo ni lefu nitaligawa kwenye vipengele:-

 

  1. Kutengeneza folda kwenye server

  2. Kutengeneza faili

  3. Kupata orodha ya mafaili kwenye folda

  4. Kufuta folda

  5. Kufuta faili

  6. Ku edit faili

  7. Kusoma faili

 

  1. Kutenfeneza folda: 

Tunapozungumzia server sio kitu ambacho utaweza ku access kama ilivyo kompyuta yako. Hivyo tutahitajika tujuwe lugha ya kuzungumza na server ili iweze kufanya kile ambacho tunakitaka. Somo hili utaweza kuliona la kawaida ila lina umuhimu mkubwa sana kwa programa.

 

Ili kutengeneza folda tunatumia function inayoitwa mkdir(). Function hii itakuwa na parameta moja ambayo ni ya lazima ambayo ni jina la hilo folda. Kwa mfano unaweza kusema unataka kutengeneza folda linaloitwa bongoclass. Hivyo utaweka hivi mkdir(‘bongoclass’). Unaweza ku echo hiyo function ama kufanya uanavyotaka 

 

echo mkdir('bongoclass');

?>

 

Pia unaweza kutumia if else ili uweze kupata majibu kama faili limetengenezwa ama laa. Kufanya hivi tutatumia alama ya ! kuamaanisha kama function imefeli iseme failed vinginevyo iseme created

 

if (!mkdir('mafunzo')){

   echo "failed";

}else echo "created";

 

  1. Kutengeneza sub folder

Ili uweze kutengeneza subfolder utatumia alama ya / mbele ya folda lako. Kwa mfanoi folda letu linaitwa ,afunzo na tunataka kutengeneza folda linaloitwa php ndani ya folda mafunzo. Hivyo tutaweka alama ya slash kisha jina la sub folda letu mfano mkdir(mafunzo/php)

 

if (!mkdir('mafunzo/php')){

   echo "failed";

}else echo "created";

Hivyo hivyo unaweza kuongeza folda lingine ndani ya subfolda. Mfano

 

if (!mkdir('mafunzo/php/level-3/lesson-1')){

   echo "failed";

}else echo "created";

 

  1. Kutengeneza faili

Ili kutengeneza mafaili kwenye server tutatumia function ya php inayoitwa fopen()  au kwa kutumia fwrite(). Mfano tunatka kutengeneza faili linaloitwa bongoclass.html, bongo.txt, bongoit.mp3. Hivyo tutatumia function hii kufanya hivyo.

 

Function hii ya kutengeneza mafaili ina para,meter mbili ambazo ni lazima. Moja ni jina la faili lenye extension yake, na la pili ni namna ambavyo hilo faili litatumika. Kwa mfano ukiweka W hiyo ni kwa ajili ya kuandika faili tu, nyingine ni kama:-

  1. w. Kuandika faili tu, hutengeneza faili kama halipo

  2. r . kusoma faili tu, husoma kuanzia mwanzo

Nyingine utazipata hapa

 

Kiutaratibu unatakiwa ufanye hivi, kwanza utatumia fopen() ili kufunguiwa faili kisha utatumia fwrite() ili kuandika taarifa kwenye faili, kisha utatumia fclose() ili kufunga hilo faili ulilolifunguwa. Kuwa makini sana ni jambo linalisisitizwa kufunga faili lolote baada ya kulitumia.

 

Pia kuna functio nyingine ya die() ni kama tulivyotumia function hii kwenye database. Hivyo hapa napo endapo code zitashindwa kufunguwa hilo file lamda pengine halipo basi itastop. Wacha tuine mifano hapo chini:-

 

Mfano 1:

 

echo fopen("upload/bongoclass.html""w");

echo fopen("upload/bongo.txt""w");

echo fopen("upload/bongoit.mp3""w");

?>

 

Sasa utaona ukifunguwa hayo mafaili hayana data ndani yake. Hivyo sasa ni wakati wa kutumia fwrite() ili kuandika data kwenye hayo mafaili. Sasa tutakwenda lkutengeneza mafaili mengine matatu ambayo tutaandika data. Tutayapa jina web.html, somo.txt, funzo.doc.

 

 

 

Kwanza tutatengeneza variable za kuwakilisha function za kutemnheneza hayo mafaili kisha ndipo tutakwenda kuweka data kwenye mafaili hayo. Kwa kuwa mfaili hayo yapo kwenye format tofauti basi kila m moja hapo itabidi awe na variable yake na data zake.

 

Mfano 2:

 

$a = fopen("upload/bongoclass.html""w");

$b = fopen("upload/bongo.txt""w");

$c = fopen("upload/bongoit.doc""w");

 

echo fwrite($a,"

haloo bongoclass

");

 

echo fwrite($b,"Habari ya muda huu Bongoclass");

echo fwrite($c,"Hili ni faili la PDF kutoka bongoclass");

 

fclose($a);

fclose($b);

fclose($c);

 

 

?>

Utaona hapo ukirun kuna namba zinatokea. Hiyo ni idadi ya character zilizopo kwenye hilo faoli. Kwa namna hiyo unaweza kutengeneza faiuli na kuweka data hata kutoka kwenye database. Unaweza pia kuweka hayo mafaili kwenye folda unalotaka. Hata kwenye subfolda.

 

Hatuwa inayofuata ni kuyasoma hayo mafaili. Sasa katika kusoma data kuna namna nyingi hapa nitakwenda kukutajia namna 4, ambazo ni kusoma lote kwa pamoja kwa kutumia fread() au kusoma msatri wa kwanza tu. hapa tutatumia fgets(), namna ya pili ni kusoma mstari wa mwisho hapa tutatumia feof(), na namna ya mwisho ni kusoma mistari yote mmoja baada ya mwingine. Hapa tutatumia !feof() hii ni sawa na hiyo ya ,mwanzo ila tofauti ni kjuwa hii tutaifanyia programming.

 

Sasa tutatumia faili moja katika mfano huu. Tutaongeza mstari wa data ili tuweze kupata mistari kadhaa. Sasa tutakachokifanya ni ku edit moja ya mafaili yetu. Ku edit maana yake data ambazo zipo hatuziondoi ila tunaongeza nyingine. Ili tuweze ku edit tutatakiwa tutumie read mode ya “a”. Katika mfano unaofuata pia tutatumia function ya die() ili ku stop kama kuna kitu hakipo sawa. Pia nitatumia alama ya   ili kuruka mstari. Hii ni sawa na ,kutumia
kwenye html

Mfano 3:

 

$file = fopen("upload/bongo.txt""a"or die("kuna tatizo");

$txt1 = "karibu bongoclass ";

fwrite($file, $txt1);

$txt2 = "upate elimu bure ";

fwrite($file, $txt2);

$txt3 = "website yetu ni www.bongoclass.com ";

fwrite($file, $txt3);

$txt4 = "wasiliana nasi muda wowote ";

fwrite($file, $txt4);

fclose($file);

?>

Sasa kwa kuwa tunalo faili letu ambalo lipo hapo lina mistari 6 na kila msatari tgu aona nini kimeandikwa. Sasa tunakwenda kusoma mistari hiyo kwa kutumia php. Utaweza kufanya hivi pia kwa mafaili mengine.

 

Kabla ya kusoma hayo mafaili kuna kitu nataka ukifahamu kwanza. Nacho ni kujuwa ukubwa wa faili. Tulisha jifunza kuhusu filesize kwenye POST sasa hapa tunakwenda kujuwa ukubw awa faili kw akutum ia filesize(). Hii itatupa ukubwa wa faili kwa byte. Hivyo kwanza nataka tujuwe hilo faili letu hapo juu lina ukubwa gani?

Mfano 4:

 

$file = fopen("upload/bongo.txt""r"or die("Unable to open file!");

echo filesize("upload/bongo.txt");

fclose($file);

?>

Sasa tunakwenda kusoma faili letu kwa kiutu mia fread(). Function hii itabeba parameta 2 am bazo n i jina la faili ambalo limesha funguliwa hapa tutatumia fopen, na parameta ya pili  ni filesize. Hivyo itakuwa hivi

 

Mfano 5:

 

$file = fopen("upload/bongo.txt""r"or die("Unable to open file!");

echo fread($file,filesize("upload/bongo.txt"));

fclose($file);

?>

Sasa tunakwenda kusoma mstari wa kwanza tu. hapa tutatumia fgets(). Function hii nayo itabeba parameta moja ambayo ni jina la faili ambalo limesha finguliwa.

 

$file = fopen("upload/bongo.txt""r"or die("Unable to open file!");

echo fgets($file);

fclose($file);

?>

Kuna changamoto utaipata kwenye fread() ni kuwa faili limefunguka lote. Na mistari imeungaa tofauti na tulipotengeneza tuliruka mstari kwa . Sasa kutatuwa cgangamoto hiyo tutatumia function hii feof() hii kazi yake ni kuangalia kama faili limefika mwsho. Hivyo basi tutasoma mstari baada ya mstari mpaka mwisho. Hivyo kila m stari utakaa mahala pake.

 

Tutahitajika hapa kutumia condition statement, ili tuweze kufanya looping kutolka mwanzo mpaka mwisho. Hapa tutatumia while loop. Ni matumaini yangu kuwa unafahamu kuhusu while loop. feof() hii huangalia je tumefika mwisho. Sasa nitafanya hivi !foef() hii ni negative yake, hivyo tutasema endapo hatujafika mwsho basi iendelee kusoma faili letu mstari baada ya mstari. Hivyo tutaitumia tena fgets().

 

Mfano 6:

 

$file = fopen("upload/bongo.txt""r"or die("Unable to open file!");

while(!feof($file)) {

   echo fgets($file) . "
"
;

}

fclose($file);

?>

Wacha nikuekekeze namna nyingiune ya kusoma faili, namna hii ni kusoma faili kwa character mojo moja, au herufi moja moja. Yaani inasoma character mpoja, kisha inayofuata. Na kila  moja inakaa kwenye mstari wake kama uta break line. Functio itakayotumika hapa ni fgetc().

Mfano 7:

 

$file = fopen("upload/bongo.txt""r"or die("Unable to open file!");

while(!feof($file)) {

   echo fgetc($file) . "
"
;

}

fclose($file);

?>

Ila endapo utaondoa hiyo
faili litakuwa na muonekano ule ule tuliouzoea. Ila sentensi hazitajipanga kwe nye mistari ila zitakuwa kama ni mstari mmoja.

 

Sasa je kama ninataka kusoma baadhi tu ya mistari. Wa mfano faili letu hapo juu tunataka kusoma mistari mitatu ya kwanza. Hivyo basi kwanza itatakiwa kujuwa idadi ya mistari iliyopo kwenye hilo faili. Kufanya hivi tutatujmia coutn(file(()) function. Utaona hapo ni function ya count() ambao ndani yake kuna function ya file(). Sasa hiyo ya file() ndio ambayo inahesabiwa. Yenyewe ina irray kulingana na idadi ya mistari. Kwa mfano faili la mistari 6 itakuwa na array 5. Kumbuka array huhesabiwa kuanzia 1.Kisha baada ya hapo tutatumia condition statement ili kusoma baadhi tu ya mistari tunayotaka.

Mfano 8:

 

$file "upload/bongo.txt";

$lines count(file($file));

echo $lines;

?>

Hii itakupa idadi ya 6, yaani faili lina mostari 6. Ok sasa wacha tuone kama tunataka kusoma mitatu tu tutafanya nini.

Mfano 9:

 

$File = "upload/bongo.txt";

$fh = fopen($File, 'r');

$i = 0;

while ($i < 3)

{

   $theData = fgets($fh);

   $i++;

   echo $theData. "
"
;

}

fclose($fh);

Sas nakuletea challenge nyingine. Je kama unataka kusoma mstari mmoja tu tena maalumu. Tiulisha jifunza kusoma mstari wa kwanza. Sasa tunataka kusoma mstari wa 5. Hapa tutatumia function file() ambayo ndio inabebab array kulingana na mistari. Hivyo mstari wa 5 unbebwa na array ya 4.

Mfano 10:

 

$file = "upload/bongo.txt";

$lines = file( $file );

echo $lines[4];

?>

Kuna chalenji nyingine nakupa, mfano sasa tunataka kusoma kiasi tu fulani cha data. Kwa mfano tunataka kusoma byte 5 tu za data. Na kulingana na function ta filesize() tulioitumia hapo juu faili letu lkina ukubwa wa 150 byte. Sasa hebu tusome byte 100 tu.

 

Kuna kutu hapa nataka nikufundishe kwanza kabla hatujaangalia swala letu. Ni mkuwa byte moja ni sawa na character moja. Tunaposema character hata empty space ni character. Kwa mfano sentensi hii halo .1,$] semntensi hii ina character 10 hivyo itakuwa na byte 10. Hivyo basi tunapotaka kusoma byte 100 ni sawa na kusema tunakwenda kusoma character 100.

 

Ili kufanya hivi tutatumia function ile ile fread() ila tutaogeza parameter nyingine ya size. Ha hapo ndipo tutandika kiasi cha byte ambacho tunataka kusoma.

 

Mfano 11:

 

$filename = 'upload/bongo.txt';

$f = fopen($filename, 'r');

if ($f) {

   $contents = fread($f, 100);

   fclose($f);

   echo $contents;

}

?>

Kupata list ya mafaili yaliyopo kwenye folda.

Kwa kuwa sasa tunaelewa kutengeneza na kusoma mafaili. Sasa hapa tunakwenda kujifunza jinsi ya kupata orodha ya mafaili yote yaliyopo kwenye folda. Kufanya hivi tutatimia function inayoitwa scandir() hii itakuwa na parameta moja ambayo itakwenda kuwa na jina la hilo folda. Pia ipo function nyingine inaitwa glob() hii pia inaweza kufanya hicho.  tunachokitaka. Hii glob() function kazi yake yasa ni kuleta array zote za faili ama folda.

Pia tutatumia function nyingine inayoitwa is_file(), hii kazi yake ni kuangalia kama mafaili yaliyokuwepo  ni mafaili halali kuonekana. Maana kuna baadhi ya mafaili sio ya kawaida. Hivyo hii itaangalia mafaili ya kawaida ndio yataonekana.

 

Mfano 12:

 

$filelist = glob('upload/*');

foreach($filelist as $filename){

   if (is_file($filename)){

       echo $filename, '
'
;

   }

}

?>

 

Katika mfano unaofuata tutatumia scandir(), kama tulivyoona kuhusu is_file() basi kwenye folda tutatumia is_dir() nayo ni kuangalia kama folda ni la kawaida. 

 

$scan = scandir('upload');

foreach($scan as $file){

   if (!is_dir('upload/'.$file)){

       echo $file. '
'
;

   }

}

?>

Kufuta folda

Tumeshajifunza kuhusu kufuta mafaili kwenye somo lililotangalia ambapo tulitumia unlink(). Sasa wacha tuone jinsi ya kufuta folda. Kwenye kutengeneza folda tulitumia mkdir() sasa kwenye kufuta tunatumia rmdir(). Jambao la msinhi la kuzingatia ni kuwa folda unalotakiwa kufuta liwe empty yaani liwe tupu. Huwezi kufuta faili lenye data. Ili kutatuwa tatizo hili kwanza tunatakiwa kufuta data zote kwenye folda.

 

Kufuta mafaili yote tutatumia unlink() ila hapa itatubidi tuiloop function ya unlink. Yaani tutumie logical condition ili tuweze kufuta mafaili yote. Hata hivyo unaweza kufuta aina tu flamni ya mafaili . kwa mfano endapo utatumia upload/*Hapa utafuta mafaili yote kwenye folda linaloitwa upload, lakini ukitumia upload/*.pdf Hapa utafuta mafaili yote ambayo ni pdf kwenye folda linaloitwa upload.  Wacha tuone code nzima zinavyokaa:-

 

$files = glob('upload/*');

foreach($files as $file){

   if(is_file($file))

       unlink($file);

}

Kwa sasa folda letu la upload lipo tupu. Hivyo sasa tunaweza kulifuta. Kama nilivyokueleza kuwa tunatumia rmdir() kufuta folda.

 

$folda = "upload";

if(rmdir($folda))

{

   echo ("$folda limefutwa");

}

else

{

   echo ($folda . "imeshindikana");

}

?>

Kuandika faili kwa kutumia database:

Tulishaona jinsi ya kutengeneza mafaili, sasa endapo tunataka kutengeneza mafaili kwa kutumia data zilizopo kwenye database. Chukulia mfano unataka kutengeneza html file kwa kutumia data zilizopo kwenye database. Sasa hiki kitu ndio tunakwenda kujifunza.

 

Kwanza tutaedit faili letu la index ambalo tulisha litu,mia kwenye somo lililopita. Tutakwenda kuongeza column nyingine kwenye table ambayo tutaiita create file. Katika column hi tutatuma id ya hiyo row ya database kwenda kwenye faili la read.php. Hili ni faili ambalo litakwenda kuchakata data zetu. Na kutuurngezea faili tunalotaka. Faili ambalo tunakwenda kutengeneza ni html file ambalo litakuwa na jina sawa na tittle.

html>

<html>

<head>

   <title>Blogtitle>

   <meta name="viewport" content="width=device-width, initial-scale=1">

   <style>

       tablethtd {

           border:1px solid black;

       }

       .dol{

           margin: 0 auto;

           max-width: 70%;

       }

   style>

head>

<body>

<table>

 <h><href="post.php">Add posta>h>

   <th>#th>

   <th>Imageth>

   <th>Titleth>

   <th>viewth>

   <th>Editth>

   <th>deleteth>

   <th>fileth>

   

   include 'config.php';

   $file = mysqli_query($conn, "select * from blog");

   $i = 1;

   while($fetch = mysqli_fetch_array($file)){?>

   <tr>

       <td>$i++; ?>td>

<td><img src="upload/$fetch['image'];?>width="50">td>

       <td>$fetch['title'];?>td>

      <td><href="view.php?id=$fetch['id'];?>&publisher=$fetch['publisher'];?>">Viewatd>

       <td><href="edit.php?id=$fetch['id'];?>">Editatd>

       <td>

           <form method="post" action="delete.php">

               <input type="hidden" name="delete" value="$fetch['id'];?>">

               <input type="hidden" name="file" value="$fetch['image'];?>">

               <input type="submit" value="delete" name="submit">

              

           form>

 

       td>

       <td><href="fif.php?id=$fetch['id'];?>">create<br>fileatd>

   tr>

   }; ?>

table>

body>

html>

 

Read.php

 

$id = $_GET['id'];

include 'config.php';

$file = mysqli_query($conn, "select * from blog WHERE id=$id");

while($fetch = mysqli_fetch_array($file)) {

   $jp = $fetch['content'];

   $tt = $fetch['title'];

 

   $myfile = fopen("$tt".".html""w"or die("Unable to open file!");

//$txt = "John Doe ";

//fwrite($myfile, $txt);

   $txt = $jp;

   if (!fwrite($myfile, $txt)){

       echo "failed";

   }else

       header("location: index.php");

   fclose($myfile);

}

?>

 

Baada ya kulitengeneza hilo faili unaweza kufanya chochote unachotaka. Unaweza kulifunguwa kwenye browser ama kufanya kila kitu ambacho html file hufanya.

 

Mwisho 

Mpaka kufika hapa tumemaliza somo letu la kucheza na  mafaili kwenye server. Tukutane somo linalofuata ambalo tutakwenda kujifunza jinsi ya kufanya hashing, na kutengeneza frienly url. Somo hili litakuwa ni moja ya masomo yetu yatakayozungumzia security.



Je! umeipenda hii post?
Ndio            Hapana            Save post

Imeandikwa na Rajabu Terehe 2023-10-19 Download PDF Share on facebook WhatsApp

RELATED POSTS

picha

katika post hii utajifunza jinsi ya kutengeneza ukurasa wa dashboard
picha

Katika somo hili utajifnza jinsi ya kufanya prepared statement kama
picha

Katika somo hili utakwenda kujifunza jinsi ya kusoma muda kama
picha

Katika somo hili utajifunza jinsi ya kufanya sanitization kwenye user
picha

Katika somo hili utakwenda kujifunza concept ya traits kwenye OOP.
picha

Katika somo hili utajifunza jinsi ya ku connect database, kwa
picha

Katika somo hili utakwenda kujifunza jinsi ya ku update na
picha

Katika somo hili utakwenda kuona namna ya kutuia if else
picha

Katika somo hili utakwenda kujifunza jinsi ya ku upload mafaili
picha

Katika somo hili utajifunza jinsi ya kutumia filter_var() function kwa
picha

Katika somo hili utakwenda kujifunza jinsi ya kutumia taarifa ambazo
picha

Katika somo hili utajifnza jinsi ya ku upload file kwenye
picha

Katika somo hili utakwenda kujifunza kuhusu function kwenye PHP na
picha

Katika soko hili takwenda kujufunza jinsi ya kutuma sms kwa
picha

Katika somo hili tutakwenda kujifunza kuhusu array kwenye php, na
picha

Katika somo hili utajifunza kupangilia data wakati wa kuzisoma kwenye