Php saglabāt txt failā. Darbs ar failu sistēmu

Pirms mēģināt strādāt ar failu, ir ieteicams pārliecināties, vai tas pastāv. Lai atrisinātu šo problēmu, parasti tiek izmantotas divas funkcijas:

file_exists() un is_file().

Funkcija file_exists() pārbauda, ​​vai dotais fails eksistē. Ja fails pastāv, funkcija atgriež TRUE, pretējā gadījumā tā atgriež FALSE. Funkcijas file_exists() sintakse ir:

bool file_exists(virknes fails)

Faila esamības pārbaudes piemērs:

ja (!file_exists($faila nosaukums)) :

drukāt "Fails $faila nosaukums neeksistē!";

ir_fails()

Funkcija is_file() pārbauda dotā faila esamību un spēju ar to veikt lasīšanas/rakstīšanas darbības. Būtībā is_file () ir spēcīgāka faila_exists () versija, kas ne tikai pārbauda, ​​vai fails pastāv, bet arī to, vai tas var lasīt un rakstīt datus:

bool is_file(virknes fails)

Šis piemērs parāda, kā pārbaudīt, vai fails eksistē un vai ar to var veikt darbības:

$fails = "somefile.txt";

if (ir_fails($fails)) :

print "Fails $fails ir derīgs un pastāv!";

print "Fails $file neeksistē vai tas nav derīgs fails!";

Pārliecinoties, ka vēlamais fails eksistē un ar to var veikt dažādas lasīšanas/rakstīšanas darbības, varat pāriet uz nākamo soli – faila atvēršanu.

Funkcija fileize() atgriež faila izmēru (baitos) ar doto nosaukumu vai kļūdas gadījumā FALSE. Funkcijas Filesize() sintakse:

int faila izmērs (virknes faila nosaukums)

Pieņemsim, ka vēlaties noteikt faila pastry.txt lielumu. Lai iegūtu nepieciešamo informāciju, varat izmantot fileize() funkciju:

$fs = faila izmērs("konditorejas izstrādājumi.txt"); drukāt "Pastry.txt ir $fs baiti.";

Tiek parādīts šāds rezultāts:

Pastry.txt ir 179 baiti.

Lai varētu veikt darbības ar failu, tas ir jāatver un jāsaista ar failu apdarinātāju, un pēc tam, kad esat pabeidzis darbu ar failu, tas ir jāaizver. Šīs tēmas ir apskatītas nākamajā sadaļā.

Failu atvēršana un aizvēršana

Pirms faila ievades/izvades veikšanas tas ir jāatver, izmantojot fopen().

Funkcija fopen () atver failu (ja tāds pastāv) un atgriež veselu skaitli, ko sauc failu manipulators(faila rokturis). funkcijas fopen() sintakse:

int fopen (virknes fails, virknes režīms [, int enable_path])

Atvērtais fails var būt vietējā failu sistēmā, pastāvēt kā standarta ievades/izvades straume vai attēlot failu attālā sistēmā, kas pieņemta, izmantojot HTTP vai FTP.

Faila parametru var norādīt vairākos veidos, kas norādīti tālāk:

Ja parametrs satur lokālā faila nosaukumu, fopen () atver šo failu un atgriež rokturi.

Ja parametrs ir norādīts kā php://stdin, php://stdout vai php://stderr, tiek atvērta atbilstošā standarta ievades/izejas straume.

Ja parametrs sākas ar http:// prefiksu, funkcija atver HTTP savienojumu ar serveri un atgriež norādītā faila turi.

Ja parametrs sākas ar prefiksu ftp://, funkcija atver FTP savienojumu ar serveri un atgriež norādītā faila turi. Šajā gadījumā ir jāpievērš īpaša uzmanība divām lietām: Ja serveris neatbalsta pasīvo FTP režīmu, fopen() izsaukums neizdosies. Turklāt FTP faili tiek atvērti lasīšanai vai rakstīšanai.

Darbojoties pasīvajā režīmā, YAR serveris gaida savienojumus no klientiem. Strādājot aktīvajā režīmā, serveris pats izveido savienojumu ar klientu. Noklusējums parasti ir aktīvais režīms.

Mode parametrs nosaka spēju lasīt un rakstīt failā. Tabulā 7.1 uzskaita dažas vērtības, kas nosaka faila atvēršanas režīmu.

7.1. tabula. Failu atvēršanas režīmi

Režīms Apraksts
Tikai lasīšana. Pašreizējās pozīcijas rādītājs ir iestatīts uz faila sākumu
r+ Lasi un raksti. Pašreizējās pozīcijas rādītājs ir iestatīts uz faila sākumu
w Tikai ierakstīšana. Pašreizējās pozīcijas rādītājs tiek iestatīts uz faila sākumu, un viss faila saturs tiek iznīcināts. Ja fails neeksistē, funkcija mēģina to izveidot
w+ Lasi un raksti. Pašreizējās pozīcijas rādītājs tiek iestatīts uz faila sākumu, un viss faila saturs tiek iznīcināts. Ja fails neeksistē, funkcija mēģina to izveidot
a Tikai ierakstīšana. Pašreizējās pozīcijas rādītājs ir iestatīts uz faila beigām. Ja fails neeksistē, funkcija mēģina to izveidot
a+ Lasi un raksti. Pašreizējās pozīcijas rādītājs ir iestatīts uz faila beigām. Ja fails neeksistē, funkcija mēģina to izveidot

Ja neobligātais trešais parametrs include_path ir 1, tad faila ceļš ir saistīts ar iekļauto direktoriju, kas norādīts failā php.ini (skatiet 1. nodaļu).

Tālāk ir parādīts faila atvēršanas piemērs, izmantojot funkciju fopen (). Izsaukums die(), ko izmanto kopā ar fopen(), nodrošina kļūdas ziņojumu, ja failu nevar atvērt:

$fails = "lietotāja dati.txt"; // Kāds fails

$fh = fopen($fails, "a+") or die("Fails ($fails) neeksistē!");

Šis fragments atver savienojumu ar PHP vietni (http://www.php.net):

$site = "http://www.php.net": // Serveris pieejams, izmantojot HTTP

$sh = fopen($site., "r"); //Saistiet manipulatoru ar Php.net rādītāja lapu

Pēc darba pabeigšanas fails vienmēr ir jāaizver, izmantojot fclose().

Funkcija fclose() aizver failu ar doto manipulatoru. Ja slēgšana ir veiksmīga, tiek atgriezta TRUE, ja slēgšana ir neveiksmīga, tiek atgriezta FALSE. Funkcijas fclose() sintakse:

int fclose (int manipulators)

Funkcija fclose() veiksmīgi aizver tikai tos failus, kurus iepriekš atvēra funkcija fopen() vai fsockopen(). Faila aizvēršanas piemērs:

$fails = "lietotāja dati.txt";

if (file_exists($file)) :

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

// Veikt failu darbības

drukāt "Fails fails neeksistē!";

Rakstīt failā

Ar atvērtiem failiem tiek veiktas divas galvenās darbības: lasīšana un rakstīšana.

Funkcija is_writeable() pārbauda, ​​vai fails pastāv un vai to var rakstīt. Rakstāmība tiek pārbaudīta gan failam, gan direktorijam. Funkcijas is_writeable() sintakse ir:

bool is_writeable (virknes fails)

Viena svarīga lieta, kas jāņem vērā, ir tāda, ka PHP, visticamāk, darbosies ar tīmekļa servera izmantoto lietotāja ID (parasti "neviens"). Piemērs, kā izmantot is_writeable() ir dots funkcijas fwrite() aprakstā.

Funkcija fwrite() ieraksta virknes mainīgā saturu failā, ko norādījis failu apstrādātājs. Fwrite() funkcijas sintakse:

int fwrite(int manipulators, virknes mainīgais [, int garums])

Ja, izsaucot funkciju, tiek nodots izvēles garuma parametrs, rakstīšana tiek pārtraukta vai nu pēc norādītā rakstzīmju skaita ierakstīšanas, vai arī tad, kad ir sasniegts rindas beigas. Pārbaude, vai failā var rakstīt, ir parādīts šajā piemērā:

// Informācija par trafiku lietotāja vietnē

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

$faila nosaukums = "dažs fails.txt";

// Ja fails pastāv un tajā var rakstīt

if (ir_writeable($faila nosaukums)) :

$fh = fopen($faila nosaukums, "a+");

// Ierakstiet $data saturu failā

$ panākumi - fwrite($fh, $data);

// Aizveriet failu

fclose($fh); cits:

drukāt "Nevarēja atvērt Sfilename rakstīšanai";

Funkcija fputs() ir fwrite() aizstājvārds, un to var izmantot visur, kur tiek izmantots fwrite().

Funkcija fputs() ir fwrite() aizstājvārds, un tai ir tieši tāda pati sintakse. Funkcijas fputs() sintakse:

int fputs (int manipulators, virknes mainīgais [, int garums])

Personīgi es gribētu izmantot fputs (). Jāatceras, ka tas ir tikai stila jautājums un tam nav nekāda sakara ar atšķirībām starp abām funkcijām.

Lasīšana no faila

Neapšaubāmi, lasīšana ir vissvarīgākā darbība, kas tiek veikta ar failiem. Tālāk ir norādītas dažas funkcijas, kas padara nolasīšanu no faila efektīvāku. Šo funkciju sintakse gandrīz precīzi kopē līdzīgu ierakstīšanas funkciju sintaksi.

Funkcija i s_readable() ļauj pārbaudīt, vai fails pastāv un ir lasāms. Tiek pārbaudīta gan faila, gan direktorija lasāmība. Funkcijas is_readable() sintakse ir:

bāā! ir_lasāms(virknes fails]

Visticamāk, PHP darbosies ar tīmekļa servera izmantoto lietotāja ID (parasti "nobody"), tāpēc, lai funkcija is_readable() atgrieztu TRUE, failam ir jāļauj lasīt visiem. Šis piemērs parāda, kā pārbaudīt, vai fails eksistē un ir lasāms:

if (ir_lasāms($faila nosaukums)) :

// Atveriet failu un iestatiet pašreizējās pozīcijas rādītāju uz faila beigām

$fh = fopen($faila nosaukums, "r");

print "$ faila nosaukums nav lasāms!";

Funkcija fread() nolasa norādīto baitu skaitu no faila, ko norādījis failu manipulators. Fwrite() funkcijas sintakse:

int fread (int manipulators, int garums)

Manipulatoram ir jāatsaucas uz atvērtu failu, kas ir lasāms (skatiet funkcijas is_readable() aprakstu). Lasīšana tiek pārtraukta pēc noteikta baitu skaita nolasīšanas vai faila beigas sasniegšanas. Apsveriet teksta failu pastry.txt, kas parādīts sarakstā 7.1. Šī faila lasīšanu un izvadīšanu pārlūkprogrammā veic šāds fragments:

$fh = fopen("pastry.txt", "r") vai die("Nevar atvērt failu!");

$fails = fread($fh, faila izmērs($fh));

Izmantojot funkciju flesize(), lai noteiktu faila pastry.txt lielumu baitos, tiek nodrošināts, ka funkcija fread() nolasa visu faila saturu.

Uzskaitījums 7.1. Teksta fails pastry.txt

Recepte: Konditorejas mīkla

1 1/4 glāzes universālo miltu

3/4 kociņa (6 ēdamkarotes) nesālīta sviesta, sasmalcināta

2 ēdamkarotes dārzeņu saīsināšanas 1/4 tējkarotes sāls

3 ēdamkarotes ūdens

Funkcija fgetc() atgriež virkni, kurā ir viena rakstzīme no faila pašreizējā rādītāja pozīcijā vai FALSE, kad tiek sasniegts faila beigas. Funkcijas fgetc() sintakse:

virkne fgetc (int manipulators)

Manipulatoram ir jāatsaucas uz atvērtu failu, kas ir lasāms (sk. funkcijas is_readable() aprakstu iepriekš šajā nodaļā). Šis piemērs parāda faila lasīšanu un izvadi pa rakstzīmēm, izmantojot funkciju fgetc():

$fh = fopen("konditorejas izstrādājumi.txt", "r"); kamēr (!feof($fh)) :

$char = fgetc($fh):

drukāt $char; beigas;

Funkcija fgets() atgriež virkni, kas nolasīta no pašreizējās rādītāja pozīcijas failā, ko norādījis failu apstrādātājs. Faila rādītājam jānorāda uz atvērtu failu, kas ir lasāms (sk. funkcijas is_readable() aprakstu šajā nodaļā). Funkcijas fgets() sintakse:

virknes fgets (int manipulators, int garums)

Lasīšana tiek pārtraukta, ja ir izpildīts viens no šiem nosacījumiem:

  • lasīt no faila garuma -- 1 baits;
  • no faila tika nolasīta jaunrindas rakstzīme (iekļauta atgrieztajā virknē);
  • Faila beigu (EOF) karodziņš ir nolasīts no faila.

Ja vēlaties sakārtot faila lasīšanu pa rindiņām, ievadiet otrajā parametrā vērtību, kas acīmredzami ir lielāka par baitu skaitu rindā. Faila lasīšanas un izvades rindiņas piemērs:

$fh = fopen("konditorejas izstrādājumi.txt", "r");

while (!feof($fh));

$rinda = fgets($fh, 4096);

drukāt $ line. "
";

Funkcija fgetss() ir pilnīgi līdzīga fgets() ar vienu izņēmumu - tā mēģina noņemt visus HTML un PHP tagus no lasītā teksta:

virkne fgetss (Int manipulators, int garums [, virkne atļautie_tags])

Pirms pāriet pie piemēriem, pārskatiet 7.2. saraksta saturu — šis fails tiek izmantots sarakstos 7.3. un 7.4.

Uzskaitījums 7.2. Fails science.html

Jaunākās ziņas — zinātne

Atklāta citplanētiešu dzīvības forma


2000. gada 20. augusts

Agrā rītā W. J. Gilmore vecā dzīvokļa ledusskapja skapī tika atrasts jauns dīvains sēnītes veids. Nav zināms, vai spēcīgais starojums, kas izplūst no īrnieka datora monitora, veicināja šo attīstību.

Uzskaitījums 7.3. Tagu noņemšana no HTML faila pirms parādīšanas pārlūkprogrammā

$fh = fopen("zinātne.html", "r");

kamēr (!feof($fh)) :

drukāt fgetss ($ fh, 2048);

Rezultāts ir parādīts zemāk. Kā redzat, visi HTML tagi ir noņemti no faila science.html, kā rezultātā tiek zaudēts formatējums:

Dažās situācijās no faila tiek noņemti visi tagi, izņemot dažus, piemēram, rindas pārtraukuma tagus
. 7.4. saraksts parāda, kā tas tiek darīts.

Uzskaitījums 7.4. Selektīva tagu noņemšana no HTML faila

$fh = fopenC"zinātne.html", "r");

