Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • File Php në një variabël. Si të lexoni siç duhet skedarët duke përdorur PHP

File Php në një variabël. Si të lexoni siç duhet skedarët duke përdorur PHP

shkarkime _ $ (8)

Më duhet të ngarkoj një skedar PHP në një variabël. Për shembull përfshijnë();

Kam ngarkuar një skedar të thjeshtë HTML si ky:

$Vdata = file_get_contents ("textfile.txt");

Por tani më duhet të ngarkoj skedarin PHP.

Përgjigjet

Nëse dosja juaj ka një deklaratë kthimi:

"Afeganistão", "ZA" => "África do Sul", ... "ZW" => "Zimbabué");

Ju mund ta merrni këtë variabël si kjo:

$data = përfshijë $filePath;

Përndryshe, mund të filloni buferimin e daljes, të përfshini/kërkoni dhe më pas të ndaloni buferimin. Me ob_get_contents() ju thjesht mund të merrni gjërat që janë nxjerrë nga një skedar tjetër PHP në një variabël.

Nëse dëshironi të shkarkoni një skedar pa e ekzekutuar atë përmes një serveri në internet, sa vijon duhet të funksionojë.

$string = eval(file_get_contents("file.php"));

Përmbajtja e skedarit më pas do të shkarkohet. Skedari PHP duhet të jetë i formuar plotësisht me etiketaQë vlerësimi ta vlerësojë atë.

Unë jam me mend se ju doni të merrni Përmbajtja e krijuar nga PHP, nëse është e vërtetë:

$Vdata = file_get_contents ("http://YOUR_HOST/YOUR/FILE.php");

Përndryshe, nëse doni të merrni Kodi burimor i skedarit PHP, kjo është e njëjtë me skedarin .txt:

$Vdata = file_get_contents ("rruga/to/YOUR/FILE.php");

Në teori, thjesht mund të përdorni fopen dhe më pas të përdorni stream_get_contents.

$stream = fopen("file.php","r"); $string = stream_get_contents($stream); fclose($stream);

Nëse jeni duke përdorur http:// siç sugjerohet nga syri, do të mund të lexoni vetëm daljen e skriptit PHP. Ju mund të lexoni një skript PHP vetëm nëse është në të njëjtin server me skriptin tuaj. Atëherë mund të përdorni diçka të tillë

$Vdata = file_get_contents ("/rruga/to/your/file.php");

Ja se si e bëj (ka shumë mënyra):

  1. Konvertimi i të dhënave në JSON
  2. Thirrni AJAX për të marrë dosjen JSON
  3. Konvertimi JSON për të kundërshtuar Javascript

HAPI 1

connect_error) ( die("Lidhja dështoi: " . $conn->connect_error); ) $sql = "ZGJEDH id, emrin ,imazhin NGA telefoni"; $rezultat = $conn->pyetës($sql); while($row =$rezultat->fetch_assoc())( $v=$row; ) echo json_encode($v); $conn->close(); ?>

HAPI 2

Funksioni showUser(fnc) ( var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = funksion() ( if (this.readyState == 4 && this.status == 200) ( // HAPI 3 var p=JSON.parse( this.responseText);) ) )

Çdo programues duhet të jetë në gjendje të punojë me skedarë në mënyrë korrekte. Ky artikull ka për qëllim programuesit fillestarë të PHP, por "koleksioni i recetave" do të jetë gjithashtu i dobishëm për përdoruesit e avancuar.

Puna me skedarë ndahet në 3 faza:

  1. Hapja e një skedari.
  2. Manipulimi i të dhënave.
  3. Mbyllja e skedarit.

I. Hapja e një skedari

Për të hapur një skedar në mjedisin PHP, përdorni funksionin fopen (). Parametrat e kërkuar për këtë funksion janë emri i skedarit dhe mënyra e skedarit.

$fp = fopen("counter.txt", "r");

Sipas dokumentacionit PHP, dallohen llojet e mëposhtme të mënyrave të skedarëve:

  1. r – hapni skedarin vetëm për lexim.
  2. r+ - hap një skedar për lexim dhe shkrim në të njëjtën kohë.
  3. w – krijon një skedar të ri bosh. Nëse një skedar i tillë ekziston tashmë në momentin e thirrjes, ai shkatërrohet.
  4. w+ - e ngjashme me r+, vetëm nëse një skedar i tillë ekziston në momentin e thirrjes, përmbajtja e tij fshihet.
  5. a – hap një skedar ekzistues në modalitetin e shkrimit, me treguesin e zhvendosur në bajtin e fundit të skedarit (në fund të skedarit).
  6. a+ - hap një skedar në modalitetin lexim-shkrim, me treguesin e zhvendosur në bajtin e fundit të skedarit (në fund të skedarit). Përmbajtja e skedarit nuk fshihet.

Shënim: Mund të ketë edhe një parametër opsional në fund të cilësdo prej rreshtave: b ose t . Nëse specifikohet b, skedari hapet në modalitetin binar të leximit/shkrimit. Nëse t , atëherë modaliteti i përkthimit të furnizimit të linjës është vendosur për skedarin, d.m.th. perceptohet si tekstuale.

Për të demonstruar, merrni parasysh skenarin e mëposhtëm:

//Hap një skedar në mënyra të ndryshme
$fp = fopen("counter.txt", "r"); // Mënyra binare
$fp = fopen("counter.txt", "rt"); // Modaliteti i tekstit
$fp = fopen("http://www.yandex.ru", "r");// Hap një lidhje HTTP për lexim
$fp = fopen("ftp://user: [email i mbrojtur]", "w"); //Hap një lidhje FTP që tregon hyrjen dhe fjalëkalimin
?>

II. Manipulimi i të dhënave të skedarit

Ju mund të shkruani të dhëna në një skedar duke përdorur PHP duke përdorur funksionin fwrite (). Ky funksion merr 2 parametra të kërkuar dhe 1 opsional. Parametrat e kërkuar janë përshkruesi i skedarit dhe mënyra e skedarit:

$fp = fopen("counter.txt", "a"); // Hapni skedarin në modalitetin e shkrimit
$mytext = "Duhet të shkruajmë këtë rresht\r\n"; // Vargu i burimit
$test = fwrite($fp, $mytext); // Shkruani në skedar
nëse ($test) echo "Të dhënat u futën me sukses në skedar.";
else echo "Gabim në shkrimin e skedarit.";
fclose($fp); //Mbyll skedarin
?>

Për të lexuar një skedar rresht pas rreshti, përdorni funksionin fgets (). Funksioni merr 2 parametra të kërkuar:


nëse ($fp)
{
ndërsa (!feof($fp))
{
$mytext = fgets ($fp, 999);
jehonë $mytext."
";
}
}

fclose($fp);
?>

Shënim: Në këtë shembull, vlera 999 specifikon numrin e karaktereve që do të lexohen derisa treguesi të arrijë në fund të skedarit (EOF).

Për të lexuar skedarin si një e tërë, duhet të përdorni funksionin skedari i lexuar (), i cili merr 1 parametër të kërkuar. Funksioni hap një skedar, shfaq përmbajtjen e tij në një dritare të shfletuesit dhe më pas mbyll skedarin:

echoreadfile ("counter.txt");
?>

Ju gjithashtu mund të përdorni funksionin fpassthru() i cili merr 1 parametër të kërkuar. Përpara se të përdorni këtë veçori, duhet ta hapni skedarin në modalitetin e leximit. Kur skedari përfundon së lexuari, funksioni mbyll automatikisht skedarin (dhe përshkruesi i skedarit bëhet i pavlefshëm).

$fp = fopen("counter.txt", "r"); // Hapni skedarin në modalitetin e leximit
nëse ($fp) echo fpassthru($fp);
elseecho "Gabim në hapjen e skedarit";
?>

Shumë shpesh ka situata kur është e nevojshme të lexoni përmbajtjen e një siti në një grup. Kjo veçori përfshin përdorimin e funksionit skedar (). Kur thirret ky funksion, çdo rresht i skedarit do të ruhet në një element të veçantë të grupit të specifikuar.

Shënim: Funksioni nuk duhet të përdoret skedar () te skedarët binare (binary-safe), sepse Nuk është i sigurt për sa i përket leximit të skedarëve binare dhe nëse ndeshet diku me një karakter të fundit të skedarit (EOF), nuk garanton që do të lexoni të gjithë skedarin binar.

$file_array = skedar ("counter.txt"); // Lexoni skedarin në $file_array
// Puna me të dhënat e grupit
?>

Shënim: Puna me vargje përshkruhet në detaje, autorët: Mukhametshin D.F., Simdyanov I.V.

Në fund të artikullit, do të gjeni një "libër recetash" të mirë mbi vargje, i cili ofron zgjidhje për shumë probleme që një programues ueb has çdo ditë.

Le të imagjinojmë një situatë ku një skedar duhet të lexohet karakter për karakter. Për ta bërë këtë ne mund të përdorim funksionin fgetc (). Funksioni merr një parametër të vetëm. Funksioni është i dobishëm nëse duhet të gjejmë ndonjë karakter ose numrin e karaktereve identike.

$fp = fopen("counter.txt", "r"); // Hapni skedarin në modalitetin e leximit
nëse ($fp)
{
ndërsa(!feof($fp))
{
$char = fgetc($fp);
nëse ($char == "c") $i = $i + 1;// Gjeni karakterin "c"
}
echo "Numri i shkronjave 'c' në dosje: ". $i;
}
tjetër echo "Gabim në hapjen e skedarit";
?>

III. Mbyllja e një skedari

Skedari mbyllet duke përdorur funksionin fclose (), i cili merr 1 parametër të kërkuar.

$fp = fopen("counter.txt", "r");
nëse ($fp)
{
echo "Skedari është i hapur";
fclose($fp); // Mbyllja e skedarit
}
?>

Koleksioni i recetave

1) Duhet të kontrollojmë nëse ekziston ky apo ai skedar. Për ta bërë këtë ne do të përdorim funksionin skedari_ekziston ().

myfile ("counter.txt"); // Përdorni funksionin myfile, duke kaluar emrin e skedarit si argument

funksioni myfile($name) //Krijoni një funksion për të kontrolluar ekzistencën e një skedari
{
if (file_exists($name)) echo "Skedari ekziston";

}
?>

Shënim: Funksioni skedari_ekziston nuk kontrollon skedarët në serverin e largët të internetit. Që funksioni të funksionojë siç duhet, skedari me skriptin duhet të jetë i vendosur në të njëjtin server me skedarin që kontrollohet.

2) Përcaktoni madhësinë e skedarit duke përdorur funksionin madhësia e skedarit()

myfile ("counter.txt");

funksioni myfile($name) //Krijoni një funksion për të kontrolluar ekzistencën e një skedari dhe për të përcaktuar madhësinë e skedarit
{
if (file_exists($name)) jehonë "Madhësia e skedarit: ".filesize($name)." bytes";
ndryshe echo "Skedari nuk ekziston";
}
?>

3) Krijoni një skedar të përkohshëm duke përdorur funksionin tmpfile()

