Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Php krijoni dhe shkruani skedarë. Puna me skedarë në 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ë.

Në fakt, si të hapni një skedar php nuk është një problem i madh. Mund të jetë më e vështirë të hapësh një shishe birre kur je në mes të një pylli. Por vetëm programuesit e zjarrtë mendojnë në këtë mënyrë. Dhe për fillestarët, ne do t'ju tregojmë për të gjitha aftësitë e PHP për të punuar me skedarë:

skedarë php

Skedarët me shtesën php përmbajnë kod të shkruar në gjuhën e programimit me të njëjtin emër. Ndryshe nga gjuhët e tjera, php është një gjuhë programimi nga ana e serverit. Kjo do të thotë, funksionon në anën e serverit. Prandaj, për të korrigjuar kodin e tij, një server lokal duhet të instalohet në makinën e klientit.

Për të punuar me skedarë php, përdoren aplikacione speciale - redaktuesit e softuerit. Më të zakonshmet janë:

  • Dreamweaver.
  • PHPEdit.
  • Zhvillimi i Eclipse PHP.


Kur krijoni uebsajte të bazuara në PHP, mund t'ju duhet të ripërdorni kodin e programit. Në situata të tilla, është e përshtatshme të lidhni zgjidhje të gatshme të vendosura në një skedar tjetër. Për këtë përdoret konstrukti i përfshirjes. Sintaksa e tij është:

përfshijnë emrin e skedarit

Shembull i lidhjes:

Skedari i përfshirë:


Përfshirja e një skedari është gjithashtu e mundur duke përdorur konstruktin e kërkuar. Ndryshe nga përfshirja, ai përfshin skedarin përpara se të ekzekutohet kodi i programit. Duke përdorur kërkesën në kod, është e mundur vetëm një telefonatë në këtë skedar. Kur të aksesohet përsëri, sistemi do të shfaqë një mesazh gabimi global dhe do të ndalojë ekzekutimin e programit.

Konstrukti i përfshirjes përfshin vetëm burimin gjatë ekzekutimit të programit. Ai mbështet leximin e shumëfishtë të skedarit php. Nëse ndodh një gabim, do të shfaqet vetëm një mesazh paralajmërues dhe ekzekutimi i kodit do të vazhdojë nga rreshti tjetër.



Hapja dhe mbyllja e skedarëve

Në php, të gjitha operacionet me skedarë kryhen në disa faza:

  • Hapja e një skedari;
  • redaktimi i përmbajtjes;
  • Mbyllja e skedarit.

Funksioni fopen() përdoret për të hapur një skedar. Sintaksa e tij është:

int fopen (emri i skedarit të vargut, modaliteti i vargut [, int use_include_path])

Argumentet e pranuara:

  • emri i skedarit të vargut - emri i skedarit ose rruga absolute për të. Nëse shtegu i skedarit nuk është specifikuar, ai do të kërkohet në drejtorinë aktuale. Nëse skedari që kërkoni mungon, sistemi do të shfaqë një mesazh gabimi. Shembull:


  • modaliteti i vargut – tregon mënyrën e hapjes së skedarit. Vlerat e pranuara nga argumenti:
  • r – skedari hapet vetëm për lexim, treguesi i skedarit është vendosur në fillim;
  • r+ – skedari është i hapur për lexim dhe shkrim;
  • w – krijon një skedar të ri vetëm për shkrim. Nëse një skedar me të njëjtin emër ekziston tashmë, të gjitha të dhënat në të fshihen automatikisht;
  • w+ - krijon një skedar të ri për shkrim dhe lexim. Kur ekziston një skedar i tillë, të dhënat e tij mbishkruhen plotësisht me të reja;
  • a – skedari është i hapur për shkrim. Treguesi vendoset në fund. Kjo do të thotë, shkrimi në skedarin php do të fillojë jo nga fillimi, por nga fundi;
  • a+ – hapni një skedar në modalitetin lexim-shkrim. Regjistrimi do të fillojë nga fundi;
  • b – mënyra e punës me një skedar që përmban të dhëna binare (në sistemin e numrave binar). Kjo mënyrë është e disponueshme vetëm në sistemin operativ Windows.