$allowable = "
";

kamēr (!feof($fh)) :

izdrukāt fgetss($fh. 2048, $allowable);

Rezultāts:

Jaunākās ziņas — Zinātnes citplanētiešu dzīvības forma tika atklāta 2000. gada 20. augustā. Šorīt V. J. Gilmora vecā dzīvokļa ledusskapja skapī tika atrasts jauns dīvains sēnītes veids. Nav zināms, vai īrnieka datora monitora radītais spēcīgs starojums to palīdzēja evolūcija.

Kā redzat, funkcija fgetss() atvieglo failu konvertēšanu, it īpaši, ja jums ir liels skaits līdzīgi formatētu HTML failu.

Faila lasīšana masīvā

Funkcija file() ielādē visu faila saturu indeksējamā masīvā. Katrs masīva elements atbilst vienai faila rindai. Funkcijas File() sintakse:

masīva fails (virknes fails [, int iekļaut_ceļš])

Ja neobligātais trešais parametrs include_path ir 1, tad faila ceļš ir saistīts ar iekļauto direktoriju, kas norādīts failā php.ini (skatiet 1. nodaļu). Sarakstā 7.5 tiek izmantota funkcija file(), lai ielādētu failu pastry.txt (skatiet sarakstu 7.1).

$fails_masīvs = fails("konditors.txt");

while (list($line_num. $line) = everyt($file_array)):

drukāt " Rinda $line_num:", htmlspecialchars($line), "
\n"

Katra masīva rinda tiek izdrukāta kopā ar skaitli:

0. rinda: recepte: mīklas izstrādājumi

1. rindiņa: 1 1/4 glāzes universālu miltu

2. rinda: 3/4 nūjas (6 ēdamkarotes) nesālīta sviesta, sasmalcināta

3. rinda: 2 ēdamkarotes dārzeņu saīsināšanas

4. rinda: 1/4 tējkarotes sāls

5. rinda: 3 ēdamkarotes ūdens

Faila novirzīšana uz standarta izvadi

Funkcija readfile() nolasa faila saturu un ieraksta to standarta izvadē (vairumā gadījumu pārlūkprogrammā). Readfile() funkcijas sintakse:

int lasīšanas fails (virknes fails [, int iekļaut_ceļš])

Funkcija atgriež nolasīto baitu skaitu. Fails var atrasties lokālajā failu sistēmā, pastāvēt kā standarta ievade/izvade vai attēlot failu attālā sistēmā, kas pieņemta, izmantojot HTTP vai FTP. Faila parametrs tiek iestatīts saskaņā ar tiem pašiem noteikumiem kā funkcijā fopen ().

Pieņemsim, ka jums ir fails latorre.txt, kura saturu vēlaties parādīt pārlūkprogrammā:

Restorāns "La Torre". atrodas Nettuno, Itālijā, piedāvā eklektisku stila sajaukumu. vēsturi un izsmalcinātu jūras velšu virtuvi. Viduslaiku borgo sienās, kas ieskauj pilsētu, var pusdienot, vērojot garāmgājēju veikalu ciemata veikalos. Komforts apvienojumā ar svaigākajiem jūras ēdieniem padara La Torre par vienu no Itālijas labākajiem restorāniem.

Kad tiek izpildīts šāds fragments, viss faila latorre.txt saturs tiek nosūtīts uz standarta izvadi:

$restaurant_file = "latorre.txt";

// Nosūtiet visu failu uz standarta izvadi

readfile($restorāna_fails);

Procesa failu apstrādātāja atvēršana

Papildus parastajiem failiem varat atvērt failu manipulatorus, lai mijiedarbotos ar servera procesiem. Problēmu atrisina funkcija popen(), kurai ir šāda sintakse:

int popen (virknes komanda, virknes režīms)

Komandas parametrs norāda izpildāmo sistēmas komandu, un režīma parametrs apraksta piekļuves režīmu:

// Atveriet failu "spices.txt" rakstīšanai

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

// Pievienojiet dažas teksta rindiņas

fputs($fh, "Pētersīļi, salvija, rozmarīns\n");

fputs($fh, "Paprika, sāls, pipari\n");

fputs($fh, "baziliks, salvija, ingvers\n");

// Aizveriet manipulatoru

// Atveriet UNIX grep procesu, lai meklētu vārdu Basil failā spices.txt

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

// Drukājiet grep rezultātu

Rezultāts izskatās šādi:

Baziliks, salvija, ingvers

Funkcija fpassthru() ir līdzīga funkcijai passthru(), kas aplūkota šīs nodaļas sadaļā “Ārējo programmu palaišana”.

Pēc visu darbību pabeigšanas fails vai process ir jāaizver. Funkcija pclose () aizver savienojumu ar manipulatora norādīto procesu, līdzīgi kā funkcija fclose () aizver failu, ko atver funkcija fopen (). Funkcijas pclose() sintakse:

int pclose (int manipulators)

Parametrā manipulators tiek pārsūtīts iepriekš saņemtais manipulators ar veiksmīgu popen() izsaukumu.

Kontaktligzdas savienojuma atvēršana

PHP neaprobežojas tikai ar mijiedarbību ar failiem un procesiem — jūs varat arī izveidot savienojumus, izmantojot ligzdas. Kontaktligzda Socket ir programmatūras abstrakcija, kas ļauj sazināties ar dažādiem pakalpojumiem citā datorā.

Fsockopen() funkcija izveido ligzdas savienojumu ar serveri internetā

izmantojot TCP vai UDP protokolu. Funkcijas fsockopen() sintakse:

int fsockopen (virknes mezgls, int ports [, int kļūdas_kods [, virknes kļūdas_teksts [, int taimauts]]])

Izvēles parametri error_code un error_text satur informāciju, kas tiks parādīta, ja neizdosies izveidot savienojumu ar serveri. Abi parametri ir jānodod ar atsauci. Trešais izvēles parametrs, taimauts, norāda laiku, cik ilgi jāgaida atbilde no servera (sekundēs). Saraksts 7.6 parāda funkcijas fsockopen() izmantošanu servera informācijas iegūšanai. Tomēr, pirms aplūkojat sarakstu 7.6, ir vēl viena funkcija, kas jums jāiepazīst: socket_set_blocking().

UDP (User Datagram Protocol) ir sakaru protokols bez savienojuma.

socket_set_blocking()

Funkcija socket_set_b1ocki ng() ļauj iestatīt taimauta kontroli servera darbībām:

socket_set_blocking(int manipulators, Būla režīms)

Manipulatora parametrs norāda iepriekš atvērto ligzdu, un režīma parametrs izvēlas režīmu, uz kuru ligzda tiek pārslēgta (TRUE bloķēšanas režīmam, FALSE nebloķēšanas režīmam). Funkciju fsockopen() un socket_set_blocking() izmantošanas piemērs ir parādīts sarakstā 7.6.

Uzskaitījums 7.6. Izmantojot fsockopen(), lai iegūtu servera informāciju