$myfile = tmpfile();
fwrite($myfile, "Kjo rresht është shkruar në një skedar të përkohshëm."); // Shkruani në një skedar të përkohshëm
fseek ($myfile, 0); // Vendosni treguesin e skedarit
echo fread ($myfile, 1024); // nxjerr përmbajtjen e skedarit
?>

4) Ju duhet të përcaktoni numrin e rreshtave në skedar. Për ta bërë këtë ne përdorim funksionin numëroj()

$fp = skedar ("counter.txt");
echo "Numri i rreshtave në skedar: ".count($fp);
?>

5) Duhet të përdorim një mekanizëm për mbylljen e skedarëve

$fp = fopen("counter.txt", "a");
flock ($fp, LOCK_EX); // Blloko skedarin për shkrim
fwrite($fp, "Rreshti për të shkruar");
flock ($fp, LOCK_UN); // Hap
fclose($fp);
?>

6) Duhet të heqim një rresht të caktuar nga skedari

$num_stroka = 5; //Fshi rreshtin 5 nga skedari
$file = skedar ("counter.txt"); // Lexoni të gjithë skedarin në një grup

për ($i = 0; $i< sizeof($file); $i++)
if($i == $num_stroka) unset($file[$i]);

$fp = fopen("counter.txt", "w");
fputs($fp, implode("", $file));
fclose($fp);
?>

7) Përcaktimi i llojit të skedarit. Duke përdorur funksionin

Rreth përdorimit të funksioneve fopen, fclose, feof, fgets, fgetss dhe fscanf

Le të rendisim të gjitha mundësitë

Një nga përfitimet e punës me gjuhët moderne të programimit si PHP është numri i veçorive të disponueshme. PHP mund të miratojë lehtësisht moton e Perl, "Ka më shumë se një mënyrë për të bërë diçka", veçanërisht kur bëhet fjalë për përpunimin e skedarëve. Por me bollëkun e mjeteve në dispozicion, shtrohet pyetja se cili është më i miri për të kryer punën. Natyrisht, përgjigja për këtë pyetje varet vërtet nga qëllimet tuaja kur përpunoni skedarin, kështu që të mësoni të gjitha aftësitë e gjuhës ia vlen koha juaj.

Metodat tradicionale të fopenit

Metodat fopen janë ndoshta më të njohurat për programuesit C dhe C++ të dikurshme, pasi ato janë pak a shumë mjetet që kanë qenë në majë të gishtave për vite me radhë nëse keni punuar me ato gjuhë programimi. Për secilën nga këto metoda, ju ndiqni procedurën standarde, duke përdorur fopen për të hapur skedarin, një funksion për të lexuar të dhënat dhe më pas fclose për të mbyllur skedarin, siç tregohet në Listimin 1.

