Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Lajme
  • Php ngarkon skedarin në variabël. Skripti i skedarit - Si mund të ngarkoj një skedar PHP në një variabël? Zgjedhja është e juaja

Php ngarkon skedarin në variabël. Skripti i skedarit - Si mund të ngarkoj një skedar PHP në një variabël? Zgjedhja është e juaja

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

Por tani më duhet të shkarkoj skedarin PHP.

Unë supozoj se ju dëshironi të merrni Përmbajtja e krijuar nga PHP, po të jetë kështu:

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

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

$ Vdata = file_get_contents ("rruga / drejt / JUAJ / FILE.php");

Ob_fillimi (); përfshini "yourfile.php"; $ myvar = ob_get_clean ();

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

$ Vdata = file_get_contents ("/ rruga / te / juaj / file.php");

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

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

Pastaj përmbajtja e skedarit do të ngarkohet. Skedari PHP duhet të jetë i formuar plotësisht me etiketaQë vlerësimi ta vlerësojë atë.

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);

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

file_get_contents () nuk do të funksionojë nëse serveri juaj është i çaktivizuar allow_url_fopen... Shumica e hosteve të përbashkëta të internetit janë çaktivizuar si parazgjedhje për shkak të rreziqeve të sigurisë. Përveç kësaj, në PHP6 opsion allow_url_fopen nuk do të ekzistojë më dhe të gjitha veçoritë do të veprojnë sikur të ishin çaktivizuar përgjithmonë. Pra, kjo është një metodë shumë e keqe për t'u përdorur.

Rasti juaj më i mirë i përdorimit nëse po aksesoni skedarin përmes http është cURL

Para se të përpiqeni të punoni me skedarin, këshillohet të siguroheni që ai ekziston. Dy funksione përdoren zakonisht për të kryer këtë detyrë:

file_ekziston () dhe është_file ().

Funksioni f ilе_exists () kontrollon nëse skedari i specifikuar ekziston. Nëse skedari ekziston, funksioni kthen TRUE, përndryshe FALSE kthehet. Sintaksa për funksionin file_exists () është:

bool file_ekziston (skedari i vargut)

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

nëse (! file_ekziston ($ emri i skedarit)):

printoni "Emri i skedarit $ nuk ekziston!";

is_file ()

Funksioni is_file () kontrollon ekzistencën e skedarit të specifikuar dhe aftësinë për të kryer operacione leximi / shkrimi në të. 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 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 një skedar ekziston dhe mund të përdoret:

$ file = "somefile.txt";

nëse (është_file (skedar $)):

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

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

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

Funksioni i madhësisë së skedarit () kthen madhësinë (në bajt) të skedarit me emrin e dhënë, ose FALSE në gabim. Sintaksa për funksionin e madhësisë së skedarit () është:

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. Ju mund të përdorni funksionin e madhësisë së skedarit () për të marrë informacionin që dëshironi:

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

Shfaqet dalja e mëposhtme:

Pastry.txt është 179 bajt.

Përpara se të kryeni veprime në një skedar, duhet ta hapni atë dhe ta lidhni me dorezën e skedarit dhe pasi të keni përfunduar punën me skedarin, mbylleni atë. Këto tema diskutohen në seksionin vijues.

Hapja dhe mbyllja e skedarëve

Përpara se të kryeni operacionet I/O në një skedar, duhet ta hapni atë me funksionin fopen ().

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

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

Skedari që hapet mund të qëndrojë në sistemin lokal të skedarëve, të ekzistojë si transmetim standard I/O ose të paraqesë skedarin në një sistem të largët siç merret nga 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. Në këtë rast, duhet t'i kushtoni vëmendje të veçantë dy gjërave: nëse serveri nuk mbështet FTP pasiv, thirrja fopen () do të dështojë. Për më tepër, skedarët FTP hapen për lexim ose shkrim.

Kur funksionon në modalitetin pasiv, serveri YR pret për një lidhje nga ana e klientit. 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. Tabela 7.1 liston disa nga vlerat që përcaktojnë mënyrën e hapjes së një skedari.

Tabela 7.1. Mënyrat e hapjes së skedarit

Modaliteti Përshkrim
Vetëm lexim. Treguesi i pozicionit aktual është vendosur në fillim të skedarit
r + Leximi dhe shkrimi. Treguesi i pozicionit aktual është vendosur në fillim të skedarit
w Shkruaj vetëm. 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 + Leximi dhe shkrimi. 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 Shkruaj vetëm. Treguesi i pozicionit aktual është i pozicionuar në fund të skedarit. Nëse skedari nuk ekziston, funksioni përpiqet ta krijojë atë
një + Leximi dhe shkrimi. Treguesi i pozicionit aktual është i pozicionuar 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 me funksionin fopen (). Die (), i përdorur në lidhje me fopen (), jep një mesazh gabimi nëse skedari nuk mund të hapet:

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

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

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

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

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