Për të mbyllur aksesin në një skedar, përdorni funksionin fclose(). Sintaksë:

int fclose (int file) , ku skedari int është një dorezë në sitin për t'u mbyllur.

Pas çdo leximi ose shkrimi, skedari duhet të mbyllet me këtë funksion. Përndryshe, transmetimi i krijuar për skedarin mbetet i hapur. Dhe kjo çon në konsum të panevojshëm të kapacitetit të serverit.

Shembull:

Leximi dhe shkrimi i skedarëve

Për të shfaqur thjesht të gjithë përmbajtjen e një skedari, funksioni readfile() është ideal. Sintaksa e tij është:

readfile (emri i skedarit të vargut) , ku emri i skedarit të vargut është emri i skedarit të vargut (jo dorezë).


int fpassthru (skedar int)

Funksioni kërkon hapjen dhe mbylljen e një skedari. Shembull:

Rezultati është i ngjashëm me atë të mëparshëm.

Funksionet për të punuar me skedarë në php ju lejojnë të lexoni përmbajtjen rresht pas rreshti dhe karakter pas karakteri:

  • varg fgets (skedar int, gjatësia int)– funksioni lexon një varg me gjatësi . Shembull:


  • vargje fread (skedar int, gjatësi int)– veprimi është identik me atë të mëparshëm.

Për të shkruar të dhëna teksti në një skedar, ekzistojnë dy funksione identike:

  • int fputs (skedari int, vargu i vargut [, gjatësia int ])
  • int fwrite (skedari int, vargu i vargut [, gjatësia int ])

Funksionet i shkruajnë një skedari int një varg vargu me gjatësi të caktuar int ( argument opsional). Shembull:


Krijimi dhe fshirja e skedarëve

Për të krijuar një skedar php, mund të përdorni funksionin fopen() në modalitetin e aksesit "w" ose "w+". Ose funksioni touch(). Ajo cakton kohën e modifikimit të skedarit. Nëse nuk ka asnjë element me emrin e kërkuar, ai do të krijohet. Sintaksa e tij është:

int touch (emri i skedarit të vargut [, koha int [, koha int]])

Për të krijuar një kopje të një skedari, përdorni funksionin copy(). Si argumente, ai merr emrin e origjinalit dhe skedarin ku duhet të kopjohet përmbajtja. Nëse nuk ekziston, do të krijohet. Sintaksa e funksionit:

kopjimi int (skedari i vargut1, skedari i vargut 2)


Ju mund të fshini një skedar duke përdorur funksionin unlink(). Sintaksa e saj.

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.

JavaScript është bllokuar në shfletuesin tuaj. Ju lutemi aktivizoni JavaScript për funksionimin e sajtit!

Puna me skedarë

Manipulimi i skedarëve është një mjet i rëndësishëm i PHP.

Përfshirë skedarët e jashtëm

Ju mund të përfshini një skedar në çdo dokument PHP duke përdorur udhëzimet përfshijnë (). Argumenti i tij është rruga për në skedar. Ky udhëzim është i përshtatshëm për t'u përdorur kur keni pjesë identike të kodit në shumë programe PHP. Përmbajtja e skedarit të përfshirjes përpunohet si tekst i thjeshtë HTML. Në mënyrë që përmbajtja e këtij skedari të përpunohet si një program PHP, ai duhet të rrethohet nga etiketat hapëse dhe mbyllëse PHP.

Shembulli 1

Përdorimi i përfshirjes () ...Pjesa kryesore..."; ?>

Jehona"

...Pershendetje te pergjithshme...

"

REZULTATI I SHEMBULLIT 1:

...Pershendetje te pergjithshme...

...Pjesa kryesore...

Në këtë rast, rezultati do të jetë i njëjtë nëse skedari i përfshirë top.php përmban vetëm një rresht teksti HTML:

...Pershendetje te pergjithshme...

Skedarët e përfshirë mund të kthejnë vlera si funksione. Përdorimi i deklaratës kthyese përfundon ekzekutimin e këtij skedari në të njëjtën mënyrë si funksionet.