funkcija getthehost($host.$path) (

// Atveriet savienojumu ar mezglu

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

// Pārejiet uz bloķēšanas režīmu

socket_set_blocking($fp, 1),

// Sūtīt galvenes

fputs($fp,"GET $path HTTP/1.1\r\n");

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

// Iegūt galvenes

while($x< 10) :

$galvenes = fgets($fp, 4096);

// Aizveriet manipulatoru

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

Palaižot sarakstu 7.6, tiek iegūta šāda izvade:

HTTP/1.1 200 OK Serveris: Microsoft-IIS/4.0 Satura atrašanās vieta:

2000 20:25:06 GMT ETag: "f0a61666dbff1bf1:34a5" Satura garums: 1311

Funkcija pfsockopen () ir pastāvīga fsockopen () versija. Tas nozīmē, ka savienojums netiks automātiski aizvērts, kad beigsies skripts, kurā funkcija tika izsaukta. Funkcijas pfsockopen() sintakse ir:

int pfsockopen (virknes mezgls, int ports [, int kļūdas_kods [, virknes kļūdas_teksts [, int taimauts]]])

Atkarībā no jūsu lietojumprogrammas konkrētajiem mērķiem jums var būt ērtāk izmantot pfsockopen(), nevis fsockopen().

Ārējo programmu palaišana

PHP skripti var arī izpildīt programmas, kas atrodas serverī. Īpaši bieži šī iespēja tiek izmantota, administrējot sistēmu ar interneta pārlūkprogrammas starpniecību, kā arī ērtākai kopsavilkuma informācijas iegūšanai par sistēmu.

Funkcija exec () palaiž noteiktu programmu un atgriež tās izvades pēdējo rindu. Funkcijas exec() sintakse:

string exec (virknes komanda [, virkņu masīvs [, int return]])

Lūdzu, ņemiet vērā, ka funkcija exec() izpilda tikai komandu un nedrukā tās rezultātus. Visu komandu izvadi var saglabāt neobligātā masīva parametrā. Turklāt, ja, norādot masīva parametru, tiek norādīts arī atgriešanas mainīgais, pēdējam tiek piešķirts izpildītās komandas atgriešanas kods.

Sarakstā 7.7 ir parādīts, kā izmantot funkciju exec(), lai izpildītu UNIX ping sistēmas funkciju.

Uzskaitījums 7.7. Pārbauda savienojumu ar serveri, izmantojot funkciju exec().

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

// Operētājsistēmā Windows - exec("ping -n 5 www.php.net. $ping);

priekš ($i=0; $i< count($ping);$i++) :

drukāt "
$ping[$i]";

Rezultāts:

PING www.php.net (208.247.106.187): 56 datu baiti

64 baiti no 208.247.106.187: icmp_seq=0 ttl=243 laiks=66,602 ms

64 baiti no 208.247.106.187: icmp_seq=1 ttl=243 laiks=55,723 ms

64 baiti no 208.247.106.187: icmp_seq=2 ttl=243 laiks=70.779 ms

64 baiti no 208.247.106.187: icmp_seq=3 ttl=243 laiks=55,339 ms

64 baiti no 208.247.106.187: icmp_seq=4 ttl=243 laiks=69,865 ms

www.php.net ping statistika --

Pārsūtītas 5 paketes. Saņemtas 5 paciņas. 0% pakešu zudums

turp un atpakaļ min/avg/max/stddev — 55,339/63,662/70,779/6,783 ms

Muguras apostrofi

Ir vēl viens veids, kā izpildīt sistēmas komandas, kas neprasa izsaukšanas funkcijas - izpildāmā komanda tiek ievietota atpakaļatzīmēs (` `), un tās darbības rezultāti tiek parādīti pārlūkprogrammā. Piemērs:

drukāt "

$izeja
";

Šis fragments parāda tā direktorija saturu, kurā pārlūkprogrammā atrodas skripts.

Iekšējais parametrs ping -c 5 (-p 5 operētājsistēmā Windows) norāda servera aptauju skaitu.

Ja vēlaties tikai atgriezt komandas neformatētus rezultātus, izmantojiet tālāk aprakstīto funkciju passthru().

Funkcija passthru () darbojas tāpat kā exec (), ar vienu izņēmumu - tā automātiski izdrukā komandas rezultātus. Funkcijas passthru() sintakse ir:

spēkā neesošs caurlaide (virknes komanda [, int return])

Ja, izsaucot passthru(), tiek nodots neobligāts atgriešanas parametrs, šis mainīgais tiek iestatīts uz izpildītās komandas atgriešanas kodu.

escapeshellcmd()

Funkcija escapeshellcmd() novērš visas potenciāli bīstamās rakstzīmes, kuras lietotājs varētu ievadīt (piemēram, HTML veidlapā), lai izpildītu komandas exec(), passthru(), system() vai popen(). Sintakse:

virkne escapeshellcmd (virknes komanda)

Lietotāja ievade vienmēr ir jāizturas ar zināmu piesardzību, taču pat tādā gadījumā lietotāji var ievadīt komandas, kuras izpildīs sistēmas komandu funkcijas. Apsveriet šādu fragmentu:

$user_input = `rm -rf *`; // Dzēsiet vecākdirektoriju un visus tā apakšdirektorijus

exec($lietotāja_ievade); // Izpildīt $user_input !!!

Ja netiks veikti piesardzības pasākumi, šāda komanda novedīs pie katastrofas. Tomēr varat izmantot funkcijas escapeshellcmd(), lai izvairītos no lietotāja ievades:

$user_input = `rm - rf *`; // Dzēsiet vecākdirektoriju un visus tā apakšdirektorijus

ex(escapeshellcmd($lietotāja_ievade)); // Bēg no bīstamiem varoņiem

Funkcija escapeshellcmd() aizbēg no * rakstzīmes, neļaujot komandai radīt katastrofālas sekas.

Drošība ir viens no svarīgākajiem tīmekļa programmēšanas aspektiem, tāpēc es veltīju veselu nodaļu šai tēmai un tam, kā tā ir saistīta ar PHP programmēšanu. Plašāku informāciju skatiet 16. nodaļā.

Darbs ar failu sistēmu

PHP ir funkcijas, lai skatītu un veiktu dažādas darbības ar failiem serverī. Informācija par servera faila atribūtiem (atrašanās vieta, īpašnieks un privilēģijas) bieži vien ir noderīga.

Funkcija basename() izvelk faila nosaukumu no nodotā ​​pilnā nosaukuma. Funkcijas Basename() sintakse:

virknes pamatnosaukums(virknes pilns_nosaukums)

Bāzes faila nosaukuma izvilkšana no pilna nosaukuma tiek veikta šādi:

$path = "/usr/local/phppower/htdocs/index.php"; $fails = pamatnosaukums($ceļš); // $fails = "index.php"

Faktiski šī funkcija noņem ceļu no pilna nosaukuma un atstāj tikai faila nosaukumu.

Funkcija getlastmod() atgriež tās lapas pēdējās modifikācijas datumu un laiku, no kuras funkcija tiek izsaukta. Funkcijas Getlastmod() sintakse:

int getlastmod (neesošs)

Atgriešanas vērtība atbilst UNIX datuma/laika formātam, un tās formatēšanai varat izmantot funkciju date(). Šis fragments parāda datumu, kad lapa tika pēdējoreiz mainīta:

echo "Pēdējo reizi modificēts: ".date("H:i:s a". getlastmod());

Funkcija stat() atgriež indeksējamu masīvu ar detalizētu informāciju par failu ar doto nosaukumu:

masīva statistika (virknes faila nosaukums)

Masīva elementos tiek atgriezta šāda informācija:

0 Ierīce

2 Indeksa mezgla aizsardzības režīms

3 Saišu skaits

4 Īpašnieka lietotāja ID

5 Īpašnieku grupas ID

6 Indeksa mezgla ierīces tips

7 Izmērs baitos

8 Pēdējā zvana laiks

9 Pēdējās modifikācijas laiks

10 Pēdējās izmaiņas laiks

11 Failu sistēmas I/O bloka lielums

12 Piešķirto bloku skaits

Tādējādi, ja vēlaties uzzināt, kad failam pēdējo reizi tika piekļūts, apskatiet atgrieztā masīva 8. elementu. Apskatīsim piemēru:

$fails - "datafails.txt";

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

$bsize) = stat($fails);

drukāt "$ fails ir $ izmēra baiti.
";

drukāt "Pēdējais piekļuves laiks: $atime
";

drukāt "Pēdējās modifikācijas laiks: $mtime
";

Rezultāts:

popen.php ir 289 baiti.

Pēdējais piekļuves laiks: 2000. gada 15. augusts 12:00:00

Pēdējās modifikācijas laiks: 2000. gada 15. augusts 10:07:18

Šajā piemērā es izmantoju konstrukciju list(), lai piešķirtu nosaukumus katrai atgriešanas vērtībai. Protams, jūs varat tikpat vienkārši atgriezt masīvu, cilpot elementus un parādīt visu nepieciešamo informāciju. Kā redzat, funkcija stat() ļauj iegūt dažādu noderīgu informāciju par failu.

Faila raksturlielumu parādīšana un mainīšana

Katram failam UNIX saimes sistēmās ir trīs svarīgi parametri:

  • piederība grupai;
  • īpašnieks;
  • atļaujas.

Visas šīs īpašības var mainīt, izmantojot atbilstošās PHP funkcijas. Šajā sadaļā aprakstītie līdzekļi nedarbojas Windows saimes sistēmās.

Ja jums nav pieredzes ar UNIX operētājsistēmām, informāciju par UNIX failu sistēmas īpašībām var atrast vietnē http://sunsite.auc.dk/linux-newbie/FAQ2.htm. Tēmas par dalību grupā, īpašumtiesībām un atļaujām ir apskatītas 3.2.6. sadaļā.

Funkcija chgrp() mēģina mainīt grupu, kurai pieder dotais fails. funkcijas chgrp() sintakse:

int chgrp (virknes faila nosaukums, jaukta grupa)

Funkcija filegroup() atgriež faila īpašnieka grupas ID ar norādīto nosaukumu vai kļūdas gadījumā FALSE. Funkcijas Filegroup() sintakse:

int failu grupa (virknes faila nosaukums)

Funkcija chmod () maina faila ar doto nosaukumu atļaujas. chmod() funkcijas sintakse:

int chmod (virknes faila nosaukums, int atļaujas)

Atļaujas ir norādītas oktālā apzīmējumā. Funkcijas chmod() parametra iestatīšanas specifika ir parādīta šajā piemērā:

chmod ("datu_fails.txt", g+r); // Nedarbojas

chmod ("datu_fails.txt", 766); // Nestrādā

chmod ("datu_fails.txt", 0766); // Darbi

Funkcija fileperms() atgriež atļaujas failam ar doto nosaukumu vai kļūdas gadījumā FALSE. Funkcijas Fileperms() sintakse:

int fileperms (virknes faila nosaukums)

Funkcija chown() mēģina mainīt faila īpašnieku. Tiesības mainīt faila īpašnieku ir tikai priviliģētajam lietotājam. funkcijas chown() sintakse:

int chown (virknes faila nosaukums, jaukts lietotājs)

Funkcija fileowner() atgriež lietotāja ID faila īpašniekam ar doto nosaukumu. Funkcijas Fileowner() sintakse:

int faila īpašnieks (virknes faila nosaukums)

Failu kopēšana un pārdēvēšana

Citas noderīgas sistēmas funkcijas, ko var veikt PHP skriptos, ietver failu kopēšanu un pārdēvēšanu serverī. Šīs darbības veic divas funkcijas: kopēt () un pārdēvēt ().

Faila kopēšana PHP skriptā nav grūtāka nekā UNIX cf komandas izmantošana. Problēmu atrisina PHP funkcija copy (). Funkcijas soru() sintakse:

int kopija (virknes avots, virknes galamērķis)

Funkcija copy() mēģina kopēt avota failu mērķa failā; TRUE tiek atgriezta par panākumiem, FALSE par neveiksmi. Ja mērķa fails neeksistē, funkcija copy () to izveido. Šis piemērs parāda, kā izveidot faila rezerves kopiju, izmantojot funkciju copy():

$data_file = "data.txt";