Kur të përfundojë, skedari duhet të mbyllet gjithmonë me fclose ().

Funksioni fclose () mbyll skedarin me dorezën e specifikuar. Kthen TRUE pas përfundimit të suksesshëm, FALSE në dështim. Sintaksa për funksionin fclose () është:

int fclose (manipulator int)

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

$ file = "userdata.txt";

nëse (skedari_ekziston (skedari $)):

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

// Kryen operacionet e skedarëve

printoni "File Sfile nuk ekziston!";

Shkruani në dosje

Ekzistojnë dy operacione kryesore që kryhen me skedarë të hapur - leximi dhe shkrimi.

Funksioni is_writeable () ju lejon të verifikoni nëse skedari ekziston dhe është i shkruhet. Shkrueshmëria kontrollohet si për skedarin ashtu edhe për direktorinë. Sintaksa për funksionin is_writeable () është:

bool is_writeable (skedar string)

Një pikë e rëndësishme: PHP ka shumë të ngjarë të funksionojë nën ID-në e përdoruesit të përdorur nga serveri në internet (zakonisht "askush"). Për një shembull të përdorimit të is_writeable (), shihni funksionin fwrite ().

Funksioni fwrite () shkruan përmbajtjen e një variabli të vargut në skedarin e specifikuar nga doreza e skedarit. Sintaksa për funksionin fwrite () është:

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

Nëse parametri i gjatësisë opsionale kalon në thirrjen e funksionit, regjistrimi ndalon ose pasi të jetë shkruar numri i specifikuar i karaktereve ose kur të arrihet fundi i rreshtit. Kontrollimi i aftësisë për të shkruar në një skedar tregohet në shembullin e mëposhtëm:

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

$ të dhëna = "08: 13: 00 | 12: 37: 12 | 208.247.106.187 | Win98";

$ filename = "somefile.txt";

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

nëse (është_shkruhen (emri i skedarit $)):

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

// Shkruani përmbajtjen e të dhënave $ në një skedar

$ sukses - fwrite ($ fh, $ të dhëna);

// Mbyll skedarin

fclose ($ fh); tjetër:

print "Nuk mund të hapej Sfilename 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 për fwrite () dhe ka saktësisht të njëjtën sintaksë. Sintaksa për funksionin fputs () është:

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

Unë personalisht preferoj përdorimin e fputs (). Mbani në 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

Leximi është padyshim operacioni më i rëndësishëm që kryhet në skedarë. Disa nga veçoritë që e bëjnë leximin nga një skedar më efikas janë përshkruar më poshtë. Sintaksa e këtyre funksioneve pothuajse saktësisht kopjon sintaksën e funksioneve analoge të shkrimit.

Funksioni i s_readable () siguron që skedari ekziston dhe është i lexueshëm. Lexueshmëria kontrollohet si për skedarin ashtu edhe për direktorinë. Sintaksa për funksionin is_readable () është:

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

PHP ka shumë të ngjarë të funksionojë nën ID-në e përdoruesit të përdorur nga serveri në internet (zakonisht "askush"), kështu që që is_readable () të kthehet TRUE, të gjithë duhet të lejohen të lexojnë nga skedari. Shembulli i mëposhtëm tregon se si të siguroheni që një skedar ekziston dhe është i lexueshëm:

nëse (është i_lexueshëm ($ emri i skedarit)):

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

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

printoni "$ emri i skedarit nuk është i lexueshëm!";

Funksioni fread () lexon numrin e caktuar të bajteve nga skedari i specifikuar nga doreza e skedarit. Sintaksa për funksionin fwrite () është:

int fread (manipulator int, gjatësi int)

Manipuluesi duhet t'i referohet një skedari të hapur të lexueshëm (shih përshkrimin e funksionit është i lexueshëm ()). Leximi ndalon kur lexohet numri i caktuar i bajteve ose kur arrihet fundi i skedarit. Merrni parasysh skedarin e tekstit pastry.txt të paraqitur në Listimin 7.1. Leximi dhe shfaqja e këtij skedari në një shfletues bëhet me fragmentin e mëposhtëm:

$ fh = fopen ("pastry.txt", "r") ose die ("Nuk mund" të 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 tekstual 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 arrin në fund të skedarit. Sintaksa për funksionin fgetc () është:

vargu fgetc (manipulator int)

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

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

$ char = fgetc ($ fh):

print $ char; endwhile;

Funksioni fgets () kthen vargun e lexuar nga pozicioni aktual i treguesit në skedarin e specifikuar nga doreza e skedarit. Treguesi i skedarit duhet të tregojë drejt një skedari të hapur të lexueshëm (shih funksionin is_readable () më herët në këtë kapitull). Sintaksa për funksionin fgets () është:

varg fgets (manipulator int, gjatësi int)

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

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

Nëse dëshironi të organizoni leximin rresht pas rreshti të skedarit, kaloni në parametrin e dytë një vlerë që dukshëm tejkalon numrin e bajteve në rresht. Një shembull i leximit rresht pas rreshtit dhe prodhimit të një skedari:

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

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

linjë $ = fgets ($ fh, 4096);

printoni linjën $. "
";

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, shikoni përmbajtjen e Listimit 7.2 — ai skedar përdoret në Listimet 7.3 dhe 7.4.

Listimi 7.2. Skedari Science.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. Hiqni etiketat nga skedari HTML përpara se të shfaqen në shfletues

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

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

printoni fgetss ($ fh, 2048);

Rezultati është treguar më poshtë. Siç mund ta shihni, të gjitha etiketat HTML janë hequr nga skedari science.html, duke rezultuar në një humbje të formatimit:

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

Listimi 7.4. Hiqni në mënyrë selektive etiketat nga skedari HTML

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

$ e lejueshme = "
";

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

printoni fgetss ($ fh. 2048, $ e lejueshme);

Rezultati:

Lajmet e fundit - Zbulohet forma e jetës "Science Alien" 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ë WJ Gilmore. Nuk dihet nëse rrezatimi i fuqishëm buron nga kompjuteri i qiramarrësit monitor i ndihmuar në këtë evolucion.

Siç mund ta shihni, funksioni fgetss () e bën të lehtë konvertimin e skedarëve, veçanërisht nëse keni shumë skedarë HTML që janë të formatuar në një mënyrë të ngjashme.

Leximi i një skedari në një grup

Funksioni i skedarit () 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 për funksionin fileе () është:

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

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 ($ file_array)):

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

Çdo rresht i grupit shfaqet 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 drejton atë në dalje standarde (në shumicën e rasteve te shfletuesi). Sintaksa për funksionin readfile () është:

skedari i leximit int (skedari i vargut [, int path_include])

Funksioni kthen numrin e bajteve të lexuara. Skedari mund të qëndrojë në sistemin lokal të skedarëve, të ekzistojë si transmetim standard I/O ose të përfaqësojë një skedar në një sistem të largët siç merret nga HTTP ose FTP. Parametri i skedarit vendoset sipas të njëjtave rregulla si në funksionin fopen ().

Supozoni se keni një skedar latore.txt që 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ë mira të Italisë.

Kur ekzekutohet fragmenti i mëposhtëm, të gjitha përmbajtjet e latorre.txt dërgohen në rrjedhën standarde të daljes:

$ restaurant_file = "latorre.txt";

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

readfile ($ restaurant_file);

Hapja e një doreze skedari të procesit

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

int popen (komandë vargu, modaliteti i vargut)

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

// Hap 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

// Hapni procesin grep UNIX për të gjetur Basil në spices.txt

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

// Prodhimi i printimit të grep

Rezultati duket si ky:

Borziloku, sherebela, xhenxhefili

Funksioni fpassthru () është analog 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 skedarin e hapur nga funksioni fopen (). Sintaksa për funksionin pclose () është:

int pclose (int manipulator)

Në parametrin manipulues manipuluesi i marrë më herët nga një thirrje e suksesshme në poren () kalohet.

Hapja e një lidhjeje prizë

PHP nuk kufizohet vetëm në ndërveprimin me skedarët dhe proceset - ju gjithashtu mund të krijoni lidhje përmes prizave. Prizë(socket) është një abstraksion softuerësh që lejon komunikimin me shërbime të ndryshme në një kompjuter tjetër.

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

nëpërmjet TCP ose UDP. Sintaksa për funksionin fsockopen () është:

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 se sa kohë duhet pritur për një përgjigje nga serveri (në sekonda). Lista 7.6 tregon se si të përdorni fsockopen () për të marrë informacione rreth një serveri. Megjithatë, përpara se të shikoni Listimin 7.6, duhet të njiheni me një funksion tjetër, 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 manipulatorit specifikon një prizë të hapur më parë dhe parametri i modalitetit specifikon mënyrën në të cilën kalohet priza (E VËRTETË për modalitetin e bllokimit, FALSE për modalitetin jo bllokues). Një shembull i përdorimit të funksioneve fsockopen () dhe socket_set_blocking () është paraqitur në Listimin 7.6.

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