Shembulli 2

Përdorimi i një deklarate include() që kthen një vlerë Skedari i përfshirjes ktheu $res"; ?>

Përfshi skedarin top.php me programin PHP:

REZULTATI I SHEMBULLIT 2:

Skedari i përfshirjes ktheu 56

Udhëzimet përfshijnë () mund të përdoret brenda një lak. Në një lak përfshijnë () ekzekutohet në çdo përsëritje. Kjo mund të përdoret për të përfshirë skedarë të shumtë. Për shembull:

Për ($i=1; $i<=5; $i++) include("incfile{$i}.htm");

Përcaktimi i emrit të skedarit të përfshirjes dhe ngarkimi i tij përsëritet sa herë që telefononi përfshijnë (). Kjo do të thotë që nëse përmbajtja e skedarit të përfshirjes ka ndryshuar që nga thirrja e mëparshme, përmbajtja e re do të ngarkohet.

Operatori përfshijnë () mund të përfshihet edhe në trupin e një deklarate të kushtëzuar.

Edhe pse i ngjashëm në pamje me funksionin, përfshijnë () nuk është një funksion, por është një konstrukt i veçantë gjuhësor.

Për të treguar se skedari duhet të përfshihet vetëm një herë, përdoret operatori include_once().

Analiza e skedarit

PHP përmban shumë funksione që ofrojnë informacion rreth skedarëve. Më të përdorurat janë:

  • skedari_ekziston ()- përcakton ekzistencën e një skedari. Për shembull: nëse (!file_exists("aaa.php")) echo "Kujdes! Skedari aaa.php nuk u gjet!";
  • is_file ()- përcakton nëse objekti që shqyrtohet është dosje. Për shembull: nëse (is_file("bbb.txt")) echo "Ju mund të jeni të sigurt, bbb.txt është një skedar";
  • is_dir()- përcakton nëse objekti që shqyrtohet është një direktori. Për shembull: nëse (is_dir("/tmp")) echo "Në të vërtetë, /tmp është një direktori";
  • is_readable()- përcakton nëse skedari është i lexueshëm. Për shembull: nëse (is_readable("db.dbf")) echo "db.dbf mund të lexohet";
  • is_writable ()- përcakton nëse skedari është i shkruhet. Për shembull: nëse (is_writable("db.dbf")) echo "Mund të shkruash në db.dbf";
  • madhësia e skedarit ()- përcakton madhësinë e skedarit në bajt.
  • filemtime ()- përcakton datën dhe kohën kur skedari është modifikuar për herë të fundit.
  • fileatime ()- përcakton datën dhe orën e hyrjes së fundit në skedar.

Shembulli 3

Informacioni i skedarit "; echo "$f - ".(is_dir($f) ? "" : "jo ")." directory
"; echo "$f ".(is_readable($f) ? "" : "jo ")."i lexueshëm
"; echo "$f ".(is_writable($f) ? "" : "jo ")." e shkruajtshme
"; echo "madhësia e $f në bajt është ".(skedari($f))."
"; echo "$f u modifikua për herë të fundit - ".(data("d M Y H:i", koha e skedarit($f)))"
"; echo "$f u aksesua për herë të fundit - ".(datë("d M Y H:i", fileatime($f)))"
"; } ?>

REZULTATI I SHEMBULLIT 3:

Top.php - skedari top.php - jo një direktori top.php është i lexueshëm top.php është madhësia e shkruajtshme e top.php në bajt - 732 ndryshimi i fundit top.php - 04 Tetor 2005 20:21 qasja e fundit në top.php - 20 Tetor 2005 14:01

Kujdes! Këto funksione nuk funksionojnë me skedarë të fshirë. Ato mund të aplikohen vetëm në sistemin lokal të skedarëve.

Menaxhimi i skedarëve