copy($data_file. $data_file.bak") or die("Nevarēja nokopēt $data_file");

Funkcija pārdēvēt () pārdēvē failu. Ja tas ir veiksmīgs, tiek atgriezta TRUE, un, ja tā nav veiksmīga, tiek atgriezta FALSE. Funkcijas Rename() sintakse:

bool pārdēvēt (virkne old_name, virkne new_name)

Piemērs faila pārdēvēšanai, izmantojot funkciju rename():

$data_file = "data.txt";

rename($data file, $datafile.old") or die("Nevarēja pārdēvēt $data failu");

Failu dzēšana

Funkcija unlink() izdzēš failu ar doto nosaukumu. Sintakse:

int atsaistīt (virknes fails)

Ja strādājat ar PHP Windows sistēmā, dažkārt var rasties problēmas, izmantojot šo līdzekli. Šajā gadījumā varat izmantot iepriekš aprakstīto sistēmu () un izdzēst failu ar komandu DOS del:

system("del filename.txt");

Darbs ar katalogiem

PHP funkcijas ļauj skatīt un pārvietoties direktoriju saturā. Saraksts 7.8 parāda tipisku direktoriju struktūru UNIX sistēmā.

Uzskaitījums 7.8. Tipiska direktoriju struktūra

Funkcija dirname() papildina basename() — tā iegūst ceļu no pilnībā kvalificētā faila nosaukuma. Funkcijas dirname() sintakse ir šāda:

virknes dirname (virknes ceļš)

Piemērs, kā izmantot dirname(), lai izvilktu ceļu no pilna vārda:

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

$fails = dirname($ceļš); // $file = "usr/local/phppower/htdocs"

Funkcija dirname() dažreiz tiek izmantota kopā ar mainīgo $SCRIPT_FILENAME, lai iegūtu pilnu ceļu uz skriptu, no kura tiek izpildīta komanda:

$dir - dirname($SCRIPT_FILENAME);

Funkcija is_dir() pārbauda, ​​vai fails ar noteiktu nosaukumu ir direktorijs:

bool is_dir (virknes faila nosaukums)

Šajā piemērā tiek izmantota direktoriju struktūra no saraksta 7.8.

$ isdir = is_dir("indekss.html"); // Atgriež FALSE

$isdir = is_dir("grāmata"); // Atgriež TRUE

Funkcija mkdir() dara to pašu, ko UNIX komanda ar tādu pašu nosaukumu, tā izveido jaunu direktoriju. mkdir() funkcijas sintakse:

int mkdir (virknes ceļš, int režīms)

Parametrs ceļš norāda ceļu, lai izveidotu jaunu direktoriju. Neaizmirstiet beigt parametru ar jaunā direktorija nosaukumu! Modeļa parametrs nosaka izveidotajam direktorijam piešķirtās atļaujas.

Tāpat kā funkcija fopen () atver manipulatoru darbam ar doto failu, funkcija opendir () atver manipulatoru darbam ar direktoriju. Funkcijas opendir () sintakse ir šāda:

int opendir (stīgas ceļš)

Funkcija closedir () aizver direktorija rokturi, kas nodots kā parametrs. Funkcijas closedir () sintakse ir:

Void closedir (int directory_manipulator)

Funkcija readdir () atgriež nākamo norādītā direktorija elementu. Sintakse:

virkne readdir (int directory_manipulator)

Izmantojot šo funkciju, varat viegli uzskaitīt visus pašreizējā direktorijā esošos failus un apakšdirektorijus:

$dh = opendir(" .);

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

drukāt "$ file
"; beigas;

Funkcija chdir () darbojas tāpat kā UNIX cd komanda, kas mainās uz parametra norādīto direktoriju. funkcijas chdir() sintakse:

int chdir (stīgu direktorijs)

Nākamajā piemērā mēs pārejam uz grāmatu/apakšdirektoriju un izdrukājam tā saturu:

$newdir = "grāmata";

chdir($newdir) or die("Nevarēja mainīt uz direktoriju ($newdir)"); $dh = opendir(" . ");

while ($fails = readdir($dh)) ;

drukāt "$ file
";

Funkcija rewlnddir () pārvieto pašreizējās pozīcijas rādītāju uz tā direktorija sākumu, ko atver funkcija opendir (). Funkcijas rewinddir () sintakse ir:

Void rewinddir (int directory_manipulator)

1. projekts: vienkāršs sitienu skaitītājs

Šajā sadaļā parādītais skripts uzskaita trāpījumu skaitu lapai, kurā tas atrodas. Pirms pāriet uz kodu sarakstā 7.9, pārskatiet pseidokodā rakstīto algoritmu:

  1. Mainīgajam $access piešķiriet tā faila nosaukumu, kurā tiks saglabāta skaitītāja vērtība.
  2. Izmantojiet funkciju file(), lai nolasītu $access saturu masīvā $visits. @ prefikss pirms funkcijas nosaukuma novērš iespējamās kļūdas (piemēram, nav faila ar doto nosaukumu).
  3. Iestatiet mainīgo $current_visitors uz $visits masīva pirmā (un vienīgā) elementa vērtību.
  4. Palieliniet $current_visitors vērtību par 1.
  5. Atveriet $access failu rakstīšanai un iestatiet pašreizējās pozīcijas rādītāju uz faila sākumu.
  6. Ierakstiet $current_visitors vērtību failā $access.
  7. Aizveriet manipulatoru, kas atsaucas uz $access failu.

Uzskaitījums 7.9. Vienkāršs sitienu skaitītājs

// Skripts: vienkāršs sitienu skaitītājs

// Mērķis: trāpījumu skaita saglabāšana failā

$access = "hits.txt"; // Faila nosaukums ir izvēlēts patvaļīgi

$pašreizējie_apmeklētāji = $apmeklējumi; // Izgūt pirmo (un vienīgo) elementu

+$pašreizējie_apmeklētāji; // Palieliniet trāpījumu skaitītāju

$fh = fopen($piekļuve. "w"); // Atveriet failu hits.txt un instalējiet

// rādītājs uz pašreizējo pozīciju faila sākumā

@fwrite($fh, $current_visitors);// Ierakstiet jaunu skaitītāja vērtību

// uz failu "hits.txt"

fclose($fh); // Aizvērt failu manipulatoru "hits.txt"

2. projekts: vietnes kartes izveide

Listing 7.10 skripts veido vietnes karti — visu serverī esošo mapju un failu hierarhisku skatu, sākot ar noteiktu direktoriju. Vietnes karti veidojošo elementu polsterējuma aprēķināšanai tiek izmantotas šajā un iepriekšējās nodaļās definētās funkcijas. Pirms pāriet uz programmu, pārskatiet pseidokodā rakstīto algoritmu:

  1. Deklarējiet pakalpojuma mainīgos, lai saglabātu vecāku direktoriju, grafiskā faila nosaukumu ar mapes attēlu, lapas nosaukumu un servera OS karogu (Windows vai cita sistēma).
  2. Deklarējiet funkciju display_directory(), kas nolasa direktorija saturu un formatē to rādīšanai pārlūkprogrammā.
  3. Izveidojiet direktorija ceļu, kombinējot mainīgajā $dir1 nodoto nosaukumu ar $dir.
  4. Atveriet direktoriju un izlasiet tā saturu. Formatējiet direktoriju un failu nosaukumus un parādiet tos pārlūkprogrammā.
  5. Ja pašreizējais fails ir direktorijs, rekursīvi izsauciet display_di rectory() un nosūtiet tam jaunā parādāmā direktorija nosaukumu. Aprēķiniet izvades formatēšanas laikā izmantoto atkāpi.

Ja fails nav direktorijs, tas tiek formatēts, lai parādītu kā hipersaiti (un tiek aprēķināta arī formatēšanā izmantotā atkāpe).

Uzskaitījums 7.10. Programma Sitemap.php

// Fails: sitemap.php

// Mērķis: vietnes kartes izveide

// Katalogs, no kura sākas kartes veidošana

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

// Fails ar mapes grafisko attēlu.

// Ceļam jābūt Relative* uz Apache servera saknes direktoriju

$folder_location = "C:\Mani dokumenti\PHP programmētājiem\FINAL CHPS\graphics\folder.gif";

// Teksts loga virsrakstā $page_name = "PHPRecipes SiteMap";

// Kurā sistēmā skripts tiks izmantots - Linux vai Windows?

// (0 — Windows; 1 — Linux)

$izmantojotjinux = 0;

// Funkcija: display_directory

// Mērķis: parametra norādītā direktorija satura nolasīšana

// $dir1, kam seko direktorija un failu hierarhijas formatēšana.

// Funkciju var izsaukt rekursīvi.

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

// Atjaunināt ceļu

Sdh = opendir($dir);

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

// Direktorija elementi "." un ".." netiek izvadīti.

if (($fails != ".") && ($fails != "..")) :

if ($using_linux == 0) :

$dziļums = eksplodēt("\\", $dir): cits:

$dziļums = eksplodēt ("/", $ direktorijs); endif ; $curtent_depth = izmērs($dziļums);

// Veidojiet ceļu saskaņā ar izmantotās operētājsistēmas noteikumiem. if ($using_linux == 0) :

$tab_depth = $pašreizējais_deptn - $init_depth;

$fails = $direktors. "\\", $fails; cits:

$fails = $direktors. "/",$fails; endifs;

// Vai $failā ir direktorijs? if (ir dir($file)) :

// Aprēķināt atkāpi

kamēr ($ x< ($tab_depth * 2)) :

$x++; beigas;

drukāt "

".basename($fails)."
";

// Pieaugumu skaitītājs

// Rekursīvs funkcijas display_directory() izsaukums

displeja_direktorijs($fails, $mapes_vieta, $izmantojot_linux, $init_dziļums);

// Nav direktorija

// Izveidojiet ceļu saskaņā ar lietotā noteikumiem

// operētājsistēma.

if ($using_linux == 0) :

$tab_depth = ($pašreizējais_dziļums - $init_depth) - 2; $x = 0;

// Aprēķināt atkāpi

kamēr ($ x< (($tab_depth * 2) + 5)) :

drukāt " ".basename($fails)."
";

drukāt " ".basename($fails)."
";

endifs; // Is_dir(file) endif: // Ja ! "." vai ".."

// Aizvērt direktoriju closedir($dh);

<? print "$page_name"; ?>

// Aprēķināt sākotnējo polsterējumu

if ($using_linux == 0) :

$dziļums = eksplodēt ("\\", $ lūgšanas_ceļš);

$ dziļums = eksplodēt ("/", $ lūgšanas_ceļš);

$init_depth = izmērs($dziļums);

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

Attēlā 7.1. attēlā parādīts skripta izpildes rezultāts direktorijā, kurā ir vairākas šīs grāmatas nodaļas.

Rīsi. 7.1. Direktoriju struktūras izvadīšana serverī, izmantojot skriptu sitemap.php

Rezultāti

Šajā nodaļā tika iepazīstināti ar daudziem PHP rīkiem darbam ar failiem. Jo īpaši mēs apsvērām šādus jautājumus:

  • failu esamības pārbaude;
  • failu un I/O straumju atvēršana un aizvēršana;
  • rakstīšana failā un lasīšana no faila;
  • faila novirzīšana uz izvades straumi;
  • ārējo programmu palaišana;
  • failu sistēmas darbības.

Šīs nodaļas materiāls veido pamatu nākamajai nodaļai “Virkas un regulārās izteiksmes”, jo, izstrādājot tīmekļa lietojumprogrammas, virkņu apstrāde un ievades/izvades darbības ir ļoti cieši saistītas.

Zem darbs ar failiem PHP netieši lasīšana no faila Un rakstīt failā dažāda informācija. Ir pilnīgi skaidrs, ka jums ir daudz jāstrādā ar failiem, tāpēc ar jebkuru PHP programmētājs jāspēj lasīt no faila Un rakstīt failā.

Secība darbs ar failiem PHP kā šis:

  1. Atver failu.
  2. Veiciet nepieciešamās darbības.
  3. Aizveriet failu.

Kā redzat, darba ar failiem secība atgādina darbu ar failiem, izmantojot parasto pārlūku. Tikai šeit visu darbu automātiski veicam paši PHP skripts.

Sāksim ar pirmo punktu – faila atvēršanu. Fails tiek atvērts ar fopen() funkcijas. Pirmais parametrs ir faila ceļš, bet otrais parametrs ir modifikators. Tūlīt apskatīsim iespējamos modifikatorus:

  1. a- atver failu tikai rakstīšanai, ar rādītāju novietojot faila beigās.
  2. a+ a, bet fails tiek atvērts arī lasīšanai.
  3. r- atver failu tikai lasīšanai, un rādītājs tiek iestatīts uz faila sākumu.
  4. r+- tāds pats kā modifikators r, bet fails tiek atvērts arī rakstīšanai.
  5. w- atver failu tikai rakstīšanai, iestata rādītāju uz faila sākumu un izdzēš visu faila saturu.
  6. w+- tāds pats kā modifikators w, tikai fails tiek atvērts arī lasīšanai.

Ir arī divi režīmi darbam ar failiem: binārs(apzīmēts b) Un tekstu(apzīmēts t). Ja strādājat ar parastu teksta failu, izvēlieties teksta režīmu un, piemēram, ar attēlu, tad izvēlieties bināro režīmu.

Tie ir visi pamata modifikatori, ar kuriem jums pietiks. Tagad uzzināsim, kā aizvērt failu. Aizver failu ar fclose() funkcijas.

Tagad pāriesim pie faila lasīšanas, izmantojot fread() funkcijas. Un visbeidzot ļaujiet man sniegt jums piemēru:

$contents = "";
while (!feof($handle))
$saturs .= fread($rokturis, 4096);
fclose($rokturis);
?>

Šajā piemērā mēs vispirms atveram failu lasīšanai teksta režīmā (modifikators rt). funkcija fopen(). atdod ts deskriptors, ar kuru varat sazināties ar failu un ierakstīt to mainīgajā rokturis. Tad mēs esam cilpā kamēr () līdz tiek sasniegtas faila beigas, mēs katru reizi lasām saturu 4096 rakstzīmes, kuras mēs rakstām mainīgajam saturu. Kad lasīšanas process ir pabeigts, aizveriet failu, vēlreiz izmantojot faila deskriptoru.

Tagad pāriesim pie ierakstīšanas, izmantojot fwrite() funkcijas:

$rokturis = fopen("faili/a.txt", "at");
$string = "Tas ir teksts";
fwrite($rokturis, $virkne);
fclose($rokturis);
?>

Pēc šī skripta palaišanas failā a.txt rinda " tiks pievienota Šis ir teksts".

Īpaši uzmanīgi lasītāji pievērsa uzmanību norādēm, par kurām rakstīju tieši iepriekš. Rādītājs- šī ir iedomātā "kursora" pašreizējā atrašanās vieta failā. Šeit sākas darbs ar failu. Varat mainīt rādītāja pozīciju, izmantojot fseek() funkcijas:

$rokturis = fopen("faili/a.txt", "rt");
echo $contents."
";
fseek($rokturis, 0, SEEK_SET);
$saturs = fread($rokturis, 3);
echo $contents."
";
?>

Tāpēc mēs vispirms lasām 3 rakstzīme (tā rezultātā pašreizējā rādītāja pozīcija tiek pārvietota par 3 pozīcijas). Pēc tam iestatām rādītāju uz faila sākumu. Un mēs lasām vēlreiz 3 simbols. Kā jau varēja nojaust, mēs vienu un to pašu skaitījām divas reizes. Tā ir pirmā reize 3 simbolu, pēc tam atgriezās un skaitīja vēlreiz 3 simbols. Arī tad, ja jūs fseek() funkcijas aizvietot SEEK_SET ieslēgts SEEK_CUR, tad otrais parametrs neiestatīs rādītāja pozīciju, bet pārvietos to attiecībā pret pašreizējo atrašanās vietu. Es pat iesaku vingrināties ar rādītājiem, jo ​​to nav tik viegli saprast. Tāpat iesaku pamēģināt kaut ko ierakstīt failā rādītāja pozīcijā, piemēram, pašā faila sākumā. Un noteikti paskaidrojiet savus rezultātus.

Un visbeidzot, es vēlētos sniegt vēl dažas funkcijas, kas ļauj strādāt ar failiem visvienkāršākajā līmenī: file_put_contens() Un file_get_contents(). Funkcija file_put_contents() raksta failā un funkciju file_get_contents() nolasa saturu no faila. Šīs funkcijas ir ļoti viegli lietojamas, taču ir mazāk iespēju (lai gan, kā likums, tās nav vajadzīgas):

file_put_contents("faili/a.txt", "Tas ir 2. teksts");
echo file_get_contents("faili/a.txt");
?>

Šajā skriptā mēs vispirms uzrakstījām rindu " Šis ir 2. teksts" uz failu, un pēc tam mēs nolasām iegūto saturu un izvadām to. Kā redzat, ir grūti izdomāt vienkāršāku veidu lasīšana no faila Un rakstīt failā.

Tas ir visi galvenie punkti darbs ar failiem PHP.

JavaScript jūsu pārlūkprogrammā ir bloķēts. Lūdzu, iespējojiet JavaScript, lai vietne darbotos!

Darbs ar failiem

Failu manipulācijas ir svarīgs PHP rīks.

Ieskaitot ārējos failus

Izmantojot instrukciju, varat iekļaut failu katrā PHP dokumentā iekļaut (). Tās arguments ir ceļš uz failu. Šo instrukciju ir ērti lietot, ja daudzās PHP programmās ir identiskas koda daļas. Iekļautā faila saturs tiek apstrādāts kā vienkāršs HTML teksts. Lai šī faila saturs tiktu apstrādāts kā PHP programma, tam ir jābūt ieskautam PHP atvēršanas un aizvēršanas tagiem.

1. piemērs

Izmantojot include() ...Galvenā daļa..."; ?>

Atbalss"

...Vispārīgi sveicieni...

"

1. PIEMĒRA REZULTĀTS:

...Vispārīgi sveicieni...

...Galvenā daļa...

Šajā gadījumā rezultāts būs tāds pats, ja iekļautajā failā top.php ir tikai HTML teksta rindiņa:

...Vispārīgi sveicieni...

Iekļautie faili var atgriezt tādas vērtības kā funkcijas. Izmantojot atgriešanas paziņojumu, šī faila izpilde tiek pārtraukta tāpat kā funkciju izpilde.

2. piemērs

Paziņojuma include() izmantošana, kas atgriež vērtību Iekļautais fails atgrieza $res"; ?>

Iekļaut failu top.php ar PHP programmu:

2. PIEMĒRA REZULTĀTS:

Iekļautais fails atgrieza 56

Instrukcijas iekļaut () var izmantot cilpas iekšpusē. Cilpā iekļaut () tiek izpildīts katrā iterācijā. To var izmantot, lai iekļautu vairākus failus. Piemēram:

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

Iekļautā faila nosaukuma noteikšana un tā ielāde tiek atkārtota katru reizi, kad zvanāt iekļaut (). Tas nozīmē, ka, ja iekļautā faila saturs ir mainījies kopš iepriekšējā izsaukuma, tiks ielādēts jaunais saturs.

Operators iekļaut () var iekļaut arī nosacījuma paziņojuma pamattekstā.

Lai gan pēc izskata tas ir līdzīgs funkcijai, iekļaut () nav funkcija, bet gan īpaša valodas konstrukcija.

Lai norādītu, ka fails ir jāiekļauj tikai vienu reizi, tiek izmantots operators include_once().

Failu analīze

PHP satur daudzas funkcijas, kas sniedz informāciju par failiem. Visbiežāk izmantotie ir:

  • file_exists()- nosaka faila esamību. Piemēram: if (!file_exists("aaa.php")) echo "Uzmanību! Fails aaa.php nav atrasts!";
  • ir_fails()- nosaka, vai pārbaudāmais objekts ir fails. Piemēram: if (is_file("bbb.txt")) echo "Varat būt drošs, bbb.txt ir fails";
  • ir_dir()- nosaka, vai pārbaudāmais objekts ir direktorijs. Piemēram: if (is_dir("/tmp")) echo "Patiešām, /tmp ir direktorijs";
  • ir_lasāms()- nosaka, vai fails ir lasāms. Piemēram: if (is_lasāms("db.dbf")) echo "db.dbf var lasīt";
  • ir_rakstāms()- nosaka, vai fails ir rakstāms. Piemēram: if (is_writable("db.dbf")) echo "Jūs varat rakstīt db.dbf";
  • faila lielums()- nosaka faila lielumu baitos.
  • filemtime()- nosaka datumu un laiku, kad fails tika pēdējo reizi mainīts.
  • fileatime()- nosaka pēdējās piekļuves datumu un laiku failam.

3. piemērs

Informācija par failu "; echo "$f - ".(ir_dir($f) ? "" : "nav ")."
"; echo "$f ".(ir_readable($f) ? "" : "nav lasāms ")."
"; echo "$f ".(ir_writable($f) ? "" : "nav ")."
"; echo "$f lielums baitos ir ".(faila izmērs($f))."
"; echo "$f pēdējo reizi tika modificēts - ".(date("d M Y H:i", filemtime($f)))."
"; echo "pēdējais zvans uz $f - ".(date("d M Y H:i", fileatime($f)))."
"; } ?>

3. PIEMĒRA REZULTĀTS:

Top.php - fails top.php - nav direktorijs top.php ir lasāms top.php ir ierakstāms top.php lielums baitos - 732 pēdējās izmaiņas top.php - 04 Okt 2005 20:21 pēdējā piekļuve top.php - 2005. gada 20. oktobris 14:01

Uzmanību! Šīs funkcijas nedarbojas ar izdzēstiem failiem. Tos var lietot tikai vietējai failu sistēmai.

Failu pārvaldība

PHP satur daudzas failu pārvaldības funkcijas. Visbiežāk izmantotie ir:

  • pieskarties ()- izveido tukšu failu ar doto nosaukumu. Ja šāds fails jau pastāv, funkcija mainīs modifikācijas datumu. Piemēram: touch("ex1.txt");
  • kopēt ()- kopē failu. Lai kopētu failus PHP, izmantojiet funkciju kopēt ($source, $result). Tam ir jānodod tikai divi parametri - avots $source un kopijas faila nosaukums - $result. Ir vērts atzīmēt, ka jums jānorāda failu pilnas adreses. Kopēšanas funkcijas izmantošanas piemērs:

  • atsaistīt ()- dzēš norādīto failu. Piemēram:
  • fopen ()- atver lokālo vai attālo failu un atgriež uz to rādītāju. Rādītājs tiek izmantots visās darbībās ar faila saturu. Argumenti: faila nosaukums un atvēršanas režīms.
    rlasīšana. Faila rādītājs ir iestatīts uz faila sākumu
    r+lasīšana un rakstīšana. Faila rādītājs ir iestatīts uz faila sākumu
    wieraksts. Faila rādītājs ir iestatīts uz faila sākumu. Viss vecais faila saturs tiek zaudēts. Ja fails ar norādīto nosaukumu neeksistē, funkcija mēģina to izveidot
    w+lasīšana un rakstīšana. Faila rādītājs ir iestatīts uz faila sākumu. Viss vecais faila saturs tiek zaudēts. Ja fails ar norādīto nosaukumu neeksistē, funkcija mēģina to izveidot
    aieraksts. Faila rādītājs ir iestatīts uz faila beigām. Ja fails ar norādīto nosaukumu neeksistē, funkcija mēģina to izveidot
    a+lasīšana un rakstīšana. Faila rādītājs ir iestatīts uz faila beigām. Ja fails ar norādīto nosaukumu neeksistē, funkcija mēģina to izveidot

    Piemēram:

    $fp = fopen ("http://www.php.net/", "r"); // lasīšanai $fp = fopen("ex1.txt", "w"); // ierakstīšanai $fp = fopen("ex2.txt", "a"); // lai pievienotu beigām

    Ja nevarat atvērt failu, varat pārtraukt programmu. Piemēram:

    $fp = fopen("ex1.txt", "w") or die("Neizdevās atvērt failu");

  • fclose()- aizver failu. Arguments: faila rādītājs, kas tika saņemts iepriekš no funkcijas fopen (). Piemēram: fclose($fp);
  • feof()- faila beigu pārbaude. Arguments: faila rādītājs.
  • fgetc()- nākamās rakstzīmes nolasīšana no faila. Arguments: faila rādītājs.
  • fgets()- nākamās faila rindiņas lasīšana. Argumenti: faila rādītājs un nolasāmās virknes garums. Darbība tiek pārtraukta vai nu pēc tam, kad ir nolasīts norādītais rakstzīmju skaits, vai arī pēc rindas vai faila beigas.

    4. piemērs

    Rindu lasīšana no faila "; ?>

  • fread ()- vispārīga funkcija lasīšanai no faila. Argumenti: faila rādītājs un lasāmo rakstzīmju skaits.
  • fseek ()- atkāpe no faila sākuma. Argumenti: faila rādītājs un nobīde.

    5. piemērs

    Tiek parādīta faila otrā puse

  • fputs ()- rindas rakstīšana failā. Argumenti: faila rādītājs un virkne.
  • fwrite()- pilnīgs funkcijas analogs fputs ().

    6. piemērs

    Ierakstīšana un pievienošana failam

  • ganāmpulks ()- bloķē failu, t.i. neļauj citiem lietotājiem lasīt vai rakstīt failu, kamēr persona, kurai ir bloķēšana, nav pabeigusi darbu ar failu. Argumenti: faila rādītājs un bloķēšanas režīma numurs.

    7. piemērs

    Failu bloķēšana

    Bloķēt ar ganāmpulks () nav absolūts. To ņems vērā tikai tās programmas, kas arī izmanto šo funkciju.

PHP versijai >= 4.3.0 ir jaunas ērtas funkcijas darbam ar failiem:

  • file_get_contents()- lasīt visu failu vai URL
  • file_put_contents()- rakstīt failu

Darbs ar katalogiem

PHP ir vairākas funkcijas darbam ar direktorijiem:

  • mkdir()- kataloga izveide. Argumenti: direktorija ceļa nosaukums un piekļuves režīms. Piekļuves režīms ir trīsciparu astoņciparu skaitlis ar nulli sākumā. Pirmais numurs ir īpašnieka piekļuves tiesības, otrais ir grupai, bet trešais ir visiem pārējiem. Operētājsistēmā Windows piekļuves režīms tiek ignorēts. UNIX sistēma definē šādas piekļuves tiesības:

    Piemēram, pilna kontrole īpašniekam, Lasīt un palaist grupai un Palaist visiem pārējiem:

    Mkdir ("testdir", 0751);

  • rmdir()- direktorija dzēšana. Arguments: direktorija ceļa nosaukums. Tukšu direktoriju var izdzēst tikai tad, ja jums ir tiesības to darīt. Ja tas ir veiksmīgs, funkcija atgriež true.
  • opendir()- direktorija atvēršana. Arguments: direktorija ceļa nosaukums. Ja rodas kļūda, funkcija atgriež false. Kļūdu atverot var izraisīt fakts, ka direktorija neeksistē vai programmai nav atļaujas to lasīt.
  • readdir ()- direktorija lasīšana. Arguments: direktorija ceļa nosaukums. Atgriež virkni, kas satur atrastā faila vai apakšdirektorija nosaukumu. Kad tiek sasniegts direktorija beigas, funkcija atgriež false.

    8. piemērs

    Kataloga lasīšana "; ?>

    Cilpas testa izteiksme nedarbosies, kā paredzēts, ja direktorijā ir fails ar nosaukumu "0". Šajā gadījumā nosaukums "0" tiks pārveidots par 0, izraisot cilpas pārtraukšanu. No tā var izvairīties, veicot papildu drošības pasākumus, mainot pārbaudes izteiksmi:

    Gettype($f = readdir($dh)) != "būla"

    Papildus funkcijas fgetc() fgets() fgetss() izmantošanai varat izmantot
    $fails = fails($faila nosaukums). Tas nolasa $ faila nosaukums masīvā ($ fails).

    Piemērs:

    $fails=fails($faila nosaukums); priekš ($i=0; $i<=count($file); $i++) { echo $file[$i], "
    "; }

Faila pārsūtīšana no servera. Lejupielādēt failu. Lejupielādēt.

Manuāla lejupielāde jeb skripta izmantošana, lai lietotājam atvērtu failu saglabāšanas logu. Lai pārlūkprogramma atvērtu dialoglodziņu “Saglabāt failu” ar faila nosaukumu file.dat, skriptam ir jānosūta šādas galvenes:

Header("Satura izvietojums: pielikums; faila nosaukums=fails.dats"); header("Satura veids: pieteikums/x-force-download; name=\"file.dat\"");

Gatavs faila nosūtīšanas no diska piemērs:

Nenāktu par ļaunu skriptu norādīt arī kā http://.../download.php?file.dat, pretējā gadījumā pārlūkprogrammas, kuru pamatā ir Mozilla, varētu mēģināt rakstīt failu kā file.dat.php. vai norādiet lejupielādes atribūtu: Lejupielādēt Piezīme:Šādos skriptos neizmantojiet galveni ("Cache-Control: no-cache") vairums Internet Explorer versiju nevarēs lejupielādēt failu.

Tālāk redzamais skripta piemērs parāda kā organizēt lejupielādes atbalstu:

Tiek pieņemts, ka $cd ir faila ceļš, $fn ir faila nosaukumsKā pārsūtīt failu uz serveri?

Funkcijas darbam ar direktorijiem

  • chdir() - mainīt direktoriju
  • Būla chdir (string str)

    Maina pašreizējo PHP direktoriju uz to, kas norādīts kā parametrs str. Atgriež TRUE par panākumiem, FALSE par kļūdu

  • chroot() - mainiet saknes direktoriju
  • Būla chroot (string str)

    Maina pašreizējā procesa saknes direktoriju uz to, kas nodots kā parametrs str. Atgriež TRUE par panākumiem, FALSE par kļūdu.

    Piezīme. Šī funkcija nav ieviesta Windows platformās.

  • closedir() — atbrīvojiet direktorijas turi
  • tukšums slēgts (resursu katalogs)

    Aizver straumi, kas saistīta ar katalogu un nodota kā kataloga parametrs. Pirms šīs funkcijas izmantošanas straume ir jāatver, izmantojot funkciju opendir().

    dir - Direktoriju klase

klase dir ( dir (string str) virknes ceļš resursa rokturis virkne lasīt (void) void rewind (void) void close (void) )

Pseido-objektorientēts mehānisms direktorija parametrā nodotā ​​direktorija nolasīšanai. No direktorija atvēršanas brīža kļūst pieejami divi klases rekvizīti. Rekvizītu "handle" var izmantot ar citām direktoriju manipulācijas funkcijām, piemēram, readdir() , rewinddir() un closedir() funkcijām. Rekvizīts "ceļš" satur ceļu uz atvērto direktoriju. Ir pieejamas trīs metodes: lasīšana, attīšana un aizvēršana.

Lūdzu, ņemiet vērā veidu, kādā tiek pārbaudīta dir() klases metožu atgriešanas vērtība zemāk esošajā piemērā. Šajā piemērā tiek pārbaudīts, vai vērtība (izteiksmes ir identiskas, ja tās ir vienādas un viena veida — plašāku informāciju skatiet sadaļā Salīdzināšanas operatori) ir vienāda ar FALSE, jo pretējā gadījumā jebkurš direktorija ieraksts, kura nosaukumu var izteikt kā FALSE, tiks apturēts. ciklu.

Koda paraugs:

rokturis."
\n"; echo "Ceļš: ".$d->ceļš."
\n"; while (false !== ($entry = $d->read())) ( echo $entry."
\n"; ) $d->close(); ?>

Piezīme. Secība, kādā "lasīšanas" metode atgriež direktoriju ierakstus, ir atkarīga no operētājsistēmas.

Piezīme. Turklāt PHP automātiski definē iekšējo klasi ar nosaukumu Directory, kas nozīmē, ka jūs nevarēsit definēt savas klases ar tādu pašu nosaukumu.


  • getcwd() — iegūstiet pašreizējā darba direktorija nosaukumu
  • virkne getcwd(void)

    Atgriež pašreizējā darba direktorija nosaukumu.


  • opendir() — atver direktoriju
  • resursa opendir (virknes ceļš)

    Atgriež direktorija rokturi, lai vēlāk to izmantotu kopā ar funkcijām closedir (), readdir () un rewinddir ().

    Ja ceļš neeksistē vai direktoriju, kas atrodas norādītajā ceļā, nevar atvērt juridisku ierobežojumu vai failu sistēmas kļūdu dēļ, funkcija opendir () atgriež FALSE un ģenerē E_WARNING līmeņa PHP kļūdas ziņojumu. Kļūdas ziņojumu var izslēgt, pirms funkcijas opendir() nosaukuma pievienojot simbolu "@".

    Koda piemērs

    Sākot no PHP 4.3.0, ceļa parametrs var būt arī jebkurš URL, kuram piekļūstot, tiek parādīts tā failu un direktoriju saraksts. Tomēr šī metode darbojas tikai tad, ja tiek izmantots fails:// url pakotājs PHP 5.0 .0 versijā ftp:// url pakotājam tika pievienots.


  • readdir — iegūstiet direktorijas elementu ar tā rokturi
  • virkne readdir (resursu katalogs)

    Atgriež nākamā secīgā direktorija ieraksta nosaukumu. Elementu nosaukumi tiek atgriezti secībā atkarībā no failu sistēmas.

    Ņemiet vērā, kā funkcija readdir () atgriež vērtību tālāk esošajā piemērā. Šajā piemērā tiek pārbaudīts, vai vērtība (izteiksmes ir identiskas, ja tās ir vienādas un ir viena veida vērtības — plašāku informāciju skatiet sadaļā Salīdzināšanas operatori) ir identiska vērtībai FALSE, jo pretējā gadījumā jebkurš direktorija ieraksts, kura nosaukumu var izteikt kā FALSE. , apturēs cilpu (piemēram, elements ar nosaukumu "0").

    Koda piemērs

    Ņemiet vērā, ka funkcija readdir () atgriež arī nosauktos elementus, un, ja nevēlaties saņemt šīs vērtības, vienkārši izmetiet tās:

    Koda piemērs


  • rewinddir() — atiestatīt direktorijas rokturi
  • Void rewinddir (resursu katalogs)

    Atiestata kataloga parametrā nodoto kataloga straumi, lai norādītu uz kataloga sākumu


  • scandir() - iegūstiet failu un direktoriju sarakstu, kas atrodas norādītajā ceļā
  • masīvs scandir (stīgu katalogs [, secībā])

    Atgriež masīvu, kurā ir to failu un direktoriju nosaukumi, kas atrodas kataloga parametrā norādītajā ceļā. Ja direktorijs nav direktorijs, funkcija atgriež FALSE un ģenerē kļūdas ziņojumu E_WARNING.

    Pēc noklusējuma kārtošana tiek veikta alfabētiskā secībā augošā secībā. Ja ir norādīts izvēles secības parametrs (vienāds ar 1), kārtošana tiek veikta alfabētiskā secībā dilstošā secībā. Koda piemērs

    Rezultāts būs kaut kas līdzīgs:

    Masīvs ( => . => .. => bar.php => foo.txt => somedir) Array ( => somedir => foo.txt => bar.php => .. => .)

    Koda piemērs

    REZULTĀTA PIEMĒRS:

    Masīvs ( => . => .. => bar.php => foo.txt => somedir) Array ( => somedir => foo.txt => bar.php => .. => .)

    Un tagad būs diezgan liela, bet ne sarežģīta nodarbība par darbu ar failiem PHP. Pirmkārt, kam tie faili ir paredzēti? Galu galā jūs varat saglabāt visu MySQL vai PostgreSQL vai jebkurā citā datu bāzē. Bet dažreiz ir uzdevumi, kad datubāzes izmantošana ar visu apstrādi un rūpēm par savienojuma drošību nav ieteicama. Piemēram, mums ir jāizveido parasts skaitītājs, taču pirms tam mēs projektā neizmantojām datu bāzi. Tātad viena maza skaitītāja dēļ mums vajadzētu izveidot datu bāzi un tajā saglabāt tikai dažas rindiņas? Šeit ir daudz vieglāk izmantot failus. Turklāt dažreiz hostings vispār neatbalsta datu bāzes, tad faili parasti ir vienīgā iespēja.

    Nu, pieņemsim, ka es jūs pārliecināju, ka faili ir nepieciešami :) Tagad izdomāsim, kā ar tiem strādāt. Kā izveidot, atvērt, rakstīt, pārrakstīt, lasīt un tā tālāk. Pirmās lietas vispirms.

    Izveidojiet failu

    PHP izmanto funkciju fopen, lai atvērtu failus. Tomēr tas var arī izveidot failus. Ja nodosit fopen faila nosaukumu, kas neeksistē, tas tiks izveidots.

    Pati funkcijai fopen ir nepieciešami divi parametri, kas abi ir nepieciešami. Pirmkārt, mums ir jānorāda faila nosaukums, kuru vēlamies atvērt. Otrkārt, nododiet parametru, kas funkcijai norāda, ko mēs plānojam darīt ar šo failu (piemēram, nolasīt no faila, rakstīt utt.).

    Ja mums ir jāizveido fails, mēs norādām tā nosaukumu un nododam parametru, ar kuru mēs vēlamies tam ierakstīt datus. Piezīme: mums noteikti jāpasaka PHP, ko mēs ierakstām failā, pretējā gadījumā tas neradīs jaunu failu.
    Piemērs:

    $ourFileName = "testFile.txt"; $ourFileHandle = fopen($ourFileName, "w") or die("nevar atvērt failu"); fclose($ourFileHandle);

    Pirmajā rindā $ourFileName = testFile.txt tiek izveidots fails, kurā mēs saglabāsim faila nosaukumu.
    Otrā rinda $ourFileHandle = fopen($ourFileName, ‘w’) vai die (“nevar atvērt failu”) attiecīgi izveido vai atver esošu failu rakstīšanai. Vai arī tiek parādīts ziņojums, ka nevar atvērt failu.
    Trešā rinda fclose ($ourFileHandle) aizver failu. Patiesībā tas ir vienkārši.

    Failu atvēršanas iespējas php

    • Pirmais parametrs 'r' (lasīt) — atver failu tikai lasīšanai, tajā nevar ierakstīt.
    • Otrais parametrs “w” (rakstīt) – tiek atvērts rakstīšanai. Šajā gadījumā ierakstīšana vienmēr notiks no faila sākuma. Ja tur jau ir kāda informācija, tā tiks pārrakstīta.
    • Trešais parametrs 'a' (pievienot) - atver failu rakstīšanai, bet pievienos faila beigām, atšķirībā no w.

    Pielāgota opcija:

    • Parametrs 'r+' - atveras gan lasīšanai, gan rakstīšanai. Rādītājs atradīsies faila sākumā.
    • Parametrs 'w+' - atveras gan lasīšanai, gan rakstīšanai, BET dzēš visu informāciju, kas bija failā!!!
    • parametrs 'a+' - atveras lasīšanai un rakstīšanai, bet rādītājs atradīsies faila beigās.

    Protams, funkcijai var nodot tikai vienu no šiem parametriem, nevis vairākus. Tie ir jāaizstāj X vietā:

    Fopen ($ourFileName, "X")

    Rakstīt failā

    Nu, tagad esam atvēruši failu, atlasījuši vajadzīgo parametru, ko tālāk? Jums kaut kas tajā jāieraksta. Kā to izdarīt? Izmantojot fwrite funkciju, kas kā parametrus ņem rādītāju uz failu un teksta rindiņu, kuru vēlamies rakstīt. Piemērs:

    $myFile = "testFile.txt"; $fh = fopen($myFile, "w") vai die("nevar atvērt failu"); $stringData = "Pirmā rinda\n"; fwrite($fh, $stringData); $stringData = "Otrā rinda\ n n"; fwrite($fh, $stringData); fclose($fh);

    Mēs izveidojām failu testFile.txt, rādītājs uz to tiek saglabāts mainīgajā $ fn. Mēs tajā ierakstījām rindu “Pirmā rinda” (beigās izmantojām rindiņas beigu simbolu \n) un pēc tam “Otrā rinda”. Tad viņi aizvēra failu.

    UZMANĪBU! Nekad neaizmirstiet aizvērt failus! Pretējā gadījumā, ja skripta izpilde beidzas neparasti, faili failos netiks saglabāti! Vienmēr lietojiet fclose pēc darba!!!

    Lasīšana no faila

    Mēs to esam pierakstījuši, tagad lasīsim! Tas arī nav tik grūti. Mēs izmantojam fread funkciju. Kā ievadi mēs tam piešķiram rādītāju uz failu un baitu skaitu, ko vēlamies lasīt. Piemēram, viena rakstzīme ir vienāda ar vienu baitu (atkarībā no kodējuma), mēs vēlamies nolasīt 5 rakstzīmes: $theData = fread($fh, 5).
    Bet, ja mums ir jāiegūst visa informācija, kas atrodas failā, tad mums būs nepieciešama faila lieluma funkcija, kas atgriež failā esošo baitu skaitu, tāpēc, ja faila lieluma funkcijas rezultāts tiek nodots fread, tad mēs iegūstiet visu informāciju no faila:

    $myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fread($fh, faila lielums($myFile)); fclose($fh); echo $theData;

    Ceru, ka paskaidroju skaidri.
    Dažreiz ir lietderīgi lasīt failu pēc rindiņas, nevis pēc baitu skaita. Lai to izdarītu, fread vietā jums vienkārši jāizmanto fgets:

    $myFile = "testFile.txt"; $fh = fopen($myFile, "r"); $theData = fgets($fh); fclose($fh); echo $theData;

    Rezultātā mēs iegūstam pirmo rindiņu no faila testFile.txt. Attiecīgi, lai izietu visas nepieciešamās rindas, izmantojiet:

    \n"; ?>

    Tagad esat iemācījies atvērt failus lasīšanai, rakstīšanai vai abiem. Ierakstiet tiem datus vai pievienojiet tos augšpusē, izmantojot Pievienot, kā arī lasiet informāciju no tiem.

    PHP parādījās daudz vēlāk, nekā programmēšanas valodas nostiprināja savas pozīcijas un formulēja vispārīgas idejas par sintaksi, loģiku, mainīgajiem un citiem programmas objektiem. Faili un funkcijas darbam ar tiem neattīstījās, un pat failu kodēšanas problēma, kas radās dabisku iemeslu dēļ, neradīja radikāli jaunus risinājumus.

    Vispārīgas piezīmes

    Galvenais darbs ar failiem, lai kādi tie būtu, sastāv no atvēršanas, lasīšanas/rakstīšanas un aizvēršanas. Var izmantot piekļuves bloķēšanas/atbloķēšanas funkcijas failam, kamēr tas tiek apstrādāts, var iestatīt lasīšanas/rakstīšanas pozīciju failā – viss ir tāpat kā iepriekš, tālā pagātnē.

    Svarīgs PHP punkts ir funkciju pārpilnība darbam ar failiem un to izmantošanas iespējas. Praksē pietiek ar vienkāršu, bet strādājošu iespēju izmantošanu. Fails, pirmkārt, ir programmas atmiņa. Tajā varat saglabāt informāciju. Jebkuras programmas mērķis, jebkuras tīmekļa vietnes mērķis ir prezentēt, apstrādāt un nodrošināt informācijas drošību.

    Būtisks apstāklis

    Iepriekš prasība pēc saderības vismaz no apakšas uz augšu bija nesatricināma. Tas ir, programma, kas reiz rakstīta vienā programmēšanas valodas versijā, ideālā gadījumā tiek kompilēta/interpretēta nākamajā versijā. Mūsdienu programmēšanas gadījumā tas tā nav. Prasība pēc valodas sintaktisko struktūru savietojamības ir kļuvusi par vēstures lietu, un cīņa starp stiliem un programmēšanas rīkiem un atsevišķu rīku versijām ir kļuvusi par viņu dzīves normu.

    Darbs ar failiem, kā arī ar datu bāzēm ir tikpat svarīgs kā vietnes saskarne. Pirmajam jābūt veidotam tā, lai, mainot platformu, hostingu vai valodas versiju, nebūtu jāmaina vietnes kods. Interfeiss darbam ar failiem ir jāiekļauj atsevišķā skriptā un jānodrošina pilnīga saderība, tāpat kā vietnes dizainam ir adekvāti jāpielāgojas jebkurai ierīcei, pārlūkprogrammai un jānodrošina pārējā vietnes funkcionalitāte ar tādām pašām iespējām.

    Lasiet un mainiet sevi

    Vai programma var mainīties pati, tas ir, vai skripts var uzlaboties? Līdz šai dienai šis jautājums interesē daudzus. Bet uzdevums izklausās daudz praktiskāks: PHP lasa PHP failu. Izstrādātājs ne vienmēr var atrisināt konkrētu problēmu, rakstot konkrētu kodu. Dažreiz tas ir jāmaina, kad apmeklētājs ierodas vietnē un formulē jautājumu, kas nebija paredzēts izstrādes stadijā.

    Tāpat kā visos citos gadījumos, vispirms ir jāatver fails. Nav svarīgi, vai šis fails pastāv vai ne. Ja ir zināms, ka fails eksistē (funkcija file_exists() sniedz pozitīvu atbildi), funkcija fopen() tiek izmantota ar piekļuvi 'r', 'r+', 'a', 'a+'. Ja fails vēl neeksistē, tad ar piekļuvi ‘a’, ‘a+’, ‘w’, ‘w+’. Faila atvēršanas rezultāts būs tā deskriptors. Fails tiek aizvērts ar funkciju fclose().

    Ir ērti izmantot PHP, lai nolasītu failu masīvā, ja lasīšanas laikā tas nav jāapstrādā.

    if (file_exists($fName)) (

    $aLines = fails($fName)

    Izmantojot šo opciju, katra faila rinda secīgi nonāk masīva elementā. Jāņem vērā, ka faila() vai file_get_contents() funkcijām fails nav jāatver un jāaizver.

    Ja ievades fails ir pārāk liels un jums ir jāatrod tikai nedaudz informācijas vai citu iemeslu dēļ, varat izmantot PHP, lai lasītu failu rindiņu pa rindiņai. PHP nodrošina iespēju to izdarīt ar fgets() un fgetc() funkcijām.

    $fvs = fopen($fName, "r")

    while ((false !== ($cLine = fgets($fvs, 2000)))) (

    $cLines .= "
    ". $i . "). $cLine

    Abas iespējas darbojas nevainojami. Tomēr, veicot PHP faila lasīšanu vēlākai modificēšanai, ir jāievēro piesardzības pasākumi. Vietnes izstrādes stadijā ne vienmēr ir iespējams paredzēt, kā apmeklētājs to izmantos. Labāk, ja skripti tiek mainīti vietnes funkcijās, un apmeklētājs, tostarp resursa administrators, nevar kontrolēt šīs izmaiņas.

    Rezultātu saglabāšana

    Saņemto un atjaunināto informāciju failā ieraksta funkcija fputs() rindiņu pa rindiņai vai funkcija file_put_contents() kopumā.

    $fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

    $fvs = fopen($fName, "a")

    ganāmpulks ($fvs, LOCK_EX)

    $cLine = "1 rinda". chr (10)

    fputs ($fvs, $cLine)

    $cLine = "2 rindas" . chr (10)

    fputs ($fvs, $cLine)

    ganāmpulks ($fvs, LOCK_UN)

    Ierakstīšanas opcijā rindas pa rindiņai var manipulēt ar datiem ierakstīšanas procesā, otrajā gadījumā ierakstītā virkne vai masīvs tiek ievietots visā failā.

    $file = " scData.php "

    $cContents = file_get_contents($file)

    // ieraksta pievienošana

    $cContents .= "jauns ieraksts\n"

    // ierakstiet failu atpakaļ

    file_put_contents($file, $cContents)

    PHP failu lasīšana un rakstīšana ir vienkārša un dabiska. Tomēr ir svarīgi paturēt prātā: katram failam ir nosaukums, paplašinājums un ceļš (mape). Lai PHP skripts varētu lasīt un rakstīt failus, šim skriptam ir jābūt atbilstošām tiesībām. Tie tiek automātiski parādīti mitināšanā, taču dažos gadījumos tie ir jāpaplašina.

    Dažos gadījumos var būt vēlams pārbaudīt rezultātus, veicot testa nolasījumu. PHP failu rakstīšanai izstrādes laikā tas ir nepieciešams, taču dažos gadījumos vietnes drošības vai uzticamības interesēs ir svarīgi pārbaudīt datu ierakstu.

    Raksturīga PHP, MySQL, JavaScript un jo īpaši pārlūkprogrammu iezīme: klusi ļaujot notikt dažām kļūdām. “Nav atpazīts, nav izdarīts...” nav īpaši laba prakse informācijas tehnoloģiju progresīvākos, taču tas iemāca izstrādātājiem nekļūdīties un rakstīt tīru, kvalitatīvu kodu, kas arī nav slikti.

    PHP un darbs ar reāliem dokumentiem

    PHP lasīšana PHP failā noteikti ir praktiska interese, taču tā ir programmēšanas joma. Lietotāju un vietnes apmeklētāju interesē lietišķa rakstura informācija, kuru viņš ir pieradis redzēt tabulu un dokumentu veidā, jo īpaši *.xlsx un *.docx failu formātos. Tie ir faili MS Excel un MS Word formātā.

    Preču saraksti, cenas, raksturlielumi parasti tiek veidoti tabulu veidā, tāpēc PHP lasīšana Excel failā ir būtiska.

    PHPExcel un PHPWord bibliotēkas ir izstrādātas darbam ar šādiem failiem. Tomēr *.xlsx un *.docx failu saturs tiek parādīts OOXML standartā, tas ir, īstais, saprotamais dokuments tiek parādīts zip arhīvā. Zip arhīvs ir failu kopums, tostarp attēli, objekti, formulas un ieliktņi no citām programmām. Teksta faili šeit ir attēloti ar aprakstiem tagu veidā. Nepietiek ar šāda faila lasīšanu, lai iegūtu saturu un struktūru lietošanai un modificēšanai.

    Tas nozīmē, ka lasīšanas darbība pārvēršas par arhīva atvēršanas procedūru. Šīs bibliotēkas neatkarīgi atver dokumentu arhīvu un nodrošina izstrādātājam plašas funkcijas šādu dokumentu lasīšanai, apstrādei un rakstīšanai.

    Excel tabulas

    include_once 'PhpOffice/PhpExcel/IOFactory.php'

    funkcija scGetExcelFile($xls)(

    $objPHPExcel = PHPExcel_IOFactory::load($xls)

    $objPHPExcel->setActiveSheetIndex(0)

    //šajā masīvā ir virkņu masīvi

    $aSheet = $objPHPExcel->getActiveSheet()

    $masīvs = masīvs()

    //ārstēšana

    foreach($aSheet->getRowIterator() kā $row)(

    $cellIterator = $rinda->getCellIterator()

    foreach($cellIterator kā $cell)(

    array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

    masīvs_push($masīvs, $vienums)

    Excel failu lasīšana un apstrāde ir daudz grūtāka nekā Word dokumentu apstrāde. Labākais risinājums, ja nepieciešams īstenot nopietnu projektu lietišķās informācijas lasīšanai un apstrādei, ir vispirms apgūt PHPWord bibliotēku. Tas sniegs jums labu pieredzi un ātru izpratni par problēmas specifiku.

    Word dokumenti

    Tikai divas rindas:

    $oWord = jauns \PhpOffice\PhpWord\PhpWord()

    $oDocx = $this->oWord->loadTemplate($cFileName)

    Dokuments $cFileName tagad ir pieejams apstrādei. Tālāk tiek atvērts arhīvs, atlasīts un analizēts tā saturs, ko var attēlot vietnē, mainīt un atrakstīt atpakaļ.

    $zipClass = jauns ZipArhīvs()

    $zipClass->open($this->tempFileName)

    // lasīt visu dokumenta saturu

    priekš ($i=0; $i<$zipClass->numFiles; $i++) (

    $cNameIn = $zipClass->getNameIndex($i)

    $cNameInExt = substr($cNameIn, -4)

    if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

    // faili ar paplašinājumiem ".xml" un ".xml.rels" tiek saglabāti dokumentu tabulā

    // katra xml rinda ir rakstīta ar unikālu numuru secībā

    $cBodyIn = $zipClass->getFromName($cNameIn)

    $cBodyInLen = strlen($cBodyIn)

    // visi pārējie faili tiek ierakstīti dokumentu mapē, kā tas ir

    $cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

    $zipClass->getFromName($cNameIn, $cWorkPath); // saturs kā fails

    PHP Excel un PHP Word piedāvātās iespējas ļauj manipulēt ar reāliem dokumentiem un padarīt to saturu atbilstošu jebkurā brīdī. Mūsdienu dinamiskajā pasaulē tas kļūst ļoti svarīgi. Smaguma centrs jau sen ir pārcēlies no lokālas datortehnoloģiju izmantošanas uz virtuālo interneta telpu. Tāpēc tabulu un dokumentu veidošana lokālajos Microsoft produktos ir mazāk efektīva nekā darbs ar šādiem dokumentiem automātiskā un pusautomātiskā režīmā vietnē, kas ir pieejama ne tikai tabulas vai dokumenta veidotājam, bet arī tās patērētājiem.

    Teksta faili, cita dzīve

    Sākotnēji teksta faili ir vienkāršāki nekā PHP faili vai lietojumprogrammu dokumenti. Tomēr šeit ir par ko padomāt. Šādu failu lasīšanas/rakstīšanas darbības jau ir norādītas iepriekš, taču šādu failu nozīme ir daudz svarīgāka.

    Tā kā ir tāda dota kā klients un serveris (pirmajā dominē JavaScript, otrajā PHP), tad pat sīkfailu un sesiju mehānismi nevar tikt galā ar nepieciešamību pārsūtīt informāciju starp skriptiem, lapām vai noteiktiem procesiem.

    Ir iespējams atspoguļot vēlamās izmaiņas datu bāzē, taču, neskatoties uz visām priekšrocībām un ātrumu, mazie pagaidu vai pastāvīgie teksta faili var būt daudz interesantāks informācijas pārsūtīšanas variants. Ja neveidojat daudz mazu failu un nekontrolējat to lielumu, tie var būt specifiska un elastīgāka datu bāzes versija.

    PHP teksta faila lasīšana ir ātra, to var nekavējoties parsēt struktūrā, masīvā vai objektā. Pēdējais ir ļoti svarīgs, jo ļauj izveidot objektus, kas dzīvo ārpus PHP skriptam atvēlētā laika, kas, kā zināms, var pastāvēt tikai serverī un tikai lapas ielādes brīdī tiek saņemta AJAX atbilde. ģenerēts vai cita iemesla dēļ, kas izraisa PHP tulka palaišanu.

    Ja domājat par to, ka teksta fails ir izstrādātāja saturs un struktūra, PHP fails ir tulka sintakse plus izstrādātāja loģika, un “atzīmētie” apraksti html, css, xml ir vairāk semantiski elementi, bet regulēti. pēc statiskajiem standartiem. Var secināt, ka, iespējams, ir pienācis laiks failiem iegūt jaunu saturu, un tam pašam vajadzētu noteikt to kvalitāti un lietošanas loģiku. Tieši tāpēc, ka programmēšana vēl nav gatava nākamajam attīstības posmam, faili mūsdienās paliek vienkārši faili, kurus veido izstrādātājs un nosaka to izmantošanu.

    Pats interesantākais un daudzsološākais ir tad, kad PHP patstāvīgi nolasa PHP failu, kad rodas tāda nepieciešamība. Un vienkārši PHP nolasot rindiņu no faila, tiek izveidots objekts, vismaz tādā stāvoklī, kādā tas tika saglabāts. Tās nav gluži pazīstamas idejas, taču mūsdienu pasaulē viss mainās tik ātri.



    
    Tops