funksioni getthehost ($ host. rruga $) (

// Hapni një lidhje me një nyje

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

// Kalo në modalitetin e bllokimit

socket_set_blocking ($ fp, 1),

// Dërgo titujt

fputs ($ fp, "MERRNI rrugën e $ 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 7.6 prodhon rezultatin e mëposhtëm:

НТТР / 1.1 200 OK Serveri: Microsoft-IIS / 4.0 Vendndodhja e përmbajtjes:

2000 20:25:06 GMT ETag: "f0a61666dbff1bf1: 34a5" Gjatësia e përmbajtjes: 1311

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

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

Në varësi të qëllimit specifik të aplikacionit tuaj, mund të jetë më i përshtatshëm të përdorni pfsockopen () në vend të fsockopen ().

Nisja e programeve të jashtme

Skriptet PHP gjithashtu mund të ekzekutojnë programe që banojnë në server. Kjo veçori përdoret veçanërisht shpesh kur administrohet sistemi nëpërmjet një shfletuesi uebi, si dhe për të marrë më lehtësisht informacion përmbledhës rreth sistemit.

Funksioni exec () fillon programin e specifikuar dhe kthen rreshtin e fundit të daljes së tij. Sintaksa për funksionin exec () është:

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

Ju lutemi vini re: funksioni exec () ekzekuton vetëm komandën, pa shfaqur rezultatet e punës së tij. Të gjitha rezultatet e komandës mund të ruhen në grupin e parametrave opsionalë. Përveç kësaj, nëse ndryshorja kthyese është specifikuar edhe për grupin e parametrave të dhënë, këtij të fundit i caktohet kodi kthyes i komandës së ekzekutuar.

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

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

exec ("ping -c 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

Statistikat ping të Www.php.net -

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

vajtje-ardhje min. / mesatare / max / stddev - 55,339 / 63,662 / 70,779 / 6,783 ms

Backsticks

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 punës së saj shfaqen në shfletues. Shembull:

print"

$ prodhim
";

Ky fragment nxjerr përmbajtjen e drejtorisë që përmban skriptin në shfletues.

Parametri i brendshëm ping -c 5 (-n 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 në të njëjtën mënyrë si exec (), me një përjashtim - ai automatikisht printon daljen e komandës. Sintaksa për funksionin passthru () është:

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

Nëse kalohet një parametër opsional i kthimit kur thirret passthru (), kodi i kthimit i komandës së ekzekutuar i caktohet kësaj ndryshore.

escapeshellcmd ()

Funksioni escapeshellcmd () i shpëton të gjithë karaktereve potencialisht të pasigurt që përdoruesi mund të futë (për shembull, në një formë HTML) për të ekzekutuar komandat exec (), passthru (), system (), ose pooren (). Sintaksë:

string escapeshellcmd (komandë vargu)

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

$ user_input = `rm -rf *`; // Hiq 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 *`; // Hiq direktoriumin prind dhe të gjitha nëndrejtoritë e tij

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

Funksioni escapeshellcmd () i shpëton karakterit * për të parandaluar ekzekutimin katastrofik të komandës.

Siguria është një nga aspektet më të rëndësishme të programimit në ueb, kështu që i kushtova një kapitull të tërë kësaj teme dhe marrëdhënies së saj me programimin PHP. Për më shumë informacion, shihni kapitullin 16.

Puna me sistemin e skedarëve

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

Funksioni emri bazë () nxjerr emrin e skedarit nga emri i dhënë plotësisht i kualifikuar. Sintaksa për funksionin e emrit bazë () është:

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

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

$ path = "/usr/local/phppower/htdocs/index.php"; $ file = emri bazë (shtegu $); // skedar $ = "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 për funksionin getlastmod () është:

int getlastmod (i pavlefshëm)

Vlera e kthyer është në formatin e datës/kohës UNIX dhe mund të formatohet duke përdorur funksionin data (). 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ë:

statistika e grupit (emri i skedarit të vargut)

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

0 Ndërtimi

2 Modaliteti i mbrojtjes inode

3 Numri i lidhjeve

4 ID e përdoruesit të pronarit

5 ID e grupit të pronarit

6 Lloji i pajisjes inode

7 Madhësia në bajt

8 Koha e hyrjes së fundit

9 Koha e modifikimit të fundit

10 Koha e ndryshimit të fundit

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

12 Numri i blloqeve të alokuara

Kështu, nëse doni të dini kohën e hyrjes së skedarit të fundit, referojuni elementit 8 të grupit të kthyer. Le të shqyrtojmë një shembull:

skedar $ - "datafile.txt";

lista ($ dev, $ inode, $ inodep, $ nlink, $ uid, $ gid, $ inodev, madhësia e $, $ atime, $ mtime, $ ctime,

$ bsize) = stat (skedar $);

printoni "skedari $ është $ bajt i madhësisë.
";

printoni "Koha e fundit e hyrjes: $ në kohë
";

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

Rezultati:

popen.php është 289 bajt.

Ora 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ë kam përdorur konstruktin e listës () për të emërtuar secilën vlerë të kthyer. Sigurisht, po aq mirë mund të ktheni një grup, të përsërisni elementët në një lak dhe të shfaqni të gjithë informacionin e nevojshëm. Siç mund ta shihni, funksioni stat () ofron informacione të ndryshme të dobishme për një skedar.

Shfaqja dhe ndryshimi i karakteristikave të skedarit

Çdo skedar në sistemet 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 jeni i ri në sistemet operative UNIX, informacioni mbi specifikimet e sistemit të skedarëve UNIX mund të merret nga 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 skedari i specifikuar. Sintaksa për funksionin chgrp () është:

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

Funksioni i grupit të skedarëve () kthen ID-në e grupit të pronarit të skedarit me emrin e dhënë, ose FALSE në gabim. Sintaksa për funksionin e grupit të skedarëve () është:

grup skedari int (emri i skedarit të vargut)

Funksioni chmod () ndryshon të drejtat e skedarit me emrin e dhënë. Sintaksa për funksionin chmod () është:

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

Lejet janë në tetë. 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 specifikuar, ose FALSE në gabim. Sintaksa për funksionin fileperms () është:

int fileperms (emri i skedarit të vargut)

Funksioni chown () përpiqet të ndryshojë pronarin e një skedari. Vetëm përdoruesi i privilegjuar ka të drejtë të ndryshojë pronarin e një skedari. Sintaksa për funksionin chown () është:

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

Funksioni i pronarit të skedarit () kthen ID-në e përdoruesit të pronarit të skedarit me emrin e dhënë. Sintaksa për funksionin e pronarit të skedarit () është:

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ë kryejnë skriptet PHP përfshijnë kopjimin dhe riemërtimin e skedarëve në server. Këto operacione kryhen nga dy funksione: litter () dhe riemërtimi ().

Kopjimi i një skedari në një skript PHP nuk është më i vështirë sesa përdorimi i komandës UNIX cf. Detyra zgjidhet nga funksioni PHP sopu (). Sintaksa për funksionin copu () është:

kopje int (burimi i vargut, destinacioni i vargut)

Funksioni copu () përpiqet të kopjojë skedarin burim në skedarin e destinacionit; kthen TË VËRTETË në sukses dhe FALSE në dështim. Nëse skedari i destinacionit nuk ekziston, funksioni litter () e krijon atë. Shembulli i mëposhtëm tregon se si të kopjoni një skedar duke përdorur funksionin copu ():

$ data_file = "datal.txt";

kopje ($ data_file. $ data_file ".bak") ose die ("Nuk mund të kopjoj $ data_file");

Funksioni i riemërtimit () riemëron një skedar. Kthen TË VËRTETË në sukses dhe FALSE në dështim. Sintaksa për funksionin e riemërtimit () është:

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

Një shembull i riemërtimit të një skedari me funksionin e riemërtimit ():

$ data_file = "datal.txt";

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

Fshirja e skedarëve

Funksioni unlink () heq skedarin me emrin e dhënë. Sintaksë:

int unlink (skedar string)

Nëse jeni duke përdorur PHP në një sistem Windows, ndonjëherë lindin probleme kur përdorni këtë funksion. Në këtë rast, mund të përdorni funksionin e sistemit () të përshkruar më sipër dhe të fshini skedarin me komandën DOS del:

sistemi ("del filename.txt");

Puna me drejtoritë

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

Listimi 7.8. Struktura tipike e drejtorisë

Funksioni dirname () plotëson emrin bazë () për të nxjerrë shtegun nga emri i skedarit plotësisht i kualifikuar. Sintaksa për funksionin dirname () është:

vargu dirname (shtegu i vargut)

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

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

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

Funksioni dirname () përdoret ndonjëherë në lidhje me ndryshoren $ SCRIPT_FILENAME për të marrë shtegun e plotë drejt skriptit nga i cili po ekzekutohet komanda:

$ dir - dirname ($ SCRIPT_FILENAME);

Funksioni is_dir () kontrollon nëse skedari me emrin e dhënë ë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 = është_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 për funksionin mkdir () është:

int mkdir (shtegu i vargut, modaliteti int)

Parametri i rrugës përcakton shtegun për krijimin e një drejtorie të re. Mos harroni të përfundoni parametrin me emrin e drejtorisë së re! Parametri i modalitetit përcakton lejet që do t'i caktohen drejtorisë së krijuar.

Ashtu si funksioni fopen () hap një manipulues për manipulimin e skedarit të specifikuar, funksioni opendir () hap një manipulues për manipulimin e një drejtorie. Sintaksa për funksionin opendir () është:

int opendir (shtegu i vargut)

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

mbyllja e zbrazët (int dir_manipulator)

Funksioni readdir () kthen hyrjen tjetër në drejtorinë e specifikuar. Sintaksë:

leximi i vargut (int dir_manipulator)

Me këtë funksion, ju lehtë mund të rendisni të gjithë skedarët dhe nëndrejtoritë në drejtorinë aktuale:

$ dh = opendir (".);

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

printoni skedarin "$
"; endwhile;

Funksioni chdir () funksionon njësoj si komanda UNIX cd - ai lundron në drejtorinë e specifikuar nga parametri. Sintaksa për funksionin chdir () është:

int chdir (drejtoria e vargut)

Në shembullin e mëposhtëm, ne shkojmë te libri / nëndirektoria dhe shfaqim 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 skedarin "$
";

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

void rewinddir (int dir_nip)

Projekti 1: një numërues i thjeshtë goditjesh

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 pseudokodit:

  1. Vendosni variablin $ access në emrin e skedarit ku do të ruhet vlera e numëruesit.
  2. Përdorni funksionin fileе () për të lexuar përmbajtjen e $ access në grupin e vizitave $. Parashtesa @ përpara emrit të funksionit shtyp gabimet e mundshme (për shembull, mungesa e një skedari me emrin e dhënë).
  3. Cakto variablin $current_visitors në elementin e parë (dhe të vetëm) në grupin $ visits.
  4. Rritni vlerën e $ aktual_vizitorëve me 1.
  5. Hapni skedarin $ access për shkrim dhe vendosni treguesin e pozicionit aktual në fillim të skedarit.
  6. Shkruani vlerën e $ current_visitors në skedarin $ access.
  7. Mbyllni dorezën që referon aksesin $.

Listimi 7.9. Numër i thjeshtë i goditjeve

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

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

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

$ aktual_vizitorët = $ vizita; // Merrni artikullin e parë (dhe të vetëm).

++ $ aktual_vizitorët; // Rritni numrin e goditjeve

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

// treguesi i pozicionit aktual në fillim të skedarit

@fwrite ($ fh, $ aktual_vizitorët); // Shkruani vlerën e re të kundërvlerësimit

// në skedarin "hits.txt"

fclose ($ fh); // Mbyll dorezën e skedarit "hits.txt"

Projekti 2: ndërtimi i një siti

Skripti në Listimin 7-10 ndërton një hartë siti - një pamje hierarkike të të gjitha dosjeve dhe skedarëve në server, duke filluar nga një direktori e caktuar. Gjatë llogaritjes së dhëmbëzimit të elementeve që përbëjnë hartën e faqes, përdoren funksionet e përcaktuara në këtë dhe 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 sistem tjetër).
  2. Deklaroni funksionin display_directory () që lexon përmbajtjen e drejtorisë dhe e formaton atë për t'u shfaqur në shfletues.
  3. Ndërtoni shtegun e drejtorisë duke bashkuar emrin e kaluar në ndryshoren $ dir1 me $ dir.
  4. Hapni drejtorinë dhe lexoni përmbajtjen e saj. Formatoni emrat e dosjeve dhe skedarëve dhe shfaqini ato në shfletues.
  5. Nëse skedari aktual është një direktori, thirrni në mënyrë rekursive funksionin rectory () të display_di 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 formatohet për t'u shfaqur si një hiperlidhje (dhe llogaritet edhe dhëmbëzimi i përdorur për formatim).

Listimi 7.10. Programi Sitemap.php

// Skedari: sitemap.php

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

// Drejtoria nga e cila do të fillojë ndërtimi i hartës

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

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

// Shtegu duhet të vendoset në lidhje me * direktoriumin rrënjë të serverit Apache

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

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

// A do të përdoret skripti në 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 hierarkisë së drejtorisë dhe skedarit.

// 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);

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

// Artikujt e drejtorisë "." dhe ".." nuk shfaqen.

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

nëse ($ using_linux == 0):

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

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

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

$ tab_thellësia = $ aktuale_deptn - $ init_depth;

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

skedar $ = $ dir. "/", skedari $; endif;

// A përmban ndryshorja e skedarit $ një drejtori? nëse (është dir (skedar $)):

// Llogaritni dhëmbëzimin

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

$ x ++; endwhile;

print"

".basename (skedar $)."
";

// Rritja e numëruesit

// Thirrni në mënyrë rekursive funksionin display_directory ().

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

// Ai drejtori

// Ndërtoni shtegun sipas rregullave të përdorura

// sistemi operativ.

nëse ($ using_linux == 0):

$ tab_thellësia = ($ aktuale_thellësia - $ init_depth) - 2; $ x = 0;

// Llogaritni dhëmbëzimin

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

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

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

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

// Mbyll drejtorinë e mbyllur ($ dh);

<? print "$page_name"; ?>

// Llogaritni mbushjen fillestare

nëse ($ using_linux == 0):

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

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

$ init_thellësia = madhësia e ($ thellësia);

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

Në fig. 7.1 tregon daljen e një skripti për një drejtori me disa kapituj në këtë libër.

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

Rezultatet

Ky kapitull prezantoi shumë nga mjetet PHP për të punuar me skedarë. Konkretisht, ne shqyrtuam çështjet e mëposhtme:

  • kontrollimi për ekzistencën e skedarëve;
  • hapja dhe mbyllja e skedarëve dhe rrymave I/O;
  • shkrim dhe lexim nga një skedar;
  • ridrejtimi i një skedari në një rrjedhë dalëse;
  • nisja e programeve të jashtme;
  • operacionet e sistemit të skedarëve.

Ky kapitull vendosi skenën për kapitullin tjetër, "Strings dhe shprehjet e rregullta", sepse trajtimi i vargjeve dhe I/O janë të lidhura ngushtë në zhvillimin e ueb-it.

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

PHP përcakton funksionin fopen () për të hapur skedarë. Ai ka përkufizimin e mëposhtëm: burimi fopen (vargu $ emri i skedarit, vargu $ modaliteti). Parametri i parë, emri i skedarit $, përfaqëson shtegun për në skedar, dhe i dyti, modaliteti i hapur. 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. Kthen false nëse skedari nuk ekziston

    "r +": Skedari hapet vetëm për lexim me aftësinë për të shkruar. Kthen false nëse skedari nuk ekziston

    "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ë, të dhënat shkruhen në fund të skedarit dhe të dhënat e vjetra mbeten. Nëse skedari nuk ekziston, atëherë ai krijohet

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

Funksioni fopen kthen një përshkrues skedari. Ky dorezë përdoret për operacionet e skedarëve dhe për mbylljen e tij.

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 të hapte skedarin"); fclose ($ fd);

Konstruksioni ose die ("teksti i gabimit") ju lejon të përfundoni skriptin dhe të shfaqni një mesazh gabimi nëse funksioni fopen nuk mund të hapte skedarin.

Leximi i një skedari

Mund të përdoren disa funksione për të lexuar skedarin. 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 që lexon. Për të gjurmuar fundin e një skedari, përdoret funksioni feof (), i cili kthehet i vërtetë kur skedari përfundon. Derisa të arrihet fundi i skedarit, mund të përdorim funksionin fgets ().

Duke lexuar të gjithë skedarin

Në këtë rast, nuk kemi nevojë të hapim skedarin në mënyrë eksplicite, të marrim përshkruesin dhe më pas të mbyllim skedarin.

Blloko leximin

Ju gjithashtu mund të kryeni leximin 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: përshkruesin e skedarit për t'u lexuar dhe numrin e bajteve për t'u lexuar. Kur lexohet një bllok, treguesi i skedarit lëviz në fund të atij blloku. Dhe gjithashtu duke përdorur funksionin feof (), mund të gjurmoni përfundimin e skedarit.

Regjistrimi i skedarit

Për të shkruar një skedar, përdoret funksioni fwrite (), i cili shkruan një rresht në skedar:

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

Duke punuar me një tregues skedari

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

Int fseek (burimi $ dorezë, int $ offset [, int $ prej nga = SEEK_SET])

Parametri $ handle përfaqëson një dorezë në skedar. 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 nga fillimi i skedarit

    SEEK_CUR: cakton një kompensim në bajt të zhvendosur nga fillimi i pozicionit aktual në skedar

    SEEK_END: ​​cakton një bajt të zhvendosur nga fundi i skedarit

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

Një shembull i përdorimit të funksionit:

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

shkarkime _ $ (8)

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

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

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

Por tani më duhet të shkarkoj 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:

$ të dhëna = përfshijnë $ filePath;

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

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

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

Pastaj përmbajtja e skedarit do të ngarkohet. Skedari PHP duhet të jetë i formuar plotësisht me etiketaQë vlerësimi ta vlerësojë atë.

Unë supozoj se ju dëshironi të merrni Përmbajtja e krijuar nga PHP, po të jetë kështu:

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

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

$ Vdata = file_get_contents ("rruga / drejt / JUAJ / 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ç sugjeroi syri, do të mund të lexoni vetëm daljen e skriptit PHP. Ju mund të lexoni skriptin PHP vetëm nëse ndodhet në të njëjtin server me skriptin tuaj. Atëherë mund të përdorni diçka të tillë

$ Vdata = file_get_contents ("/ rruga / te / juaj / file.php");

Kështu 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. Transformimi Json në objekt Javascript

HAPI 1

connect_error) (die ("Lidhja dështoi:". $ conn-> connect_error);) $ sql = "ZGJEDH id, emrin, imazhin NGA telefoni"; $ rezultat = $ conn-> pyetje ($ sql); ndërsa ($ row = $ rezultat-> fetch_assoc ()) ($ v = $ rresht;) echo json_encode ($ v); $ conn-> mbyll (); ?>

HAPI 2

Funksioni showUser (fnc) (var xhttp = i ri XMLHttpRequest (); xhttp.onreadystatechange = funksion () (nëse (this.readyState == 4 && this.status == 200) (// HAPI 3 var p = JSON.parse ( this.responseText);)))

(PHP 4> = 4.3.0, PHP 5, PHP 7)

file_get_contents - Lexon përmbajtjen e një skedari në një varg

Përshkrim

Varg file_get_contents (vargu $ emri i skedarit [, bool $ use_include_path = false [, burimi $ kontekst [, int $ offset = -1 [, int $ maxlen ]]]])

Ky funksion është i ngjashëm me funksionin skedar () me ndryshimin e vetëm që file_get_contents () kthen përmbajtjen e skedarit në një varg duke filluar nga zhvendosja e specifikuar dhe deri në bajt maxlen. Në rast dështimi, file_get_contents () do të kthehet I RREMË.

Duke përdorur funksionin file_get_contents ()është më e preferueshme nëse keni nevojë të merrni të gjithë përmbajtjen e skedarit, sepse funksioni përdor një teknikë të hartës së kujtesës për të përmirësuar performancën, nëse mbështetet nga sistemi juaj operativ.

Komentoni:

Nëse po hapni një URI që përmban karaktere të veçanta si hapësirë, duhet të kodoni URI-në me urlencode ().

Lista e parametrave

Emri i skedarit që lexohet.

Përdorni_shtegun

Komentoni:

Që nga PHP 5, mund të përdorni konstanten FILE_USE_INCLUDE_PATH për të gjetur skedarin në shtegun e përfshirjes.

kontekst

Burimi i saktë i kontekstit i krijuar nga funksioni stream_context_create ()... Nëse nuk keni nevojë të përdorni një kontekst të veçantë, mund ta kaloni këtë parametër duke kaluar vlerën I PAVLEFSHËM.

Kompensimi me të cilin do të filloni të lexoni transmetimin origjinal.

Gjetja e një kompensimi nuk mbështetet kur punoni me skedarë në distancë. Përpjekja për të gjetur një kompensim në skedarë jo-lokalë mund të funksionojë me zhvendosje të vogla, por ky rezultat është i paparashikueshëm pasi funksionon në një transmetim të buferuar.

Madhësia maksimale e të dhënave që duhet lexuar. Si parazgjedhje, leximi kryhet derisa të arrihet fundi i skedarit. Vini re se ky parametër vlen edhe për transmetimin me filtra.

Vlerat e kthimit

Funksioni kthen të dhënat e lexuara, ose I RREMË në rast të një gabimi.

Kujdes

Ky funksion mund të kthehet si boolean I RREMË, dhe vlerë jo-boolean, e cila është hedhur në I RREMË... Shikoni seksionin Lloji Boolean për më shumë informacion. Përdorni operatorin === për të testuar vlerën e kthyer të këtij funksioni.

Gabimet

Do të krijohet një gabim niveli E_PARALAJMËRIM nëse emri i skedarit nuk mund të gjendet, gjatësia maksimale është më e vogël se zero, ose kërkimi në zhvendosje në transmetim dështon.

Shembuj të

Shembulli # 1 Merrni dhe shfaqni kodin burimor të faqes kryesore të një faqe interneti

Faqja kryesore $ = file_get_contents ("http://www.example.com/");
faqe kryesore echo $;
?>

Shembulli # 2 Gjetja e skedarëve në include_path

// <= PHP 5
$ file = file_get_contents ("./people.txt", e vërtetë);
//> PHP 5
skedar $ = file_get_contents ("./people.txt", FILE_USE_INCLUDE_PATH);
?>

Shembulli # 3 Leximi i një seksioni të një skedari

// Lexoni 14 karaktere, duke filluar nga 21 karaktere
seksioni $ = file_get_contents ("./people.txt", NULL, NULL, 20, 14);
var_dump (seksioni $);
?>

Ky shembull do të rezultojë në diçka të tillë:

vargu (14) "lle Bjori Ro"

Shembulli # 4 Përdorimi i konteksteve të transmetimit

// Krijo një transmetim
$ opts = grup (
grupi "http" => (
"metod" => "MERRNI",
"header" => "Accept-language: en \ r \ n".
"Cookie: foo = bar \ r \ n"
);

$ kontekst = stream_context_create ($ opts);

// Hapni skedarin duke përdorur titujt e mësipërm të HTTP
$ file = file_get_contents ("http://www.example.com/", false, $ kontekst);
?>

Mbyll_njoftoj. PHP do ta raportojë këtë si "SSL: Fatal Protocol Error" në momentin që të arrini në fund të të dhënave. Për të zgjidhur këtë, duhet të vendosni error_raporting në një nivel që përjashton E_WARNING. Versionet PHP 4.3.7 dhe më të vjetra mund të zbulojnë se IIS problematike është në anën e serverit kur hapni një transmetim duke përdorur një mbështjellës https: // dhe nuk shfaq një paralajmërim. Nëse jeni duke përdorur fsockopen () për krijimin ssl: // prizë, ju jeni përgjegjës për përcaktimin dhe shtypjen e këtij paralajmërimi.

Artikujt kryesorë të lidhur