PHP përmban shumë veçori të menaxhimit të skedarëve. Më të përdorurat janë:

  • prek ()- krijon një skedar bosh me emrin e dhënë. Nëse një skedar i tillë ekziston tashmë, funksioni do të ndryshojë datën e modifikimit. Për shembull: touch("ex1.txt");
  • kopje ()- kopjon skedarin. Për të kopjuar skedarë në PHP, përdorni funksionin e kopjimit ($source, $result). Duhet të kalojë vetëm dy parametra - burimi $burim dhe emri i skedarit të kopjimit - $rezultat. Vlen të përmendet se duhet të tregoni adresat e plota të skedarëve. Një shembull i përdorimit të funksionit të kopjimit:

  • shkëput ()- fshin skedarin e specifikuar. Për shembull:
  • fopen ()- hap një skedar lokal ose në distancë dhe i kthen një tregues. Treguesi përdoret në të gjitha veprimet në përmbajtjen e skedarit. Argumentet: emri i skedarit dhe mënyra e hapjes.
    rduke lexuar. Treguesi i skedarit është vendosur në fillim të skedarit
    r+lexim dhe shkrim. Treguesi i skedarit është vendosur në fillim të skedarit
    wrekord. Treguesi i skedarit është vendosur në fillim të skedarit. Të gjitha përmbajtjet e vjetra të skedarit janë humbur. Nëse një skedar me emrin e specifikuar nuk ekziston, funksioni përpiqet ta krijojë atë
    w+lexim dhe shkrim. Treguesi i skedarit është vendosur në fillim të skedarit. Të gjitha përmbajtjet e vjetra të skedarit janë humbur. Nëse një skedar me emrin e specifikuar nuk ekziston, funksioni përpiqet ta krijojë atë
    arekord. Treguesi i skedarit vendoset në fund të skedarit. Nëse një skedar me emrin e specifikuar nuk ekziston, funksioni përpiqet ta krijojë atë
    a+lexim dhe shkrim. Treguesi i skedarit vendoset në fund të skedarit. Nëse një skedar me emrin e specifikuar nuk ekziston, funksioni përpiqet ta krijojë atë

    Për shembull:

    $fp = fopen("http://www.php.net/", "r"); // për leximin e $fp = fopen("ex1.txt", "w"); // për regjistrimin $fp = fopen("ex2.txt", "a"); // për të shtuar deri në fund

    Nëse nuk mund ta hapni skedarin, mund ta ndërprisni programin. Për shembull:

    $fp = fopen("ex1.txt", "w") ose die("Dështoi në hapjen e skedarit");

  • fclose ()- mbyll dosjen. Argumenti: Treguesi i skedarit është marrë më herët nga funksioni fopen(). Për shembull: fclose($fp);
  • feof()- kontrollimi i fundit të skedarit. Argumenti: treguesi i skedarit.
  • fgetc ()- leximi i karakterit tjetër nga skedari. Argumenti: treguesi i skedarit.
  • fgets ()- leximi i rreshtit tjetër të skedarit. Argumentet: treguesi i skedarit dhe gjatësia e vargut që do të lexohet. Operacioni përfundon ose pasi të jetë lexuar numri i specifikuar i karaktereve ose kur zbulohet fundi i rreshtit ose skedarit.

    Shembulli 4

    Leximi i rreshtave nga një skedar "; ?>
  • fread ()- funksion i përgjithshëm për leximin nga një skedar. Argumentet: treguesi i skedarit dhe numri i karaktereve për t'u lexuar.
  • fseek ()- indenti nga fillimi i skedarit. Argumentet: treguesi i skedarit dhe kompensimi.

    Shembulli 5

    Shfaqja e gjysmës së dytë të skedarit
  • fputs ()- shkrimi i një rreshti në një skedar. Argumentet: treguesi i skedarit dhe vargu.
  • fwrite ()- analog i plotë i funksionit fputs ().

    Shembulli 6

    Regjistrimi dhe shtimi në dosje
  • tufë ()- bllokon skedarin, d.m.th. parandalon përdoruesit e tjerë që të lexojnë ose shkruajnë në skedar derisa personi që mban bllokimin të ketë përfunduar së punuari në skedar. Argumentet: treguesi i skedarit dhe numri i modalitetit të kyçjes.

    Shembulli 7

    Bllokimi i skedarit

    Kyç me tufë () nuk është absolute. Vetëm ato programe që përdorin gjithashtu këtë funksion do ta marrin parasysh atë.