Listimi 1. Hapja dhe leximi i një skedari duke përdorur fgets
$file_handle = fopen("myfile", "r"); ndërsa (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

Megjithëse këto funksione janë të njohura për programuesit më me përvojë, më lejoni të analizoj se si funksionojnë. Në fakt ju po ndiqni këto hapa:

  1. Hapni skedarin. $file_handle ruan një lidhje me vetë skedarin.
  2. Kontrolloni për të parë nëse keni arritur në fund të skedarit.
  3. Vazhdoni të lexoni skedarin derisa të arrini në fund, duke shtypur çdo rresht që lexoni.
  4. Mbyll skedarin.

Me këtë në mendje, unë do të shikoj çdo funksion skedari të përdorur këtu.

funksioni fopen

Funksioni fopen krijon një lidhje me një skedar. Unë them "krijon një lidhje" sepse, përveç hapjes së një skedari, fopen mund të hapë edhe një URL:

$fh = fopen ("http://127.0.0.1/", "r");

Kjo linjë programi krijon një lidhje me faqen e mësipërme dhe ju lejon të filloni ta lexoni atë si një skedar lokal.

Shënim: Opsioni "r" i përdorur në fopen tregon që skedari është i hapur vetëm për lexim. Meqenëse shkrimi në një skedar nuk përfshihet në fushën e çështjeve të diskutuara në këtë artikull, unë nuk do të rendis të gjitha vlerat e mundshme të parametrit. Megjithatë, ju duhet të ndryshoni "r" në "rb" nëse jeni duke lexuar nga binarët për pajtueshmërinë ndër-platformë. Më poshtë është një shembull i këtij lloji.

funksioni feof

Komanda feof përcakton nëse leximi ka arritur në fund të skedarit dhe kthen True ose False. Cikli i shfaqur në vazhdon deri në fund të skedarit "myfile". Vini re se feof gjithashtu kthen False nëse jeni duke lexuar një URL dhe koha e lidhjes përfundon sepse nuk ka më të dhëna për të lexuar.

Funksioni fclose

Le të kapërcejmë mesin e Listimit 1 dhe të shkojmë në fund; fclose bën të kundërtën e fopen: mbyll lidhjen me skedarin ose URL-në. Pas ekzekutimit të këtij funksioni, nuk do të mund të lexoni më nga skedari ose priza.

funksioni fgets

Duke u kthyer mbrapa disa rreshta në Listën 1, ju arrini në thelbin e procesit të përpunimit të skedarit: në fakt duke lexuar skedarin. Funksioni fgets është arma juaj e zgjedhur për shembullin e parë. Ai rrëmben një linjë të dhënash nga një skedar dhe e kthen atë si një varg. Nga atje mund t'i shfaqni të dhënat ose t'i përpunoni ato. Shembulli në Listimin 1 printon të gjithë skedarin.

Nëse vendosni të kufizoni madhësinë e pjesës së të dhënave me të cilën punoni, mund të shtoni një argument fgets për të kufizuar gjatësinë maksimale të vargut të të dhënave që kapet. Për shembull, përdorni kodin e mëposhtëm për të kufizuar gjatësinë e një rreshti në 80 karaktere:

$string = fgets($file_handle, 81);

Mendoni për "\0", treguesin e fundit të linjës në C dhe vendosni gjatësinë në një karakter më të gjatë se sa ju nevojitet në të vërtetë. Siç mund ta shihni, shembulli i mësipërm përdor 81, ndërsa ju nevojiten 80 karaktere. Bëjeni zakon të shtoni një karakter shtesë sa herë që keni nevojë të vendosni një kufi të gjatësisë së rreshtit për një funksion të caktuar.

funksion fread

Funksioni fgets është vetëm një nga shumë funksione të disponueshme për të lexuar një skedar. Ky është një nga funksionet më të përdorura, pasi përpunimi i një skedari rresht pas rreshti në shumicën e rasteve ka më shumë kuptim. Në fakt, disa veçori të tjera ofrojnë aftësi të ngjashme. Sido që të jetë, analiza rresht pas rreshti nuk është gjithmonë ajo që ju nevojitet.

Dhe këtu kemi akses në fread. Funksioni fread ka një qëllim paksa të ndryshëm nga fgets: ai synon të lexojë nga skedarë binare (d.m.th. skedarë që fillimisht nuk përbëhen nga tekst i lexueshëm nga njeriu). Meqenëse koncepti i "linjave" nuk është i rëndësishëm për skedarët binare (strukturat logjike të të dhënave zakonisht nuk ndahen në rreshta), duhet të specifikoni numrin e bajteve që do të lexohen.

$fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

Shembulli i mësipërm lexon 4096 bajt (4 KB) të dhëna. Vini re se, pavarësisht nga vlera që specifikoni, fread do të lexojë një maksimum prej 8192 byte (8 KB).

Duke supozuar se skedari nuk është më i madh se 8 KB, pjesa e programit më poshtë duhet të lexojë të gjithë skedarin në një rresht.

$fh = fopen("myfile", "rb"); $data = fread($fh, madhësia e skedarit ("myfile")); fclose ($fh);

Nëse madhësia e skedarit është më e madhe, do t'ju duhet të përdorni një lak për të lexuar pjesën tjetër të tij.

funksioni fscanf

Duke iu rikthyer përpunimit të vargjeve, fscanf është gjithashtu pasardhësi i funksionit tradicional të bibliotekës së skedarëve C. Nëse nuk jeni njohur me të, fscanf lexon fushat e të dhënave në variabla nga një skedar.

lista ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

Vargjet e formatit të përdorura në këtë funksion përshkruhen në shumë burime si PHP.net, kështu që nuk do ta përsëris këtë informacion këtu. Mjafton të thuhet se formatimi i vargut është shumë fleksibël. Gjithashtu duhet përmendur se të gjitha fushat vendosen në variablin e kthyer nga funksioni. (Në C, këto do të kalohen si argumente.)

funksioni fgetss

Funksioni fgetss është i ndryshëm nga funksionet tradicionale të manipulimit të skedarëve dhe ju jep një kuptim më të mirë të aftësive të PHP. Ai funksionon si fgets, por hedh poshtë çdo etiketë HTML ose PHP që zbulon, duke lënë vetëm tekstin e zhveshur. Le të marrim skedarin HTML më poshtë.

Listimi 2. Shembull skedar HTML
Titulli im

Nëse e kuptoni se çfarë do të thotë "Sause there isn't askush for to give you no pain", atëherë dëgjoni shumë nga grupi America

Le ta kalojmë atë përmes funksionit fgetss.

Listimi 3. Përdorimi i fgetss
$file_handle = fopen("myfile", "r"); ndërsa (!feof($file_handle)) (echo = fgetss($file_handle); ) fclose($file_handle);

Kjo është ajo që do të merrni si rezultat:

Titulli im Nëse e kupton se çfarë do të thotë "Sause there isn't askush for to give you no pain", atëherë dëgjon shumë nga grupi America

funksioni fpassthru

Pavarësisht se si i lexoni të dhënat nga një skedar, mund të printoni të dhënat e mbetura duke përdorur kanalin standard të daljes duke përdorur funksionin fpassthru.

fpassthru ($fh);

Ky funksion printon të dhënat në mënyrë që të mos keni nevojë t'i vendosni ato në një ndryshore.

Përpunimi jo-linear i skedarit: lëvizja nëpër një skedar

Natyrisht, funksionet e përshkruara më sipër ju lejojnë vetëm të lexoni nga një skedar në mënyrë sekuenciale. Skedarët më kompleksë mund të kërkojnë lëvizjen në pjesë të ndryshme të skedarit në fillim ose në fund të skedarit. Për ta bërë këtë ju nevojitet funksioni fseek.

fseek ($fh, 0);

Shembulli i mësipërm kthehet në fillim të skedarit. Nëse nuk doni të kaloni në fillimin e skedarit - le të themi, mjafton një kilobajt - thjesht shkruani:

fseek ($fh, 1024);

Që nga PHP V4.0, disa opsione të tjera janë gjithashtu të disponueshme. Për shembull, nëse ju duhet të lëvizni përpara 100 bajt nga pozicioni juaj aktual, mund të përdorni kodin e mëposhtëm:

fseek($fh, 100, SEEK_CUR);

Po kështu, zhvendosja 100 bajt mbrapa bëhet nga:

fseek($fh, -100, SEEK_CUR);

Nëse dëshironi të ktheheni në pozicionin 100 bajt përpara fundit të skedarit, përdorni SEEK_END në vend të kësaj.

fseek($fh, -100, SEEK_END);

Pasi të arrihet pozicioni i ri, mund të përdorni fgets, fscanf ose një funksion tjetër për të lexuar të dhënat.

Shënim: ju nuk mund të përdorni fseek në përshkruesit e skedarëve që i referohen një URL.

Kapni një skedar të tërë

Tani ne vazhdojmë të shohim disa nga aftësitë unike të përpunimit të skedarëve të PHP: përpunimi i blloqeve të mëdha të të dhënave në një ose dy rreshta. Për shembull, si mund të kapni një skedar dhe të shfaqni të gjithë përmbajtjen e tij në faqen tuaj të internetit? Epo, ju keni parë një shembull të përdorimit të një lak me fgets. Por si mund ta bëni më të lehtë? Procesi është pothuajse qesharak i lehtë duke përdorur fgetcontents, i cili e vendos të gjithë skedarin në një rresht.

$my_file = file_get_contents ("emri i skedarit"); echo $my_file;

Edhe pse ky nuk është alternativa më e mirë, mund ta shkruani këtë komandë edhe më të shkurtër:

echo file_get_contents ("emri i skedarit");

Ky artikull fokusohet kryesisht në përpunimin e skedarëve lokalë, megjithatë, vlen të përmendet se ju gjithashtu mund të kapni, shfaqni dhe analizoni faqet e tjera të internetit duke përdorur funksionet e përshkruara.

echo file_get_contents ("http://127.0.0.1/");

Kjo komandë është në të vërtetë e njëjtë si:

$fh = fopen ("http://127.0.0.1/", "r"); fpassthru ($fh);

Ju mund të shikoni këta shembuj dhe të mendoni: "Kjo është shumë punë." Zhvilluesit e PHP pajtohen me ju. Kështu që ju mund ta shkurtoni komandën e mësipërme në:

readfile ("http://127.0.0.1/");

Funksioni readfile nxjerr të gjithë përmbajtjen e një skedari ose faqe interneti në buferin e paracaktuar të daljes. Si parazgjedhje, kjo komandë shfaq një mesazh gabimi kur dështon. Për të shmangur këtë sjellje (nëse e dëshironi), provoni komandën:

@readfile ("http://127.0.0.1/");

Sigurisht, nëse keni nevojë të përpunoni përmbajtjen e skedarëve, atëherë rreshti i vetëm i kthyer nga file_get_contents është ndoshta shumë. Ju mund të dëshironi që së pari ta ndani atë në pjesë duke përdorur funksionin split().

$array = split("\n", file_get_contents ("myfile"));

Por pse ju nevojitet gjithë ky kompleksitet nëse ekziston një funksion krejtësisht i përshtatshëm që do ta bëjë punën për ju? Funksioni PHP file() e përmbush këtë detyrë në një hap: ai kthen një grup vargjesh, elementët e të cilit janë linjat e skedarit.

$array = skedar ("myfile");

Duhet të theksohet se ka një ndryshim të vogël midis dy shembujve të mësipërm. Komanda split heq linjat e reja, ndërsa komanda e skedarit përfundon linjat e vargjeve me vija të reja (siç bën fgets).

Megjithatë, aftësitë e PHP shkojnë përtej atyre të përshkruara më sipër. Ju mund të analizoni të gjithë skedarët .ini në stilin PHP me vetëm një komandë parse_ini_file. Komanda parse_ini_file zbatohet për skedarë të ngjashëm me ata të paraqitur në Listimin 4.

Listimi 4. Shembull skedar .ini
; Emri i komentit = kërkimi "King Arthur" = Për të kërkuar ngjyrën e preferuar të gralit të shenjtë = Blu Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Komandat e mëposhtme përfaqësojnë një skedar si një grup dhe më pas shtypin grupin:

$file_array = parse_ini_file ("holy_grail.ini"); print_r $skedar_array;

Rezultati do të jetë prodhimi i mëposhtëm:

Listimi 5. Prodhimi
Array ( => Mbreti Arthur => Të kërkosh Grailin e Shenjtë => Blu => Mark Twain => Whoopi Goldberg)

Sigurisht, mund të vëreni se kjo komandë ka bashkuar seksionet. Ky është veprimi i paracaktuar, por mund ta personalizoni lehtësisht duke përdorur argumentin e dytë të parse_ini_file: process_sections, i cili është një variabël Boolean. Cakto seksionet_procese në True.

$file_array = parse_ini_file("holy_grail.ini", true); print_r $skedar_array;

Dhe dalja juaj do të duket si kjo:

Listimi 6. Prodhimi
Array ( => Array ( => Mbreti Arthur => Për të kërkuar Graalin e Shenjtë => Blu) => Array ( => Mark Twain => Whoopi Goldberg))

PHP i vendos të dhënat në një grup shumëdimensional lehtësisht të analizueshëm.

Por kjo është vetëm maja e ajsbergut kur bëhet fjalë për përpunimin e skedarëve në PHP. Funksionet më komplekse si tidy_parse_file dhe xml_parse mund t'ju ndihmojnë të analizoni përkatësisht dokumentet HTML dhe XML. Referojuni seksionit për informacion më të detajuar se si funksionojnë këto funksione. Të dyja këto ia vlen të merren parasysh nëse do të punoni me këto lloje skedarësh, por në vend që të kaloni nëpër të gjitha llojet e skedarëve të mundshëm, mund të dëshironi të hidhni një vështrim më të afërt në përmbajtjen e këtij artikulli, i cili ka disa rregulla të mira të përgjithshme për duke punuar me funksionet që kam përshkruar deri më tani.

Stil i mirë programimi

Asnjëherë mos supozoni se gjithçka në programin tuaj do të funksionojë siç është menduar. Për shembull: çka nëse skedari që po kërkoni është zhvendosur? Po sikur një ndryshim i lejes të bën që të mos jeni në gjendje të lexoni përmbajtjen e një skedari? Ju mund të kontrolloni ekzistencën e një skedari dhe të drejtat për ta lexuar atë paraprakisht duke përdorur metodat file_exists dhe is_readable.

Listimi 7. Përdorimi i skedarit_ekziston dhe është i_lexueshëm
$filename = "myskedar"; nëse (skedari_ekziston ($filename) && është i_lexueshëm ($filename)) ($fh = fopen($filename, "r"); # Po përpunohet fclose($fh); )

Megjithatë, në praktikë kjo pjesë e programit ndoshta do të jetë e tepërt për detyrën tuaj. Trajtimi i vlerave të kthyera nga fopen është më i thjeshtë dhe më i saktë.

if ($fh = fopen($filename, "r")) ( # Përpunohet fclose($fh); )

Meqenëse fopen kthen False nëse dështon, kjo do të sigurojë që skedari do të përpunohet vetëm nëse skedari mund të hapet. Sigurisht, nëse skedari nuk ekziston ose është i palexueshëm, do të prisni që vlera e kthimit të jetë negative. Prandaj, një kontroll i tillë është një kurth në të cilin bien të gjitha problemet e mundshme. Përndryshe, mund të dilni nga programi ose të shfaqni një mesazh gabimi nëse skedari nuk mund të hapet.

Ashtu si fopen, funksionet file_get_contents, file dhe readfile kthejnë False nëse skedari nuk mund të hapet ose përpunohet. Funksionet fgets, fgetss, fread, fscanf dhe fclose gjithashtu kthejnë False nëse ndodh një gabim. Sigurisht, me përjashtim të fclose, ju ndoshta i keni përpunuar tashmë rezultatet që ata kthejnë. Sa i përket fclose, nuk mund të bëhet shumë nëse doreza e skedarit nuk mbyllet siç duhet, kështu që kontrollimi i vlerës së kthimit të fclose është përgjithësisht i tepërt.

Zgjedhja është e juaja

PHP nuk ka mungesë të mënyrave efikase për të lexuar dhe analizuar skedarët. Funksionet klasike si fread mund t'ju shërbejnë në mënyrë të besueshme shumicën e kohës, ose mund të tërhiqeni më shumë nga thjeshtësia e skedarit të leximit nëse kjo është ajo që ju nevojitet për të përfunduar punën. Zgjedhja varet vërtet nga ajo që po përpiqeni të arrini.

Nëse jeni duke përpunuar sasi të mëdha të dhënash, ka të ngjarë që fscanf ta gjeni më të dobishëm dhe efikas sesa, të themi, përdorimi i skedarit në kombinim me komandat pasuese të ndarjes dhe sprintf. Nëse thjesht po shfaqni një sasi të madhe teksti me ndryshime të vogla, megjithatë, përdorimi i funksioneve të skedarit , file_get_contents ose readfile mund të ketë më shumë kuptim. Kjo zgjidhje ndoshta do të jetë e saktë kur përdorni PHP për caching apo edhe krijimin e një serveri proxy të përkohshëm.

PHP ofron shumë mjete për të punuar me skedarë. Njihuni më mirë me secilën prej tyre dhe zbuloni se cilat mjete janë më të mira për projektin në të cilin po punoni. Ju ofrohet një përzgjedhje e gjerë e mjeteve softuerike, përdorni ato në mënyrë më efektive dhe argëtohuni duke përpunuar skedarët tuaj duke përdorur PHP.

Para se të përpiqeni të punoni me një skedar, këshillohet të siguroheni që ai ekziston. Për të zgjidhur këtë problem, zakonisht përdoren dy funksione:

file_exists() dhe is_file().

Funksioni file_exists() kontrollon nëse ekziston një skedar i caktuar. Nëse skedari ekziston, funksioni kthen TRUE, përndryshe kthen FALSE. Sintaksa e funksionit file_exists() është:

skedari bool_ekziston (skedari i vargut)

Një shembull i kontrollit të ekzistencës së një skedari:

nëse (!file_exists($filename)):

printoni "File $filename nuk ekziston!";

is_file ()

Funksioni is_file() kontrollon ekzistencën e një skedari të caktuar dhe nëse ai mund të lexohet/shkruhet. Në thelb, is_file() është një version më i fuqishëm i file_exists() që kontrollon jo vetëm nëse ekziston një skedar, por edhe nëse ai mund të lexojë dhe shkruajë të dhëna:

bool is_file (skedari i vargut)

Shembulli i mëposhtëm tregon se si të verifikoni nëse ekziston një skedar dhe se operacionet mund të kryhen në të:

$file = "somefile.txt";

nëse (is_file ($file)):

print "Skedari $file është i vlefshëm dhe ekziston!";

print "Skedari $file nuk ekziston ose nuk është një skedar i vlefshëm!";

Pasi të siguroheni që skedari i dëshiruar ekziston dhe se me të mund të kryhen operacione të ndryshme leximi/shkrimi, mund të vazhdoni në hapin tjetër - hapjen e skedarit.

Funksioni filesize() kthen madhësinë (në bajt) të skedarit me emrin e dhënë, ose FALSE në gabim. Sintaksa e funksionit Filesize():

madhësia e skedarit int (emri i skedarit të vargut)

Le të themi se dëshironi të përcaktoni madhësinë e skedarit pastry.txt. Për të marrë informacionin e nevojshëm, mund të përdorni funksionin file size():

$fs = madhësia e skedarit ("pastry.txt"); printoni "Pastry.txt është $fs bytes.";

Shfaqet rezultati i mëposhtëm:

Pastry.txt është 179 bajt.

Përpara se të kryeni veprime në një skedar, duhet ta hapni atë dhe ta lidhni me një mbajtës skedari, dhe pasi të keni mbaruar punën me skedarin, duhet ta mbyllni atë. Këto tema trajtohen në seksionin vijues.

Hapja dhe mbyllja e skedarëve

Përpara se të kryeni I/O në një skedar, duhet ta hapni atë duke përdorur fopen().

Funksioni fopen() hap një skedar (nëse ekziston) dhe kthen një numër të plotë -- të thirrur manipulues skedarësh(doreza e skedarit). Sintaksa e funksionit fopen():

int fopen (skedari i vargut, modaliteti i vargut [, int enable_path])

Skedari që hapet mund të jetë në sistemin e skedarëve lokal, të ekzistojë si një rrjedhë standarde hyrëse/dalëse ose të përfaqësojë një skedar në një sistem të largët të pranuar nëpërmjet HTTP ose FTP.

Parametri i skedarit mund të specifikohet në disa forma, të renditura më poshtë:

Nëse parametri përmban emrin e një skedari lokal, fopen() e hap atë skedar dhe kthen një dorezë.

Nëse parametri specifikohet si php://stdin, php://stdout ose php://stderr, hapet rrjedha standarde përkatëse hyrëse/dalëse.

Nëse parametri fillon me prefiksin http://, funksioni hap një lidhje HTTP me serverin dhe kthen një dorezë për skedarin e specifikuar.

Nëse parametri fillon me prefiksin ftp://, funksioni hap një lidhje FTP me serverin dhe kthen një dorezë për skedarin e specifikuar. Ka dy gjëra për t'u kushtuar vëmendje të veçantë në këtë rast: Nëse serveri nuk mbështet modalitetin pasiv FTP, thirrja fopen() do të dështojë. Për më tepër, skedarët FTP hapen ose për lexim ose shkrim.

Kur funksionon në modalitetin pasiv, serveri YAR pret për lidhje nga klientët. Kur vepron në modalitetin aktiv, vetë serveri krijon një lidhje me klientin. Parazgjedhja është zakonisht modaliteti aktiv.

Parametri i modalitetit përcakton aftësinë për të lexuar dhe shkruar në skedar. Në tabelë 7.1 liston disa vlera që përcaktojnë mënyrën e hapjes së skedarit.

Tabela 7.1. Mënyrat e hapjes së skedarëve

Modaliteti Përshkrim
Vetëm lexim. Treguesi i pozicionit aktual është vendosur në fillim të skedarit
r+ Lexoni dhe shkruani. Treguesi i pozicionit aktual është vendosur në fillim të skedarit
w Vetëm regjistrim. Treguesi i pozicionit aktual vendoset në fillim të skedarit dhe e gjithë përmbajtja e skedarit shkatërrohet. Nëse skedari nuk ekziston, funksioni përpiqet ta krijojë atë
w+ Lexoni dhe shkruani. Treguesi i pozicionit aktual vendoset në fillim të skedarit dhe e gjithë përmbajtja e skedarit shkatërrohet. Nëse skedari nuk ekziston, funksioni përpiqet ta krijojë atë
a Vetëm regjistrim. Treguesi i pozicionit aktual vendoset në fund të skedarit. Nëse skedari nuk ekziston, funksioni përpiqet ta krijojë atë
a+ Lexoni dhe shkruani. Treguesi i pozicionit aktual vendoset në fund të skedarit. Nëse skedari nuk ekziston, funksioni përpiqet ta krijojë atë

Nëse parametri i tretë opsional include_path është 1, atëherë shtegu i skedarit është në lidhje me direktorinë e përfshirjes të specifikuar në skedarin php.ini (shih Kapitullin 1).

Më poshtë është një shembull i hapjes së një skedari duke përdorur funksionin fopen(). Thirrja die(), e përdorur në kombinim me fopen(), jep një mesazh gabimi nëse skedari nuk mund të hapet:

$file = "userdata.txt"; // Disa skedarë

$fh = fopen($file, "a+") ose die("Skedari ($file) nuk ekziston!");

Fragmenti i mëposhtëm hap një lidhje me sitin PHP (http://www.php.net):

$site = "http://www.php.net": // Server i aksesueshëm nëpërmjet HTTP

$sh = fopen($site., "r"); //Lidhni manipuluesin me faqen e indeksit Php.net

Pas përfundimit të punës, skedari duhet të mbyllet gjithmonë duke përdorur fclose().

Funksioni fclose() mbyll një skedar me manipuluesin e dhënë. Nëse mbyllja është e suksesshme, TRUE kthehet; nëse mbyllja është e pasuksesshme, FALSE kthehet. Sintaksa e funksionit fclose():

int fclose (manipulator int)

Funksioni fclose() mbyll me sukses vetëm ato skedarë që janë hapur më parë nga funksionet fopen() ose fsockopen(). Shembull i mbylljes së një skedari:

$file = "userdata.txt";

nëse (skedari_ekziston ($file)):

$fh = fopen($file, "r");

// Kryen operacionet e skedarëve

printoni "File Sfile nuk ekziston!";

Shkruani në dosje

Ekzistojnë dy operacione kryesore që kryhen në skedarë të hapur: leximi dhe shkrimi.

Funksioni is_writeable() verifikon që një skedar ekziston dhe mund të shkruhet. Shkrueshmëria kontrollohet si për skedarin ashtu edhe për direktorinë. Sintaksa e funksionit is_writeable() është:

bool is_writeable (skedar string)

Një gjë e rëndësishme për t'u theksuar është se PHP ka shumë të ngjarë të funksionojë nën ID-në e përdoruesit të përdorur nga serveri në internet (zakonisht "askush"). Një shembull i përdorimit të is_writeable() është dhënë në përshkrimin e funksionit fwrite().

Funksioni fwrite() shkruan përmbajtjen e një variabli të vargut në skedarin e specifikuar nga mbajtësi i skedarit. Sintaksa e funksionit fwrite():

int fwrite (manipulator int, variabli i vargut [, gjatësia int])

Nëse kalohet parametri i gjatësisë opsionale gjatë thirrjes së funksionit, shkrimi ndalon ose pas shkrimit të numrit të specifikuar të karaktereve ose kur arrihet fundi i rreshtit. Kontrollimi nëse mund të shkruhet një skedar tregohet në shembullin e mëposhtëm:

// Informacion rreth trafikut në faqen e përdoruesit

$data = "08:13:00|12:37:12|208.247.106.187|Win98";

$filename = "somefile.txt";

// Nëse skedari ekziston dhe mund të shkruhet në të

if (is_writeable ($filename)):

$fh = fopen($filename, "a+");

// Shkruani përmbajtjen e $data në një skedar

$ sukses - fwrite($fh, $data);

// Mbyll skedarin

fclose ($fh); tjetër:

printoni "Nuk mund të hapej emri i skedarit për shkrim";

Funksioni fputs() është një pseudonim për fwrite() dhe mund të përdoret kudo ku përdoret fwrite().

Funksioni fputs() është një pseudonim i fwrite() dhe ka saktësisht të njëjtën sintaksë. Sintaksa e funksionit fputs():

int fputs (manipulator int, variabli i vargut [, gjatësia int])

Personalisht preferoj të përdor fputs(). Duhet mbajtur mend se kjo është vetëm një çështje stili dhe nuk ka të bëjë me ndonjë ndryshim midis dy funksioneve.

Leximi nga një skedar

Pa dyshim, leximi është operacioni më i rëndësishëm që kryhet në skedarë. Më poshtë janë disa veçori që e bëjnë leximin nga një skedar më efikas. Sintaksa e këtyre funksioneve pothuajse saktësisht kopjon sintaksën e funksioneve të ngjashme të regjistrimit.

Funksioni i s_readable() ju lejon të verifikoni nëse skedari ekziston dhe është i lexueshëm. Lexueshmëria kontrollohet si për skedarin ashtu edhe për direktorinë. Sintaksa e funksionit is_readable() është:

boo! është_i lexueshëm (skedari i vargut)

Me shumë mundësi, PHP do të funksionojë nën ID-në e përdoruesit të përdorur nga serveri në internet (zakonisht "askush"), kështu që që funksioni is_readable() të kthehet TRUE, skedari duhet të lejohet të lexohet nga të gjithë. Shembulli i mëposhtëm tregon se si të verifikoni nëse një skedar ekziston dhe është i lexueshëm:

if (is_readable ($filename)):

// Hapni skedarin dhe vendosni treguesin e pozicionit aktual në fund të skedarit

$fh = fopen($emri i skedarit, "r");

printoni "$filename nuk është i lexueshëm!";

Funksioni fread() lexon numrin e caktuar të bajteve nga një skedar i specifikuar nga manipuluesi i skedarëve. Sintaksa e funksionit fwrite():

int fread (manipulator int, gjatësi int)

Manipuluesi duhet t'i referohet një skedari të hapur që është i lexueshëm (shih përshkrimin e funksionit is_readable()). Leximi ndalon pasi të jetë lexuar një numër i caktuar bajtësh ose kur të arrihet fundi i skedarit. Merrni parasysh skedarin e tekstit pastry.txt të paraqitur në Listimin 7.1. Leximi dhe nxjerrja e këtij skedari në shfletues kryhet nga fragmenti i mëposhtëm:

$fh = fopen("pastry.txt", "r") ose die("Nuk mund ta hap skedarin!");

$file = fread($fh, madhësia e skedarit($fh));

Duke përdorur funksionin fllesize() për të përcaktuar madhësinë e pastry.txt në bajt, ju siguroheni që funksioni fread() të lexojë të gjithë përmbajtjen e skedarit.

Listimi 7.1. Skedari i tekstit pastry.txt

Receta: Brumë pastiçerie

1 1/4 filxhan miell për të gjitha përdorimet

3/4 shkop (6 lugë gjelle) gjalpë pa kripë, të copëtuar

2 lugë gjelle shkurtues perimesh 1/4 lugë çaji kripë

3 lugë ujë

Funksioni fgetc() kthen një varg që përmban një karakter nga skedari në pozicionin aktual të treguesit, ose FALSE kur arrihet fundi i skedarit. Sintaksa e funksionit fgetc():

vargu fgetc (manipulator int)

Manipuluesi duhet t'i referohet një skedari të hapur që është i lexueshëm (shih përshkrimin e funksionit is_readable() më herët në këtë kapitull). Shembulli i mëposhtëm demonstron leximin karakter pas karakteri dhe daljen e një skedari duke përdorur funksionin fgetc():

$fh = fopen("pastry.txt", "r"); ndërsa (!feof($fh)):

$char = fgetc($fh):

print $char; endwhile;

Funksioni fgets() kthen një varg të lexuar nga pozicioni aktual i treguesit në skedarin e specifikuar nga mbajtësi i skedarit. Treguesi i skedarit duhet të tregojë një skedar të hapur që është i lexueshëm (shih përshkrimin e funksionit is_readable() më herët në këtë kapitull). Sintaksa e funksionit fgets():

varg fgets (manipulator int, gjatësi int)

Leximi ndalon kur plotësohet një nga kushtet e mëposhtme:

  • lexim nga gjatësia e skedarit -- 1 bajt;
  • një karakter i linjës së re u lexua nga skedari (i përfshirë në vargun e kthyer);
  • Flamuri i fundit i skedarit (EOF) është lexuar nga skedari.

Nëse dëshironi të organizoni leximin rresht pas rreshti të një skedari, kaloni në parametrin e dytë një vlerë që është dukshëm më e madhe se numri i bajteve në rresht. Shembull i leximit rresht pas rreshti dhe daljes së një skedari:

$fh = fopen("pastry.txt", "r");

ndërsa (!feof($fh));

$line = fgets ($fh, 4096);

print $line. "
";

Funksioni fgetss () është plotësisht i ngjashëm me fgets () me një përjashtim - ai përpiqet të heqë të gjitha etiketat HTML dhe PHP nga teksti i lexuar:

vargu fgetss (manipulator Int, gjatësia int [, vargu i lejuar_etiketat])

Përpara se të kaloni te shembujt, rishikoni përmbajtjen e Listimit 7.2—ky skedar përdoret në Listimet 7.3 dhe 7.4.

Listimi 7.2. Shkenca e skedarëve.html

Lajmet e fundit - Shkencë

Zbulohet forma e jetës së huaj


20 gusht 2000

Herët këtë mëngjes, një formë e re e çuditshme e kërpudhave u gjet duke u rritur në dollapin e frigoriferit të vjetër të apartamentit të W. J. Gilmore. Nuk dihet nëse rrezatimi i fuqishëm që buron nga monitori i kompjuterit të qiramarrësit ka ndihmuar në këtë evolucion.

Listimi 7.3. Heqja e etiketave nga një skedar HTML përpara se të shfaqen në shfletues

$fh = fopen("shkencë.html", "r");

ndërsa (!feof($fh)):

print fgetss ($fh, 2048);

Rezultati tregohet më poshtë. Siç mund ta shihni, të gjitha etiketat HTML janë hequr nga skedari science.html, duke shkaktuar humbjen e formatimit:

Në disa situata, të gjitha, përveç disa etiketave hiqen nga një skedar - për shembull, etiketat e ndërprerjes së linjës
. Lista 7.4 tregon se si bëhet kjo.

Listimi 7.4. Heqja në mënyrë selektive e etiketave nga një skedar HTML

$fh = fopenC"science.html", "r");

$e lejueshme = "
";

ndërsa (!feof($fh)):

print fgetss ($fh. 2048, $lejueshme);

Rezultati:

Lajmet e fundit - Shkenca Alien u zbulua më 20 gusht. 2000 Herët këtë mëngjes, një formë e re e çuditshme e kërpudhave u gjet duke u rritur në dollapin e frigoriferit të vjetër të apartamentit të W. J. Gilmore. Nuk dihet nëse rrezatimi i fuqishëm që buronte nga monitori i kompjuterit të qiramarrësit ndihmoi në këtë evolucioni.

Siç mund ta shihni, funksioni fgetss() e bën të lehtë konvertimin e skedarëve, veçanërisht kur keni një numër të madh skedarësh HTML të formatuar në mënyrë të ngjashme.

Leximi i një skedari në një grup

Funksioni file() ngarkon të gjithë përmbajtjen e një skedari në një grup të indeksueshëm. Çdo element i grupit korrespondon me një rresht të skedarit. Sintaksa e funksionit File():

skedar grupi (skedari i vargut [, int include_path])

Nëse parametri i tretë opsional include_path është 1, atëherë shtegu i skedarit është në lidhje me direktorinë e përfshirjes të specifikuar në skedarin php.ini (shih Kapitullin 1). Listimi 7.5 përdor funksionin file() për të ngarkuar skedarin pastry.txt (shih Listimin 7.1).

$file_array = skedar ("pastry.txt");

ndërsa (lista ($line_num. $line) = secilit ($array_file)):

print" Rreshti $line_num:", htmlspecialchars($line), "
\n"

Çdo rresht i grupit shtypet së bashku me një numër:

Rreshti 0: Receta: Brumë pastiçerie

Rreshti 1: 1 1/4 filxhan miell për të gjitha përdorimet

Rreshti 2: 3/4 shkop (6 lugë gjelle) gjalpë pa kripë, të copëtuar

Rreshti 3: 2 lugë gjelle shkurtues perimesh

Rreshti 4: 1/4 lugë çaji kripë

Rreshti 5: 3 lugë gjelle ujë

Ridrejtimi i një skedari në dalje standarde

Funksioni readfile() lexon përmbajtjen e një skedari dhe e shkruan atë në dalje standarde (në shumicën e rasteve, në shfletues). Sintaksa e funksionit readfile():

int readfile (skedari i vargut [, int include_path])

Funksioni kthen numrin e bajteve të lexuara. Skedari mund të qëndrojë në sistemin lokal të skedarëve, të ekzistojë si hyrje/dalje standarde ose të përfaqësojë skedarin në një sistem të largët të pranuar nëpërmjet HTTP ose FTP. Parametri i skedarit vendoset sipas të njëjtave rregulla si në funksionin fopen().

Le të themi se keni një skedar latore.txt, përmbajtja e të cilit dëshironi të shfaqni në shfletues:

Restorant "La Torre". e vendosur në Nettuno, Itali, ofron një përzierje eklektike të stilit. histori, dhe kuzhinë të mirë të detit. Brenda mureve të borgos mesjetare që rrethon qytetin, mund të darkosh duke parë kalimtarët të blejnë në butikët e fshatit. Komoditeti i shoqëruar vetëm me udhëtimet më të freskëta të detit e bëjnë La Torre një nga restorantet më të mirë të Italisë.

Kur ekzekutohet fragmenti i mëposhtëm, e gjithë përmbajtja e latorre.txt dërgohet në dalje standarde:

$restaurant_file = "latorre.txt";

// Dërgo të gjithë skedarin në dalje standarde

readfile($restaurant_file);

Hapja e një mbajtësi të skedarit të procesit

Së bashku me skedarët e rregullt, ju mund të hapni manipulues skedarësh për të bashkëvepruar me proceset në server. Problemi zgjidhet nga funksioni popen(), i cili ka sintaksën e mëposhtme:

int popen (komandë vargu, modaliteti i vargut)

Parametri i komandës specifikon komandën e sistemit që do të ekzekutohet, dhe parametri i modalitetit përshkruan mënyrën e hyrjes:

// Hapni skedarin "spices.txt" për shkrim

$fh = fopen("spices.txt","w");

// Shtoni disa rreshta teksti

fputs($fh, "Majdanoz, sherebelë, rozmarinë\n");

fputs($fh, "Paprika, kripë, piper\n");

fputs($fh, "Basil, sherebel, xhenxhefil\n");

// Mbyllni manipulatorin

// Hap një proces grep UNIX për të kërkuar fjalën Basil në skedarin spices.txt

$fh - popen("grep Basil< spices.txt", "r");

// Shtypni rezultatin e grep

Rezultati duket si ky:

Borziloku, sherebela, xhenxhefili

Funksioni fpassthru() është i ngjashëm me funksionin passthru() të diskutuar në seksionin “Running External Programs” të këtij kapitulli.

Pas përfundimit të të gjitha operacioneve, skedari ose procesi duhet të mbyllet. Funksioni pclose() mbyll lidhjen me procesin e specifikuar nga manipuluesi, ngjashëm me mënyrën se si funksioni fclose() mbyll një skedar të hapur nga funksioni fopen(). Sintaksa e funksionit pclose():

int pclose (int manipulator)

Në parametrin manipulues transmetohet manipuluesi i marrë më herët me një thirrje të suksesshme në popen().

Hapja e një lidhjeje prizë

PHP nuk kufizohet vetëm në ndërveprimin me skedarët dhe proceset - ju gjithashtu mund të bëni lidhje nëpërmjet prizave. Prizë Një prizë është një abstraksion softuerësh që ju lejon të komunikoni me shërbime të ndryshme në një kompjuter tjetër.

Funksioni fsockopen() krijon një lidhje socket me një server në internet

nëpërmjet protokollit TCP ose UDP. Sintaksa e funksionit fsockopen():

int fsockopen (nyja e vargut, porta int [, kodi_gabimi int [, teksti_gabim i vargut [, koha e kaluar]]])

Parametrat opsional error_code dhe error_text përmbajnë informacion që do të shfaqet nëse lidhja me serverin dështon. Të dy parametrat duhet të kalohen me referencë. Parametri i tretë opsional, timeout, specifikon kohëzgjatjen e pritjes për një përgjigje nga serveri (në sekonda). Lista 7.6 demonstron përdorimin e funksionit fsockopen() për të marrë informacionin e serverit. Megjithatë, përpara se të shikoni Listimin 7.6, ekziston një funksion tjetër me të cilin duhet të njiheni: socket_set_blocking().

UDP (User Datagram Protocol) është një protokoll komunikimi pa lidhje.

socket_set_blocking()

Funksioni socket_set_b1ocki ng() ju lejon të vendosni kontrollin e afatit për operacionet e serverit:

socket_set_blocking (manipulator int, modaliteti boolean)

Parametri i manipuluesit specifikon prizën e hapur më parë dhe parametri i modalitetit zgjedh modalitetin në të cilin kalohet priza (TRUE për modalitetin e bllokimit, FALSE për modalitetin jobllokues). Një shembull i përdorimit të funksioneve fsockopen() dhe socket_set_blocking() është paraqitur në Listimin 7.6.

Listimi 7.6. Përdorimi i fsockopen() për të marrë informacionin e serverit

funksioni getthehost($host.$path) (

// Hap lidhjen me nyjen

$fp - fsockopen($host, 80, &$errno, &$errstr, 30);

// Shkoni në modalitetin e bllokimit

socket_set_blocking ($fp, 1),

// Dërgo titujt

fputs($fp,"MERRNI $shtegun HTTP/1.1\r\n");

fputs($fp, "Host: $host\r\n\r\n"); $x = 1;

// Merrni titujt

ndërsa ($x< 10) :

$headers = fgets ($fp, 4096);

// Mbyllni manipulatorin

getthehost ("www. apress.com", "/");

Lista e ekzekutimit 7.6 prodhon rezultatin e mëposhtëm:

Serveri HTTP/1.1 200 OK: Microsoft-IIS/4.0 Vendndodhja e përmbajtjes:

2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Përmbajtja-Gjatësia: 1311

Funksioni pfsockopen() është një version i qëndrueshëm i fsockopen(). Kjo do të thotë që lidhja nuk do të mbyllet automatikisht kur përfundon skripti në të cilin është thirrur funksioni. Sintaksa e funksionit pfsockopen() është:

int pfsockopen (nyja e vargut, porta int [, kodi_gabimi int [, teksti_gabim i vargut [, koha e kaluar]]])

Në varësi të qëllimeve specifike të aplikacionit tuaj, mund ta gjeni më të përshtatshëm të përdorni pfsockopen() në vend të fsockopen().

Nisja e programeve të jashtme

Skriptet PHP gjithashtu mund të ekzekutojnë programe të vendosura në server. Kjo veçori përdoret veçanërisht shpesh kur administrohet sistemi nëpërmjet një shfletuesi uebi, si dhe për marrjen më të përshtatshme të informacionit përmbledhës rreth sistemit.

Funksioni exec() drejton një program të caktuar dhe kthen rreshtin e fundit të daljes së tij. Sintaksa e funksionit exec():

string exec (komandë string [, varg vargjesh [, int kthim]])

Ju lutemi vini re se funksioni exec() ekzekuton vetëm komandën dhe nuk i printon rezultatet e tij. Të gjitha rezultatet e komandës mund të ruhen në një parametër opsional të grupit. Përveç kësaj, nëse një variabël kthyese specifikohet gjithashtu kur specifikohet parametri i grupit, këtij të fundit i caktohet kodi i kthimit të komandës së ekzekutuar.

Lista 7.7 tregon se si të përdoret funksioni exec() për të ekzekutuar funksionin e sistemit ping UNIX.

Listimi 7.7. Kontrollimi i lidhjes me serverin duke përdorur funksionin exec().

exec("ping -nga 5 www.php.net", $ping);

// Në Windows - exec("ping -n 5 www.php.net. $ping);

për ($i=0; $i< count($ping);$i++) :

print"
$ping[$i]";

Rezultati:

PING www.php.net (208.247.106.187): 56 bajt të dhënash

64 bajt nga 208.247.106.187: icmp_seq=0 ttl=243 kohë=66.602 ms

64 bajt nga 208.247.106.187: icmp_seq=1 ttl=243 kohë=55.723 ms

64 bajt nga 208.247.106.187: icmp_seq=2 ttl=243 kohë=70.779 ms

64 bajt nga 208.247.106.187: icmp_seq=3 ttl=243 kohë=55.339 ms

64 bajt nga 208.247.106.187: icmp_seq=4 ttl=243 kohë=69.865 ms

www.php.net statistikat e ping --

5 pako të transmetuara. 5 pako të pranuara. Humbje 0% e paketës

vajtje-ardhje min/avg/max/stddev - 55.339/63.662/70.779/6.783 ms

Apostrofat e pasme

Ekziston një mënyrë tjetër për të ekzekutuar komandat e sistemit që nuk kërkon funksione thirrëse - komanda që ekzekutohet është e mbyllur në prapavijë (``), dhe rezultatet e funksionimit të saj shfaqen në shfletues. Shembull:

print"

$output
";

Ky fragment shfaq përmbajtjen e drejtorisë ku ndodhet skripti në shfletues.

Parametri i brendshëm ping -c 5 (-p 5 në Windows) specifikon numrin e sondazheve të serverit.

Nëse thjesht dëshironi të ktheni rezultatet e paformatuara të një komande, përdorni funksionin passthru() të përshkruar më poshtë.

Funksioni passthru () funksionon pothuajse njësoj si exec (), me një përjashtim - ai printon automatikisht rezultatet e komandës. Sintaksa e funksionit Passthru():

void passthru (komandë string [, int return])

Nëse kalohet një parametër opsional i kthimit kur thirret passthru(), kjo variabël vendoset në kodin e kthimit të komandës së ekzekutuar.

escapeshellcmd()

Funksioni escapeshellcmd() i shpëton çdo karakteri potencialisht të rrezikshëm që mund të futet nga përdoruesi (për shembull, në një formë HTML) për të ekzekutuar komandat exec(), passthru(), system(), ose popen(). Sintaksë:

string escapeshellcmd (komandë vargu)

Hyrja e përdoruesit duhet të trajtohet gjithmonë me kujdes, por edhe kështu, përdoruesit mund të futin komanda që do të ekzekutohen nga funksionet e komandës së sistemit. Merrni parasysh fragmentin e mëposhtëm:

$user_input = `rm -rf *`; // Fshi direktoriumin prind dhe të gjitha nëndrejtoritë e tij

exec ($user_input); // Ekzekutoni $user_input !!!

Nëse nuk merren masa paraprake, një urdhër i tillë do të çojë në katastrofë. Sidoqoftë, mund të përdorni funksionet escapeshellcmd() për t'i shpëtuar hyrjes së përdoruesit:

$user_input = `rm - rf *`; // Fshi direktoriumin prind dhe të gjitha nëndrejtoritë e tij

ex(escapeshellcmd($user_input)); // Shpëtoni personazhet e rrezikshëm

Funksioni escapeshellcmd() i shpëton karakterit *, duke parandaluar që komanda të ketë pasoja katastrofike.

Siguria është një nga aspektet më të rëndësishme të programimit të Uebit, kështu që i kushtova një kapitull të tërë kësaj teme dhe si lidhet me programimin PHP. Shihni Kapitullin 16 për më shumë informacion.

Puna me sistemin e skedarëve

PHP ka funksione për shikimin dhe kryerjen e operacioneve të ndryshme në skedarë në server. Informacioni rreth atributeve të skedarit të serverit (vendndodhja, pronari dhe privilegjet) është shpesh i dobishëm.

Funksioni basename() nxjerr emrin e skedarit nga emri i plotë i kaluar. Sintaksa e funksionit Basename():

emri bazë i vargut (emri i plotë i vargut)

Nxjerrja e emrit të skedarit bazë nga emri i plotë bëhet si më poshtë:

$rruga = "/usr/local/phppower/htdocs/index.php"; $file = emri bazë ($rruga); // $file = "index.php"

Në fakt, ky funksion heq shtegun nga emri i plotë dhe lë vetëm emrin e skedarit.

Funksioni getlastmod() kthen datën dhe kohën e modifikimit të fundit të faqes nga e cila thirret funksioni. Sintaksa e funksionit getlastmod():

int getlastmod (i pavlefshëm)

Vlera e kthyer ndjek formatin e datës/kohës UNIX dhe ju mund të përdorni funksionin data() për ta formatuar atë. Pjesa e mëposhtme tregon datën kur faqja është modifikuar për herë të fundit:

echo "Modifikimi i fundit: ".date("H:i:s a". getlastmod());

Funksioni stat() kthen një grup të indeksueshëm me informacion të detajuar rreth skedarit me emrin e dhënë:

array stat (emri i skedarit të vargut)

Informacioni i mëposhtëm kthehet në elementet e grupit:

0 Pajisja

2 Mënyra e mbrojtjes së nyjeve të indeksit

3 Numri i lidhjeve

4 ID e përdoruesit të pronarit

5 ID e grupit të pronarëve

6 Lloji i pajisjes së nyjës së indeksit

7 Madhësia në bajt

8 Koha e telefonatës së fundit

9 Koha e modifikimit të fundit

10 Koha e fundit e modifikuar

11 Blloko madhësinë për sistemin e skedarëve I/O

12 Numri i blloqeve të alokuara

Kështu, nëse doni të dini herën e fundit që është aksesuar një skedar, shikoni elementin 8 të grupit të kthyer. Le të shohim një shembull:

$file - "datafile.txt";

listë($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime,

$bsize) = stat ($file);

printoni "$file është $size bytes.
";

print "Koha e fundit e hyrjes: $atime
";

printoni "Koha e fundit e modifikimit: $mtime
";

Rezultati:

popen.php është 289 bajt.

Koha e fundit e hyrjes: 15 gusht 2000 ora 12:00:00

Koha e fundit e modifikimit: 15 gusht 2000 10:07:18

Në këtë shembull, unë përdora konstruktin list() për të caktuar emra për secilën vlerë të kthyer. Sigurisht, po aq lehtë mund të ktheni një grup, të kaloni nëpër elementë dhe të shfaqni të gjithë informacionin e nevojshëm. Siç mund ta shihni, funksioni stat() ju lejon të merrni informacione të ndryshme të dobishme për një skedar.

Shfaqja dhe ndryshimi i karakteristikave të skedarit

Çdo skedar në sistemet e familjes UNIX ka tre karakteristika të rëndësishme:

  • që i përkasin një grupi;
  • pronar;
  • lejet.

Të gjitha këto karakteristika mund të ndryshohen duke përdorur funksionet e duhura PHP. Veçoritë e përshkruara në këtë seksion nuk funksionojnë në sistemet e familjes Windows.

Nëse nuk keni përvojë me sistemet operative UNIX, informacioni rreth karakteristikave të sistemit të skedarëve UNIX mund të gjendet në http://sunsite.auc.dk/linux-newbie/FAQ2.htm. Temat e anëtarësimit në grup, pronësia dhe lejet diskutohen në seksionin 3.2.6.

Funksioni chgrp() përpiqet të ndryshojë grupin të cilit i përket një skedar i caktuar. Sintaksa e funksionit chgrp():

int chgrp (emri i skedarit të vargut, grupi i përzier)

Funksioni filegroup() kthen ID-në e grupit të pronarit të skedarit me emrin e dhënë, ose FALSE në gabim. Sintaksa e funksionit Filegroup():

grup skedari int (emri i skedarit të vargut)

Funksioni chmod() ndryshon të drejtat e një skedari me emrin e dhënë. Sintaksa e funksionit chmod():

int chmod (emri i skedarit të vargut, lejet int)

Lejet janë të specifikuara në shënimin oktal. Specifikat e vendosjes së një parametri në funksionin chmod() tregohen në shembullin e mëposhtëm:

chmod("data_file.txt", g+r); // Nuk funksionon

chmod ("data_file.txt", 766); // Nuk punon

chmod ("data_file.txt", 0766); // Punon

Funksioni fileperms() kthen të drejtat e skedarit me emrin e dhënë, ose FALSE në gabim. Sintaksa e funksionit Fileperms():

int fileperms (emri i skedarit të vargut)

Funksioni chown() përpiqet të ndryshojë pronarin e një skedari. E drejta për të ndryshuar pronarin e një skedari është e kufizuar tek përdoruesi i privilegjuar. Sintaksa e funksionit chown():

int chown (emri i skedarit të vargut, përdorues i përzier)

Funksioni fileowner() kthen ID-në e përdoruesit për pronarin e skedarit me emrin e dhënë. Sintaksa e funksionit Fileowner():

pronari i skedarit int (emri i skedarit të vargut)

Kopjimi dhe riemërtimi i skedarëve

Funksione të tjera të dobishme të sistemit që mund të kryhen në skriptet PHP përfshijnë kopjimin dhe riemërtimin e skedarëve në server. Këto operacione kryhen nga dy funksione: copy() dhe rename().

Kopjimi i një skedari në një skript PHP nuk është më i vështirë sesa përdorimi i komandës UNIX cf. Problemi zgjidhet nga funksioni PHP copy(). Sintaksa e funksionit soru() është:

kopje int (burimi i vargut, destinacioni i vargut)

Funksioni copy() përpiqet të kopjojë skedarin burim në skedarin e destinacionit; kthen E VËRTETË në sukses, FALSE në dështim. Nëse skedari i destinacionit nuk ekziston, funksioni copy() e krijon atë. Shembulli i mëposhtëm tregon se si të krijoni një kopje rezervë të një skedari duke përdorur funksionin copy():

$data_file = "data.txt";

copy($data_file. $data_file".bak") ose die("Nuk mund të kopjohet $data_file");

Funksioni rename() riemëron një skedar. Nëse është i suksesshëm, TRUE kthehet, dhe nëse nuk ka sukses, FALSE kthehet. Sintaksa e funksionit Rename():

riemërtimi i bool (emri i vjetër i vargut, emri i ri i vargut)

Një shembull i riemërtimit të një skedari duke përdorur funksionin rename():

$data_file = "data.txt";

riemërto($date file, $datafile".old") ose die("Nuk mund të riemërtoi skedarin $data");

Fshirja e skedarëve

Funksioni unlink() fshin një skedar me emrin e dhënë. Sintaksë:

int unlink (skedar string)

Nëse jeni duke punuar me PHP në një sistem Windows, ndonjëherë mund të keni probleme duke përdorur këtë veçori. Në këtë rast, mund të përdorni funksionin system() të përshkruar më sipër dhe të fshini skedarin me komandën DOS del:

system("del filename.txt");

Puna me katalogë

Funksionet PHP ju lejojnë të shikoni dhe lundroni në përmbajtjen e drejtorive. Lista 7.8 tregon një strukturë tipike drejtorie në një sistem UNIX.

Listimi 7.8. Struktura tipike e drejtorisë

Funksioni dirname() plotëson emrin e bazës() - nxjerr shtegun nga emri i skedarit plotësisht të kualifikuar. Sintaksa e funksionit dirname() është:

emri i vargut (shtegu i vargut)

Një shembull i përdorimit të dirname() për të nxjerrë një shteg nga një emër i plotë:

$rruga = "/usr/locla/phppower/htdocs/index.php";

$file = dirname($rruga); // $file = "usr/local/phppower/htdocs"

Funksioni dirname() përdoret ndonjëherë së bashku me variablin $SCRIPT_FILENAME për të marrë shtegun e plotë drejt skriptit nga i cili ekzekutohet komanda:

$dir - dirname($SCRIPT_FILENAME);

Funksioni is_dir() kontrollon nëse një skedar me një emër të caktuar është një drejtori:

bool is_dir (emri i skedarit të vargut)

Shembulli i mëposhtëm përdor strukturën e drejtorisë nga Lista 7.8:

$ isdir = është_dir("index.html"); // Kthen FALSE

$isdir = is_dir("libër"); // Kthen TË VËRTETË

Funksioni mkdir() bën të njëjtën gjë si komanda UNIX me të njëjtin emër - krijon një direktori të re. Sintaksa e funksionit mkdir():

int mkdir (shtegu i vargut, modaliteti int)

Parametri i rrugës specifikon shtegun për të krijuar drejtorinë e re. Mos harroni të përfundoni parametrin me emrin e drejtorisë së re! Parametri i modalitetit përcakton lejet e caktuara në drejtorinë e krijuar.

Ashtu si funksioni fopen() hap një manipulues për të punuar me një skedar të caktuar, funksioni opendir() hap një manipulues për të punuar me një direktori. Sintaksa e funksionit opendir() është:

int opendir (rruga e vargut)

Funksioni closeir() mbyll dorezën e direktoriumit të kaluar si parametër. Sintaksa e funksionit closeir() është:

void mbyllur (int directory_manipulator)

Funksioni readdir() kthen elementin tjetër të drejtorisë së specifikuar. Sintaksë:

string readdir (int directory_manipulator)

Duke përdorur këtë funksion, ju lehtë mund të rendisni të gjithë skedarët dhe nëndrejtoritë e vendosura në drejtorinë aktuale:

$dh = opendir(" .);

ndërsa ($file = readdir($dh)) :

printoni "$file
"; endwhile;

Funksioni chdir() funksionon ashtu si komanda UNIX cd; ai ndryshon në drejtorinë e specifikuar nga parametri. Sintaksa e funksionit chdir():

int chdir (drejtoria e vargjeve)

Në shembullin e mëposhtëm, ne navigojmë te libri/nëndirektoria dhe shtypim përmbajtjen e tij:

$newdir = "libër";

chdir($newdir) ose die("Nuk mund të ndryshohej në drejtori ($newdir)"); $dh = opendir(" . ");

ndërsa ($file = readdir($dh)) ;

printoni "$file
";

Funksioni rewlnddir() e zhvendos treguesin e pozicionit aktual në fillim të drejtorisë së hapur nga funksioni opendir(). Sintaksa e funksionit rewinddir() është:

void rewinddir (int directory_manipulator)

Projekti 1: Numërues i thjeshtë i goditjeve

Skripti i paraqitur në këtë seksion numëron numrin e goditjeve në faqen ku ndodhet. Përpara se të kaloni te kodi në Listimin 7.9, rishikoni algoritmin e shkruar në pseudokod:

  1. Cakto variablin $access emrin e skedarit në të cilin do të ruhet vlera e numëruesit.
  2. Përdorni funksionin file() për të lexuar përmbajtjen e $access në grupin $visits. Parashtesa @ para emrit të funksionit i shtyp gabimet e mundshme (për shembull, nuk ka skedar me emrin e dhënë).
  3. Cakto variablin $current_visitors në vlerën e elementit të parë (dhe të vetëm) të grupit $visits.
  4. Rritja e vlerës së $current_visitors me 1.
  5. Hapni skedarin $access për shkrim dhe vendosni treguesin e pozicionit aktual në fillim të skedarit.
  6. Shkruani vlerën $current_visitors në skedarin $access.
  7. Mbyllni manipulatorin që i referohet skedarit $access.

Listimi 7.9. Numër i thjeshtë i goditjeve

// Script: numërues i thjeshtë i goditjeve

// Qëllimi: ruajtja e numrit të goditjeve në një skedar

$access = "hits.txt"; // Emri i skedarit zgjidhet në mënyrë arbitrare

$vizitorët_aktuale = $vizita; // Merrni elementin e parë (dhe të vetëm).

+$vizitorët_aktuale; // Rritni numëruesin e goditjeve

$fh = fopen($akses. "w"); // Hapni skedarin hits.txt dhe instaloni

// treguesi në pozicionin aktual në fillim të skedarit

@fwrite($fh, $current_visitors);// Shkruani një kundërvlerë të re

// te skedari "hits.txt"

fclose ($fh); // Mbyll manipulatorin e skedarit "hits.txt"

Projekti 2: ndërtimi i një harte siti

Skripti në Listing 7.10 ndërton një hartë faqeje, një pamje hierarkike të të gjithë dosjeve dhe skedarëve në server, duke filluar nga një direktori e caktuar. Llogaritja e mbushjes së elementeve që përbëjnë një hartë faqeje përdor funksionet e përcaktuara në këtë dhe në kapitujt e mëparshëm. Përpara se të kaloni në program, rishikoni algoritmin e shkruar në pseudokod:

  1. Deklaroni variablat e shërbimit për të ruajtur drejtorinë prind, emrin e skedarit grafik me imazhin e dosjes, emrin e faqes dhe flamurin e serverit OS (Windows ose një sistem tjetër).
  2. Deklaroni një funksion display_directory() që lexon përmbajtjen e një drejtorie dhe e formaton atë për t'u shfaqur në shfletues.
  3. Ndërtoni shtegun e drejtorisë duke kombinuar emrin e kaluar në ndryshoren $dir1 me $dir.
  4. Hapni një direktori dhe lexoni përmbajtjen e tij. Formatoni emrat e dosjeve dhe skedarëve dhe shfaqini ato në shfletues.
  5. Nëse skedari aktual është një direktori, thirrni display_di rectory() në mënyrë rekursive dhe kaloni emrin e drejtorisë së re për t'u shfaqur. Llogaritni dhëmbëzimin e përdorur gjatë formatimit të daljes.

Nëse skedari nuk është një direktori, ai është i formatuar për t'u shfaqur si një hiperlidhje (dhe llogaritet gjithashtu dhëmbëzimi i përdorur në formatim).

Listimi 7.10. Programi Sitemap.php

// Skedari: sitemap.php

// Qëllimi: ndërtimi i një harte siti

// Drejtoria nga e cila fillon ndërtimi i hartës

$beg_path = "C:\Program FilesVApache Group\Apache\htdocs\phprecipes";

// Skedar me një imazh grafik të dosjes.

// Rruga duhet të jetë Relative* me direktoriumin rrënjë të serverit Apache

$folder_location = "C:\Dokumentet e mia\PHP për programuesit\CHS FINAL\graphics\folder.gif";

// Teksti në titullin e dritares $page_name = "PHPRecipes SiteMap";

// Në cilin sistem do të përdoret skripti - Linux apo Windows?

// (0 - Windows; 1 - Linux)

$usingjinux = 0;

// Funksioni: display_directory

// Qëllimi: leximi i përmbajtjes së drejtorisë të specifikuar nga parametri

// $dir1, e ndjekur nga formatimi i drejtorisë dhe hierarkisë së skedarëve.

// Funksioni mund të thirret në mënyrë rekursive.

funksioni display_directory ($dir1, $folder_location, $using_linux, $init_depth) (

// Rruga e përditësimit

Sdh = opendir($dir);

while($file = readdir($dh)) :

// Elementet e drejtorisë "." dhe ".." nuk dalin.

nëse (($file != ".") && ($file != "..")) :

nëse ($using_linux == 0) :

$depth = shpërthejë ("\\", $dir): tjetër:

$thellësi = shpërthejnë ("/", $dir); endif ; $curtent_depth = madhësia ($thellësia);

// Ndërtoni shtegun sipas rregullave të sistemit operativ të përdorur. nëse ($using_linux == 0) :

$tab_thellësia = $current_deptn - $fillimi_thellësi;

$file = $dir. "\\", $file; tjetër:

$file = $dir. "/",$file; endif;

// A përmban $file një drejtori? nëse (është dir($file)):

// Llogaritni dhëmbëzimin

ndërsa ($x< ($tab_depth * 2)) :

$x++; endwhile;

print"

".basename($file)."
";

// Numëruesi i rritjes

// Thirrje rekursive për display_directory()

display_directory ($file, $folder_location, $using_linux, $init_depth);

// Jo një drejtori

// Ndërtoni një shteg sipas rregullave të përdorura

// sistemi operativ.

nëse ($using_linux == 0) :

$tab_thellësi = ($aktuale_thellësi - $fillim_thellësi) - 2; $x = 0;

// Llogaritni dhëmbëzimin

ndërsa ($x< (($tab_depth * 2) + 5)) :

print" ".basename($file)."
";

print" ".basename($file)."
";

endif; // Is_dir(file) endif: // Nëse ! "." ose ".."

// Mbyll direktorinë closeir($dh);

<? print "$page_name"; ?>

// Llogaritni mbushjen fillestare

nëse ($using_linux == 0) :

$depth = shpërthejnë ("\\", $beg_path);

$thellësi = shpërthejnë ("/", $beg_path);

$fillimi_thellësia = madhësia ($thellësia);

display_directory ($beg_path, $folder_location, $using_linux, $init_depth);

Në Fig. Figura 7.1 tregon rezultatin e ekzekutimit të skriptit për një drejtori me disa kapituj të këtij libri.

Oriz. 7.1. Shfaqja e strukturës së drejtorisë në server duke përdorur skriptin sitemap.php

Rezultatet

Ky kapitull prezantoi shumë nga mjetet e PHP-së për të punuar me skedarë. Në veçanti, kemi shqyrtuar çështjet e mëposhtme:

  • kontrollimi i ekzistencës së skedarëve;
  • hapja dhe mbyllja e skedarëve dhe rrymave I/O;
  • shkrim dhe lexim nga një skedar;
  • ridrejtimi i skedarit në rrjedhën e daljes;
  • nisja e programeve të jashtme;
  • operacionet e sistemit të skedarëve.

Materiali në këtë kapitull vendos skenën për kapitullin tjetër, "Strings dhe shprehjet e rregullta", sepse gjatë zhvillimit të aplikacioneve në ueb, përpunimi i vargjeve dhe operacionet I/O janë shumë të lidhura ngushtë.

Përditësimi i fundit: 1/11/2015

Ashtu si shumica e gjuhëve të programimit, PHP mbështet punën me skedarë, të cilët janë një nga mënyrat për të ruajtur informacionin.

Leximi dhe shkrimi i skedarëve

Hapja dhe mbyllja e skedarëve

Për të hapur skedarë në PHP, përcaktohet funksioni fopen(). Ai ka përkufizimin e mëposhtëm: burimi fopen (string $filename, string $mode) . Parametri i parë $filename përfaqëson rrugën drejt skedarit dhe i dyti është mënyra e hapjes. Në varësi të qëllimit të hapjes dhe llojit të skedarit, ky parametër mund të marrë vlerat e mëposhtme:

    "r" : Skedari hapet vetëm për lexim. Nëse skedari nuk ekziston, kthehet false

    "r+" : Skedari hapet vetëm për lexim dhe shkruhet. Nëse skedari nuk ekziston, kthehet false

    "w" : Skedari hapet për shkrim. Nëse një skedar i tillë ekziston tashmë, atëherë ai mbishkruhet, nëse jo, atëherë krijohet.

    "w+" : Skedari hapet për t'u shkruar dhe i lexueshëm. Nëse një skedar i tillë ekziston tashmë, atëherë ai mbishkruhet, nëse jo, atëherë krijohet.

    "a" : Skedari hapet për shkrim. Nëse një skedar i tillë ekziston tashmë, atëherë të dhënat shkruhen në fund të skedarit dhe të dhënat e vjetra mbeten. Nëse skedari nuk ekziston, ai krijohet

    "a+" : Skedari hapet për lexim dhe shkrim. Nëse skedari ekziston tashmë, atëherë të dhënat shtohen në fund të skedarit. Nëse skedari nuk ekziston, ai krijohet

Dalja e funksionit fopen do të jetë një përshkrues skedari. Kjo dorezë përdoret për operacionet e skedarit dhe për të mbyllur skedarin.

Pas përfundimit të punës, skedari duhet të mbyllet duke përdorur funksionin fclose(), i cili merr si parametër një përshkrues skedari. Për shembull, le të hapim dhe mbyllim një skedar:

$fd = fopen("form.php", "r") ose die("nuk mund ta hapte skedarin"); fclose ($fd);

Konstruksioni or die ("teksti i gabimit") lejon që skripti të ndalojë ekzekutimin dhe të shfaqë një mesazh gabimi nëse funksioni fopen nuk ishte në gjendje të hapte skedarin.

Leximi i një skedari

Ju mund të përdorni disa funksione për të lexuar një skedar. Për leximin rresht pas rreshti, përdoret funksioni fgets(), i cili merr një përshkrues skedari dhe kthen një rresht të lexuar. Le të kalojmë të gjithë skedarin rresht pas rreshti:

Sa herë që thirret fgets(), PHP do të vendosë treguesin në fund të rreshtit të lexuar. Për të gjurmuar fundin e një skedari, përdoret funksioni feof(), i cili kthehet i vërtetë kur skedari të përfundojë. Dhe derisa të arrihet fundi i skedarit, ne mund të përdorim funksionin fgets().

Duke lexuar të gjithë skedarin

Në këtë rast, nuk duhet të hapim në mënyrë eksplicite skedarin, të marrim një dorezë dhe më pas ta mbyllim skedarin.

Blloko leximin

Ju gjithashtu mund të bëni një lexim bllok pas blloku, domethënë të lexoni një numër të caktuar bajtësh nga një skedar duke përdorur funksionin fread():

Funksioni fread() merr dy parametra: dorezën e skedarit për t'u lexuar dhe numrin e bajteve për t'u lexuar. Kur lexohet një bllok, treguesi në skedar lëviz në fund të atij blloku. Gjithashtu duke përdorur funksionin feof() mund të gjurmoni përfundimin e një skedari.

Shkruani një skedar

Për të shkruar një skedar, përdorni funksionin fwrite(), i cili shkruan rreshtin e mëposhtëm në skedar:

Një funksion tjetër fputs() funksionon në mënyrë të ngjashme:

Puna me treguesin e skedarit

Kur hapni një skedar për lexim ose shkrim në modalitetin "w", treguesi në skedar vendoset në fillim. Gjatë leximit të të dhënave, PHP lëviz treguesin në skedar në fund të bllokut të të dhënave të lexuara. Megjithatë, ne gjithashtu mund të manipulojmë manualisht treguesin në skedar dhe ta vendosim atë në një vendndodhje arbitrare. Për ta bërë këtë, duhet të përdorni funksionin fseek, i cili ka përkufizimin zyrtar të mëposhtëm:

Int fseek (burimi $handle, int $offset [, int $whence = SEEK_SET ])

Parametri $handle përfaqëson një dorezë skedari. Parametri $offset është kompensimi në bajt në lidhje me fillimin e skedarit nga i cili do të fillojë leximi/shkrimi. Parametri i tretë opsional specifikon se si vendoset kompensimi. Mund të marrë tre vlera:

    SEEK_SET: vlera e paracaktuar, vendos kompensimin në bajt të kompensuar në lidhje me fillimin e skedarit

    SEEK_CUR: vendos kompensimin në bajt të kompensuar në lidhje me fillimin e pozicionit aktual në skedar

    SEEK_END: ​​vendos kompensimin për të zhvendosur bajt nga fundi i skedarit

Nëse treguesi është instaluar me sukses, funksioni fseek() kthen 0, dhe nëse treguesi është i pasuksesshëm, kthen -1.

Shembull i përdorimit të funksionit:

$fd = fopen("hello.txt", "w+") ose die("skedari nuk mund të hapej"); $str = "Përshëndetje botë!"; // rreshti për të shkruar fwrite($fd, $str); // shkruani rreshtin në fillim të fseek($fd, 0); // vendosni treguesin e skedarit në fillim të fwrite($fd, "Oink"); // shkruani rreshtin në fillim fseek($fd, 0, SEEK_END); // vendosi treguesin në fund fwrite($fd, $str); // shkruani një rresht tjetër në fund fclose($fd);

Artikujt më të mirë mbi këtë temë