Versioni PHP >= 4.3.0 ka funksione të reja të përshtatshme për të punuar me skedarë:

  • file_get_contents()- lexoni të gjithë skedarin ose URL-në
  • file_put_përmbajtja ()- shkruani skedarin

Puna me katalogë

PHP ka disa funksione për të punuar me drejtoritë:

  • mkdir ()- krijimi i një katalogu. Argumentet: emri i shtegut të drejtorisë dhe mënyra e hyrjes. Mënyra e hyrjes është një numër oktal treshifror me një zero të parë. Numri i parë është e drejta e aksesit për pronarin, e dyta është për grupin dhe e treta është për të gjithë të tjerët. Në Windows, mënyra e hyrjes shpërfillet. Sistemi UNIX përcakton të drejtat e mëposhtme të aksesit:

    Për shembull, Kontrolli i plotë për pronarin, Lexo dhe Ekzekuto për grupin dhe Ekzekuto për të gjithë të tjerët:

    Mkdir ("testdir", 0751);

  • rmdir ()- fshirja e një drejtorie. Argumenti: emri i rrugës së drejtorisë. Ju mund të fshini një direktori bosh vetëm nëse keni të drejtë ta bëni këtë. Nëse është i suksesshëm, funksioni kthehet true.
  • opendir ()- hapja e një drejtorie. Argumenti: emri i rrugës së drejtorisë. Nëse ndodh një gabim, funksioni kthehet false. Një gabim gjatë hapjes mund të shkaktohet nga fakti se drejtoria nuk ekziston ose programi nuk ka leje për ta lexuar atë.
  • readdir()- leximi i drejtorisë. Argumenti: emri i rrugës së drejtorisë. Kthen një varg që përmban emrin e skedarit ose nëndirektorisë së gjetur. Kur arrihet fundi i drejtorisë, funksioni kthehet false.

    Shembulli 8

    Leximi i një drejtorie "; ?>

    Shprehja e testit të ciklit nuk do të funksionojë siç pritej nëse ka një skedar me emrin "0" në drejtori. Në këtë rast, emri "0" do të konvertohet në 0, duke bërë që cikli të përfundojë. Kjo mund të shmanget duke marrë masa shtesë sigurie duke ndryshuar shprehjen e kontrollit:

    Gettype($f = readdir($dh)) != "boolean"

    Përveç përdorimit të funksionit fgetc() fgets() fgetss(), mund të përdorni
    $file = skedar ($filename). Ai lexon $filename në grup ($file).

    Shembull:

    $file=file($filename); për ($i=0; $i<=count($file); $i++) { echo $file[$i], "
    "; }

Transferimi i një skedari nga serveri. Shkarko skedarin. Shkarko.

Shkarkim manual, ose si të përdorni një skript për të hapur një dritare të ruajtjes së skedarit për përdoruesin. Në mënyrë që shfletuesi të hapë dialogun "Ruaj skedarin" me emrin e skedarit file.dat, skripti duhet të dërgojë titujt e mëposhtëm:

Header("Përmbajtja-Disposition: bashkëngjitje; emri i skedarit=file.dat"); header("Lloji i përmbajtjes: aplikacion/x-force-shkarkim; emri=\"file.dat\"");

Një shembull i gatshëm i dërgimit të një skedari nga disku:

Nuk do të dëmtonte gjithashtu të referonim skriptin si http://.../download.php?file.dat, përndryshe shfletuesit e bazuar në Mozilla mund të përpiqen ta shkruajnë skedarin si file.dat.php. ose specifikoni atributin e shkarkimit: Shkarko Shënim: Mos përdorni kokën e kokës ("Cache-Control: pa cache") në skriptet e tilla; shumica e versioneve të Internet Explorer nuk do të mund ta shkarkojnë skedarin.

Shembulli i mëposhtëm i skenarit tregon si të organizoni mbështetjen e shkarkimit:

Supozohet se $cd është shtegu i skedarit, $fn është emri i skedaritSi të transferoni një skedar në server?

Funksionet për të punuar me drejtoritë

  • chdir() - Ndrysho drejtorinë
  • chdir boolean (string str)

    Ndryshon direktorinë aktuale PHP në atë të specifikuar si parametri str. Kthen TRUE në sukses, FALSE në gabim

  • chroot() - Ndrysho direktoriumin rrënjë
  • boolean chroot (string string)

    Ndryshon direktorinë rrënjësore të procesit aktual në atë të kaluar si parametër str. Kthen TRUE në sukses, FALSE në gabim.

    Shënim: Ky funksion nuk zbatohet për platformat Windows.

  • closeir() - Lironi një dorezë drejtorie
  • void mbyllur (katalog i burimeve)

    Mbyll transmetimin e lidhur me katalogun dhe kalohet si parametër i katalogut. Përpara përdorimit të këtij funksioni, transmetimi duhet të hapet duke përdorur funksionin opendir().

    dir - Klasa e drejtorisë

klasa dir ( dir (string str) vargu i shtegut të burimit të trajtuar vargu i lexuar (i pavlefshëm) i pavlefshëm rikthim (i pavlefshëm) i pavlefshëm mbyll (i pavlefshëm) )

Një mekanizëm i orientuar nga pseudo-objekt për leximin e direktoriumit të kaluar në parametrin e drejtorisë. Që nga momenti i hapjes së drejtorisë, dy veti të klasës bëhen të disponueshme. Vetia "handle" mund të përdoret me funksione të tjera të manipulimit të drejtorive, të tilla si funksionet readdir(), rewinddir() dheclosedir(). Vetia "rrugë" përmban shtegun për në direktorinë e hapur. Tre metoda janë të disponueshme: leximi, rikthimi dhe mbyllja.

Ju lutemi vini re se si kontrollohet vlera e kthyer e metodave të klasës dir() në shembullin e mëposhtëm. Ky shembull kontrollon që vlera (shprehjet janë identike kur janë të barabarta dhe të të njëjtit lloj - shihni kapitullin e Operatorëve të Krahasimit për më shumë informacion) është e barabartë me FALSE, pasi përndryshe, çdo hyrje në drejtori, emri i të cilit mund të shprehet si FALSE do të ndalet. ciklin.

Shembull i kodit:

trajtoj."
\n"; echo "Rruga: ".$d->rruga."
\n"; while (false !== ($entry = $d->lexo())) (echo $entry."
\n"; ) $d->close(); ?>

Shënim: Rendi në të cilin metoda "lexo" kthen shënimet e direktorisë varet nga sistemi operativ.

Shënim: Gjithashtu, PHP përcakton automatikisht një klasë të brendshme të quajtur Directory, që do të thotë se nuk do të jeni në gjendje të përcaktoni klasat tuaja me të njëjtin emër.


  • getcwd() - Merrni emrin e drejtorisë aktuale të punës
  • vargu getcwd (void)

    Kthen emrin e drejtorisë aktuale të punës.


  • opendir() - Hap një direktori
  • burim opendir (shtegu i vargut)

    Kthen një dorezë direktorie për përdorim të mëvonshëm me funksionet closeir(), readdir() dhe rewinddir().

    Nëse shtegu nuk ekziston ose drejtoria e vendosur në shtegun e specifikuar nuk mund të hapet për shkak të kufizimeve ligjore ose gabimeve të sistemit të skedarëve, funksioni opendir() kthen FALSE dhe gjeneron një mesazh gabimi PHP të nivelit E_WARNING. Ju mund të shtypni një mesazh gabimi duke vendosur emrin e funksionit opendir() me një simbol "@".

    Shembull kod

    Duke filluar nga PHP 4.3.0, parametri i rrugës mund të jetë gjithashtu çdo URL, qasja e cila rezulton në një listë të skedarëve dhe drejtorive të saj. Megjithatë, kjo metodë funksionon vetëm kur përdorni paketuesin e url-ve file://. Në mbështetje të PHP 5.0 .0 për paketuesin url ftp:// u shtua.


  • readdir - Merrni një element drejtorie nga doreza e tij
  • string readdir (katalog i burimeve)

    Kthen emrin e hyrjes vijuese të direktoriumit. Emrat e elementeve kthehen sipas renditjes në varësi të sistemit të skedarëve.

    Vini re mënyrën se si funksioni readdir() e kthen vlerën në shembullin e mëposhtëm. Ky shembull kontrollon që një vlerë (shprehjet janë identike kur janë të barabarta dhe janë vlera të të njëjtit lloj - shihni kapitullin e Operatorëve të Krahasimit për më shumë informacion) është identike me FALSE sepse përndryshe, çdo hyrje në drejtori, emri i të cilit mund të shprehet si FALSE , do të ndalojë ciklin (për shembull, një element me emrin "0").

    Shembull kod

    Vini re se funksioni readdir() kthen gjithashtu elementë me emër, dhe nëse nuk dëshironi t'i merrni ato vlera, thjesht hidhini ato:

    Shembull kod


  • rewinddir() - Rivendos dorezën e drejtorisë
  • void rewinddir (katalog i burimeve)

    Rivendos rrjedhën e katalogut të kaluar në parametrin e katalogut për të treguar fillimin e katalogut


  • scandir() - Merrni një listë të skedarëve dhe drejtorive të vendosura në shtegun e specifikuar
  • array scandir (katalog i vargjeve [, rendi int])

    Kthen një grup që përmban emrat e skedarëve dhe drejtorive të vendosura përgjatë shtegut të kaluar në parametrin e katalogut. Nëse drejtoria nuk është drejtori, funksioni kthen FALSE dhe gjeneron një mesazh gabimi E_WARNING.

    Si parazgjedhje, renditja bëhet sipas rendit alfabetik në rend rritës. Nëse specifikohet parametri i rendit opsional (i barabartë me 1), renditja bëhet sipas rendit alfabetik në rend zbritës. Shembull kod

    Rezultati do të jetë diçka e tillë:

    Array ( => . => .. => bar.php => foo.txt => disadir) Array ( => somedir => foo.txt => bar.php => .. => .)

    Shembull kod

    REZULTATI SHEMBULL:

    Array ( => . => .. => bar.php => foo.txt => disadir) Array ( => somedir => foo.txt => bar.php => .. => .)

    Në PHP, shpesh duhet të merreni me krijimin e një skedari... është shumë e thjeshtë: nuk ka asnjë skedar në disk, kodi u ekzekutua dhe skedari u shfaq, atëherë mund ta lexoni këtë skedar në një variabël tjetër ose edhe në ndonjë faqe në Internet dhe pastaj shkruani diçka atje... por për këtë ju duhet të dini funksione të veçanta... më shumë për këtë në këtë artikull...

    Për të krijuar një skedar në PHP në një skript të ekzekutueshëm, thjesht duhet të specifikoni disa funksione:

    Le të hedhim një vështrim në një shembull:

    $text = "Një lloj teksti për të shkruar në skedar";
    $fp = fopen("file.txt", "w");
    fwrite ($fp, $tekst);
    fclose($fp);
    ?>

    Këtu duhet të dini:

    fopen ()- funksioni hap skedarin për lexim ose shkrim dhe sqarime;

    Ky sqarim (parametri i modalitetit të funksionit fopen) është shumë i rëndësishëm:

    • "r" - hapni një skedar në php Vetëm për lexim. Kursori vendoset në fillim.
    • "r+" - hapni një skedar në php për lexim dhe shkrim. Kursori vendoset në fillim. !!! - me këto dy mënyra r dhe r+, skedarët duhet të krijohen tashmë (përndryshe do të shfaqet një gabim Paralajmërim: fopen(file.txt) : dështoi në hapjen e transmetimit: Nuk ka skedar apo drejtori të tillë në ...), dhe ne vetëm lexojmë ose kemi mundësi të shtojmë.
    • "w" - Skedari hapet VETËM për shkrim. Skedari shkurtohet në gjatësi zero - domethënë mbishkruhet. Shkruhet ajo që nevojitet dhe Kursori vendoset në fillim.
    • "w+" - hap një skedar për të shkruar DHE LEXIM! Pjesa tjetër është e njëjtë si në modalitetin "w". !!! - në këto dy mënyra - nëse skedari nuk është krijuar - DO TË BËHET NJË TENTIM PËR TË KRIJUAR!
    • "a" - hapni skedarin VETËM për të shkruar. Ndryshe nga "w", ky opsion nuk e mbishkruan përmbajtjen e skedarit, por vendos kursorin në fund të rreshtit dhe shton përmbajtjen që donim të shtonim në fund.
    • "a+" - hapni skedarin për shkrim dhe lexim.

    fwrite($fp, $text) - një funksion për të shkruar në një skedar në PHP - domethënë, ajo që është në ndryshoren $text shkruhet në një skedar që është në ndryshoren $fp;

    fclose($fp) - funksioni për mbylljen e skedarit që kemi shkruar në ndryshoren $fp;

    Tani mund të krijoni me lehtësi skedarë në php në mënyrë korrekte, t'i hapni ato për lexim dhe redaktim.

    Shtesa dhe funksione të dobishme PHP për të punuar me një skedar të hapur:

    ndërsa(!feof($fp))(
    $mytext = fgets ($fp, 99);
    jehonë $mytext."
    ";
    }

    këtu plotësohet kushti - "derisa të arrihet fundi i skedarit, bëjeni këtë" ndërsa(!feof($fp))

    1. Funksioni fgets($fp, 99) - ju lejon të ndani të gjithë përmbajtjen në seksione prej 99 bajte dhe më tej, për ta parë këtë më qartë vendosim një etiketë

    Ky funksion i vargut fgets(trajtimi i burimit [, gjatësia int]) si parazgjedhje pranon 1024 bajt (1 kilobajt) si parametrin e gjatësisë, nëse nuk specifikohet, do të jetë kështu. Ky parametër është opsional që nga PHP 4.2.0 (Kthen FALSE në rast gabimi)

    Funksione shtesë për hapjen, shkrimin dhe krijimin e një skedari

    Funksioni - int skedari i lexuar(emri i skedarit të vargut [, bool use_include_path [, konteksti i burimit]]) - lexoni skedarin në tërësi.

    Lexon një skedar dhe shkruan përmbajtjen në bufferin e daljes. Dhe kthen numrin e bajteve në dalje. Në rast gabimi, do të kthehet nëse qeni nuk përdoret - @readfile.

    Diçka e tillë do të ndodhë:

    Në fund të fjalës ka një etiketë
    .

    b. Funksioni - grup dosje(emri i skedarit të vargut [, int use_include_path [, konteksti i burimit]]), bën të njëjtën gjë si funksioni readfile, me një përjashtim shton përmbajtjen e skedarit në një grup:

    Në këtë mënyrë mund të lexoni çdo faqe në internet: $lines = file("http://site/"); dhe përsëritni nëpër grup duke përdorur funksionin foreach;

    3a. funksioni i vargut file_get_contents(emri i skedarit të vargut [, bool use_include_path [, konteksti i burimit [, int offset [, int maxlen]]]] - ju lejon të merrni përmbajtjen si një varg i vetëm.

    Ky është një funksion më universal PHP për leximin e një skedari, i ngjashëm me funksionin e skedarit, vetëm përmbajtja kthehen si një varg, jo një grup, dhe mund të vendosni kushte - me cilin bajt të filloni - kompensuar dhe ku të përfundojë - maxlen. Në rast dështimi, do të kthehet FALSE.

    E rëndësishme!!!- në këtë rast, funksioni zëvendëson 3 në të njëjtën kohë: fopen(), fread() dhe fclose() dhe kështu shpëton shenjën.

    3b. funksioni int file_put_përmbajtja(emri i skedarit të vargut, të dhënat e përziera [, flamujt int [, konteksti i burimit]]) - identike me thirrjet sekuenciale të funksioneve fopen(), fwrite() dhe fclose() - kthen numrin e bajteve të shkruara.

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