Php kuinka äännetään. Työskentely tiedostojen kanssa php:ssä: avaaminen, kirjoittaminen, lukeminen. Perinteiset fopen menetelmät

Viimeisin päivitys: 1.11.2015

Kuten useimmat ohjelmointikielet, PHP tukee tiedostojen käsittelyä, jotka ovat yksi tavoista tallentaa tietoja.

Tiedostojen lukeminen ja kirjoittaminen

Tiedostojen avaaminen ja sulkeminen

Tiedostojen avaaminen PHP:ssä on määritetty fopen()-funktiolla. Sillä on seuraava määritelmä: resurssi fopen(merkkijono $tiedostonimi, merkkijono $mode) . Ensimmäinen parametri $filename edustaa tiedoston polkua ja toinen on avaustila. Avauksen tarkoituksesta ja tiedoston tyypistä riippuen tällä parametrilla voi olla seuraavat arvot:

    "r" : Tiedosto avataan vain luku -tilassa. Jos tiedostoa ei ole olemassa, palauttaa false

    "r+" : Tiedosto avataan vain luku -tilassa ja kirjoitettava. Jos tiedostoa ei ole olemassa, palauttaa false

    "w" : Tiedosto avataan kirjoittamista varten. Jos tällainen tiedosto on jo olemassa, se korvataan, jos ei, se luodaan.

    "w+" : Tiedosto avataan kirjoitusta varten ja luettavissa. Jos tällainen tiedosto on jo olemassa, se korvataan, jos ei, se luodaan.

    "a" : Tiedosto avataan kirjoittamista varten. Jos tällainen tiedosto on jo olemassa, tiedot kirjoitetaan tiedoston loppuun ja vanhat tiedot säilyvät. Jos tiedostoa ei ole olemassa, se luodaan

    "a+" : Tiedosto avataan lukemista ja kirjoittamista varten. Jos tiedosto on jo olemassa, tiedot liitetään tiedoston loppuun. Jos tiedostoa ei ole olemassa, se luodaan

Fopen-funktion tulos on tiedostokuvaaja. Tätä kahvaa käytetään tiedostotoimintoihin ja tiedoston sulkemiseen.

Työn päätyttyä tiedosto on suljettava fclose()-funktiolla, joka ottaa parametriksi tiedostokuvaajan. Avataan ja suljetaan esimerkiksi tiedosto:

$fd = fopen("form.php", "r") or die("tiedostoa ei voitu avata"); fclose($fd);

Rakenteen or die ("virheteksti") avulla komentosarja voi pysähtyä ja näyttää virheilmoituksen, jos fopen-funktio ei pystynyt avaamaan tiedostoa.

Tiedoston lukeminen

Voit käyttää useita toimintoja tiedoston lukemiseen. Rivi-riviltä lukemiseen käytetään fgets()-funktiota, joka vastaanottaa tiedostokuvaajan ja palauttaa yhden luetun rivin. Käydään koko tiedosto läpi rivi riviltä:

Aina kun fgets():tä kutsutaan, PHP asettaa osoittimen luetun rivin loppuun. Tiedoston lopun seuraamiseen käytetään feof()-funktiota, joka palauttaa tosi, kun tiedosto on valmis. Ja kunnes tiedoston loppu on saavutettu, voimme käyttää fgets()-funktiota.

Koko tiedoston lukeminen

Tässä tapauksessa meidän ei tarvitse erikseen avata tiedostoa, hankkia kahvaa ja sitten sulkea tiedostoa.

Estä lukeminen

Voit myös lukea lohko lohkolta, eli lukea tietyn määrän tavuja tiedostosta fread()-funktiolla:

Fread()-funktiolla on kaksi parametria: luettava tiedostokahva ja luettavien tavujen määrä. Kun lohko luetaan, tiedoston osoitin siirtyy kyseisen lohkon loppuun. Ja myös käyttämällä feof()-funktiota voit seurata tiedoston valmistumista.

Kirjoita tiedosto

Voit kirjoittaa tiedoston käyttämällä fwrite()-funktiota, joka kirjoittaa tiedostoon seuraavan rivin:

Toinen fputs()-funktio toimii samalla tavalla:

Työskentely tiedostoosoittimen kanssa

Kun tiedosto avataan lukemista tai kirjoittamista varten "w"-tilassa, osoitin sijoitetaan tiedoston alkuun. Lukeessa PHP tiedot siirtää osoittimen tiedostossa luetun tietolohkon loppuun. Voimme kuitenkin myös manuaalisesti käsitellä osoitinta tiedostossa ja asettaa sen mielivaltaiseen paikkaan. Tätä varten sinun on käytettävä toimintoa fseek, jolla on seuraava virallinen määritelmä:

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

Parametri $handle edustaa tiedostokahvaa. $offset-parametri on siirto tavuina suhteessa tiedoston alkuun, josta luku/kirjoitus alkaa. Kolmas valinnainen parametri määrittää, kuinka offset asetetaan. Se voi ottaa kolme arvoa:

    SEEK_SET : oletusarvo, asettaa offsetin offset-tavuina suhteessa tiedoston alkuun

    SEEK_CUR : asettaa siirtymän offset-tavuina suhteessa tiedoston nykyisen sijainnin alkuun

    SEEK_END : asettaa siirtymän tiedoston lopusta tavuiksi

Jos osoitin on asennettu onnistuneesti, fseek()-funktio palauttaa arvon 0, ja jos osoitin ei onnistu, se palauttaa arvon -1.

Esimerkki funktion käytöstä:

$fd = fopen("hello.txt", "w+") or die("tiedostoa ei voitu avata"); $str = "Hei maailma!"; // rivi kirjoitettavaksi fwrite($fd, $str); // kirjoita rivi alkuun fseek($fd, 0); // aseta tiedoston osoitin alkuun fwrite($fd, "Oink"); // kirjoittaa rivin alkuun fseek($fd, 0, SEEK_END); // aseta osoitin loppuun fwrite($fd, $str); // kirjoita toinen rivi loppuun fclose($fd);

Tietoja funktioiden fopen, fclose, feof, fgets, fgetss ja fscanf käytöstä

Listataan kaikki mahdollisuudet

Yksi nykyaikaisten ohjelmointikielten, kuten PHP:n, kanssa työskentelyn eduista on saatavilla olevien ominaisuuksien määrä. PHP voisi helposti omaksua Perlin kielen motton "On enemmän kuin yksi tapa tehdä jotain", varsinkin kun me puhumme tiedostojen käsittelystä. Mutta koska käytettävissä on lukuisia työkaluja, kysymys tulee siitä, mikä niistä on paras työn suorittamiseen. Tietenkin vastaus tähän kysymykseen riippuu todellakin siitä, mitkä ovat tavoitteesi tiedoston käsittelyssä, joten kaikkien kielten ominaisuuksien oppiminen on vaivan arvoista.

Perinteiset fopen menetelmät

Fopen-menetelmät ovat ehkä tutuimpia C- ja C++-ohjelmoijille ennen, koska ne ovat enemmän tai vähemmän työkaluja, jotka ovat olleet ulottuvillasi vuosia, jos olet työskennellyt näiden ohjelmointikielien kanssa. Teet minkä tahansa näistä menetelmistä tavanomainen menettely, käyttämällä fopen-toimintoa tiedoston avaamiseen, toimintoa tietojen lukemiseen ja sitten fclose sulkeaksesi tiedoston, kuten luettelossa 1 näkyy.

Listaus 1. Tiedoston avaaminen ja lukeminen fgetsillä
$tiedoston_kahva = fopen("omatiedosto", "r"); while (!feof($tiedoston_kahva)) ( $rivi = fgets($tiedoston_kahva); echo $line; ) fclose($tiedoston_kahva);

Vaikka nämä toiminnot ovat tuttuja kokeneille ohjelmoijille, haluan analysoida, kuinka ne toimivat. Todellisuudessa noudatat näitä vaiheita:

  1. Avaa tiedosto. $file_handle tallentaa linkin itse tiedostoon.
  2. Tarkista, oletko saavuttanut tiedoston loppuun.
  3. Jatka tiedoston lukemista, kunnes tulet sen loppuun, ja tulosta jokainen lukemasi rivi.
  4. Sulje tiedosto.

Tätä silmällä pitäen tarkastelen jokaista tässä käytettyä tiedostotoimintoa.

fopen-toiminto

Fopen-toiminto muodostaa yhteyden tiedostoon. Sanon "muodostaa yhteyden", koska tiedoston avaamisen lisäksi fopen voi avata myös URL-osoitteen:

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

Tämä ohjelmarivi luo linkin yllä olevalle sivulle ja mahdollistaa sen lukemisen paikallisena tiedostona.

Huomautus:"r"-vaihtoehto, jota käytetään fopenissa, osoittaa, että tiedosto on avoinna vain luku -tilassa. Koska tiedostoon kirjoittaminen ei sisälly tässä artikkelissa käsiteltyjen ongelmien piiriin, en luettele kaikkia parametrin mahdollisia arvoja. Sinun on kuitenkin vaihdettava "r" muotoon "rb", jos luet binääritiedostoista alustojen välisen yhteensopivuuden varmistamiseksi. Alla on esimerkki tästä tyypistä.

feof-toiminto

Feof-komento määrittää, onko luku saavuttanut tiedoston loppuun, ja palauttaa True vai False. Kohdassa näkyvä silmukka jatkuu tiedoston "myfile" loppuun asti. Huomaa, että feof palauttaa myös False, jos luet URL-osoitetta ja yhteyden aikakatkaisu, koska luettavaa dataa ei ole enää.

Toiminto fclose

Ohitetaan listan 1 keskikohta ja mennään loppuun; fclose toimii päinvastoin kuin fopen: se sulkee yhteyden tiedostoon tai URL-osoitteeseen. Tämän toiminnon suorittamisen jälkeen et voi enää lukea tiedostosta tai socketista.

fgets-funktio

Palaamalla muutaman rivin taaksepäin listassa 1 pääset tiedostonkäsittelyprosessin ytimeen: itse asiassa tiedoston lukemiseen. Fgets-funktio on valitsemasi aseesi ensimmäisessä esimerkissä. Se nappaa datarivin tiedostosta ja palauttaa sen merkkijonona. Sieltä voit näyttää tiedot tai muuten käsitellä niitä. Listauksen 1 esimerkki tulostaa koko tiedoston.

Jos päätät rajoittaa käsittelemäsi tietokappaleen kokoa, voit lisätä argumentin fgets-argumentin rajoittamiseksi enimmäispituus rivejä kaapattua dataa. Käytä esimerkiksi seuraavaa koodia rajoittaaksesi rivin pituus 80 merkkiin:

$merkkijono = fgets($tiedoston_kahva, 81);

Ajattele "\0", C:n rivin lopun ilmaisinta, ja aseta pituudeksi yksi merkki pidempään kuin itse tarvitset. Kuten näet, yllä olevassa esimerkissä käytetään 81 merkkiä, kun taas tarvitset 80 merkkiä. Ota tapa lisätä ylimääräinen merkki aina, kun sinun on asetettava rivin pituusrajoitus tietylle funktiolle.

fread-toiminto

Fgets-toiminto on vain yksi monista tiedoston lukemiseen käytettävissä olevista toiminnoista. Tämä on yksi yleisimmin käytetyistä toiminnoista, koska tiedoston käsittely rivi riviltä on useimmissa tapauksissa järkevintä. Itse asiassa useat muut ominaisuudet tarjoavat samanlaisia ​​ominaisuuksia. Oli miten oli, rivikohtainen analyysi ei aina ole sitä, mitä tarvitset.

Ja tästä pääsemme freadiin. Fread-funktiolla on hieman eri tarkoitus kuin fgetillä: se on tarkoitettu lukemaan binääritiedostoista (eli tiedostoista, jotka eivät alun perin koostu ihmisen luettavasta tekstistä). Koska "rivien" käsite ei ole merkityksellinen binääritiedostoille (loogisia tietorakenteita ei yleensä jaeta riveihin), sinun on määritettävä luettavien tavujen määrä.

$fh = fopen("omatiedosto", "rb"); $tiedot = fread($tiedoston_kahva, 4096);

Yllä oleva esimerkki lukee 4096 tavua (4 kt) dataa. Huomaa, että määrittämästäsi arvosta riippumatta fread lukee enintään 8192 tavua (8 kt).

Olettaen, että tiedosto ei ole suurempi kuin 8 kt, alla olevan ohjelmakatkelman pitäisi lukea koko tiedosto yhdellä rivillä.

$fh = fopen("omatiedosto", "rb"); $tiedot = fread($fh, tiedostokoko("omatiedosto")); fclose($fh);

Jos tiedostokoko on suurempi, sinun on käytettävä silmukkaa lukeaksesi loput tiedostosta.

fscanf-toiminto

Palatakseni merkkijonojen käsittelyyn, fscanf on myös perinteisen C-tiedostokirjastotoiminnon seuraaja. Jos et ole perehtynyt siihen, fscanf lukee tietokentät tiedostosta muuttujiksi.

lista ($kenttä1, $kenttä2, $kenttä3) = fscanf($fh, "%s %s %s");

Tässä funktiossa käytetyt muotomerkkijonot on kuvattu monissa lähteissä, kuten PHP.net, joten en toista näitä tietoja tässä. Riittää, kun totean, että merkkijonojen muotoilu on erittäin joustavaa. On myös mainittava, että kaikki kentät sijoitetaan funktion palauttamaan muuttujaan. (C:ssä nämä välitetään argumentteina.)

fgetss-toiminto

Fgetss-funktio eroaa perinteisistä tiedostojenkäsittelytoiminnoista ja antaa sinulle paremman käsityksen PHP:n ominaisuuksista. Se toimii kuten fgets, mutta hylkää kaikki löytämänsä. HTML-tunnisteet tai PHP, jättäen vain paljaan tekstin. Otetaan alla oleva HTML-tiedosto.

Listaus 2. Esimerkki HTML-tiedostosta
Minun otsikkoni

Jos ymmärrät mitä tarkoittaa "Cause there ain"nobody for to give you no pain, niin kuuntelet liikaa Amerikkaa.



Ohjataan se fgetss-funktion läpi.

Listaus 3. Käyttämällä fgetss
$tiedoston_kahva = fopen("omatiedosto", "r"); while (!feof($tiedoston_kahva)) ( echo = fgetss($tiedoston_kahva); ) fclose($tiedoston_kahva);

Tämän saat ulostulona:

Otsikkoni Jos ymmärrät mitä tarkoittaa "Cause there ain"nobody for to give you no pain, niin kuuntelet liikaa Amerikkaa.

fpassthru-toiminto

Riippumatta siitä, kuinka luet tietoja tiedostosta, voit tulostaa loput tiedot käyttämällä vakiotulostuskanavaa käyttämällä fpassthru-toimintoa.

fpassthru($fh);

Tämä toiminto tulostaa tiedot, joten sinun ei tarvitse laittaa niitä muuttujaan.

Epälineaarinen tiedostonkäsittely: liikkuminen tiedoston läpi

Tietenkin yllä kuvatut toiminnot mahdollistavat vain peräkkäisen lukemisen tiedostosta. Monimutkaisemmat tiedostot saattavat edellyttää siirtämistä tiedoston eri osiin tiedoston alussa tai lopussa. Tätä varten tarvitset fseek-toiminnon.

fseek($fh, 0);

Yllä oleva esimerkki palaa tiedoston alkuun. Jos et halua siirtyä aivan tiedoston alkuun - vaikka yksi kilotavu riittää - kirjoitat vain:

fseek($fh, 1024);

PHP V4.0:sta lähtien saatavilla on myös useita muita vaihtoehtoja. Jos sinun on esimerkiksi siirryttävä eteenpäin 100 tavua nykyisestä sijainnistasi, voit käyttää seuraavaa koodia:

fseek($fh, 100, SEEK_CUR);

Samoin 100 tavua taaksepäin siirtäminen tapahtuu seuraavasti:

fseek($fh, -100, SEEK_CUR);

Jos haluat palata 100 tavun sijaintiin ennen tiedoston loppua, käytä sen sijaan SEEK_END.

fseek($fh, -100, SEEK_END);

Kun uusi sijainti on saavutettu, voit käyttää fgets-, fscanf- tai muuta toimintoa tietojen lukemiseen.

Huomautus: et voi käyttää fseek-tiedostoa URL-osoitteeseen viittaavissa tiedostokuvauksissa.

Kaappaa koko tiedosto

Nyt siirrymme tarkastelemaan joitain PHP:n ainutlaatuisia tiedostojenkäsittelyominaisuuksia: suurten tietolohkojen käsittelyä yhdellä tai kahdella rivillä. Miten voit esimerkiksi napata tiedoston ja näyttää sen koko sisällön Web-sivullasi? No, olet nähnyt esimerkin silmukan käyttämisestä fgets-komentojen kanssa. Mutta kuinka voit tehdä sen helpommaksi? Prosessi on melkein naurettavan helppoa fgetcontentsilla, joka asettaa koko tiedoston riville.

$oma_tiedosto = file_get_contents("omatiedostonimi"); echo $oma_tiedosto;

Vaikka tämä ei ole paras vaihtoehto, voit kirjoittaa tämän komennon vielä lyhyemmin:

echo file_get_contents("omatiedostonimi");

Tämä artikkeli keskittyy ensisijaisesti paikallisten tiedostojen käsittelyyn, mutta on kuitenkin syytä huomata, että voit myös kaapata, näyttää ja jäsentää muita Web-sivuja kuvattujen toimintojen avulla.

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

Tämä komento on itse asiassa sama kuin:

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

Saatat tarkastella näitä esimerkkejä ja ajatella: "Se on paljon työtä." PHP-kehittäjät ovat kanssasi samaa mieltä. Joten voit lyhentää yllä olevaa komentoa seuraavasti:

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

Readfile-toiminto tulostaa tiedoston tai Web-sivun koko sisällön oletustulostuspuskuriin. Oletuksena tämä komento näyttää virheilmoituksen, kun se epäonnistuu. Voit välttää tämän toiminnan (jos haluat sen) kokeilemalla komentoa:

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

Tietenkin, jos sinun on käsiteltävä tiedostojen sisältö, tiedosto_get_contents palauttama yksi rivi on luultavasti liikaa. Haluat ehkä ensin jakaa sen osiin käyttämällä split()-funktiota.

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

Mutta miksi tarvitset kaikkea tätä monimutkaisuutta, jos on täysin sopiva toiminto, joka tekee työn puolestasi? PHP file()-funktio suorittaa tämän tehtävän yhdessä vaiheessa: se palauttaa merkkijonotaulukon, jonka elementit ovat tiedoston rivit.

$array = tiedosto("omatiedosto");

On huomattava, että kahden yllä olevan esimerkin välillä on pieni ero. Split-komento poistaa rivinvaihdot, kun taas tiedostokomento päättää rivinvaihdot rivinvaihdolla (kuten fgets).

PHP:n ominaisuudet ylittävät kuitenkin paljon edellä kuvatut. Voit jäsentää kokonaisia ​​.ini-tiedostoja PHP-tyylillä yhdellä parse_ini_file-komennolla. Parse_ini_file-komento koskee tiedostoja, jotka ovat samanlaisia ​​kuin luettelossa 4.

Listaus 4. Esimerkki .ini-tiedostosta
; Kommentin nimi = "Kuningas Arthur" -tehtävä = Graalin maljan etsiminen suosikkiväri = Sininen Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Seuraavat komennot edustavat tiedostoa taulukkona ja tulostavat sitten taulukon:

$tiedosto_taulukko = parse_ini_file("holy_grail.ini"); print_r $tiedostojono;

Tuloksena on seuraava tulos:

Listaus 5. Lähtö
Array ( => Kuningas Arthur => Etsimään Pyhää Graalia => Sininen => Mark Twain => Whoopi Goldberg)

Saatat tietysti huomata sen tämä käsky yhdistetyt osat. Tämä on oletustoiminto, mutta voit muokata sitä helposti käyttämällä parse_ini_file-tiedoston toista argumenttia: process_sections, joka on Boolen muuttuja. Aseta process_sections arvoksi True.

$file_array = parse_ini_file("holy_grail.ini", tosi); print_r $tiedostojono;

Ja tulostuksesi näyttää tältä:

Listaus 6. Lähtö
Array ( => Array ( => Kuningas Arthur => Etsimään Pyhää Graalia => Sininen) => Array ( => Mark Twain => Whoopi Goldberg))

PHP sijoittaa tiedot helposti jäsennettävään moniulotteiseen taulukkoon.

Mutta tämä on vain jäävuoren huippu, kun kyse on tiedostojen käsittelystä PHP:llä. Monimutkaisemmat toiminnot, kuten tidy_parse_file ja xml_parse, voivat auttaa jäsentämään HTML- ja XML-asiakirjoja. Katso lisätietoja osiosta yksityiskohtainen tieto näiden toimintojen toiminnasta. Molempia kannattaa harkita, jos työskentelet tämän tyyppisten tiedostojen kanssa, mutta kaikkien mahdollisten tiedostotyyppien tarkastelemisen sijaan saatat haluta tarkastella lähemmin tämän artikkelin sisältöä, jossa on useita hyviä yleiset säännöt tähän mennessä kuvaamieni toimintojen kanssa työskentelemiseen.

Hyvä ohjelmointityyli

Älä koskaan oleta, että kaikki ohjelmassasi toimii tarkoitetulla tavalla. Esimerkiksi: entä jos etsimäsi tiedosto on siirretty? Entä jos käyttöoikeuksien muutos aiheuttaa sen, että et pysty lukemaan tiedoston sisältöä? Voit tarkistaa tiedoston olemassaolon ja sen lukuoikeudet etukäteen käyttämällä file_exists- ja is_readable -menetelmiä.

Listaus 7. File_exists- ja is_readable -asetusten käyttäminen
$tiedostonimi = "omatiedosto"; if (tiedosto_olemassa($tiedostonimi) && on_luettavissa ($tiedostonimi)) ( $fh = fopen($tiedostonimi, "r"); # Käsitellään fclose($fh); )

Käytännössä tämä ohjelma on kuitenkin todennäköisesti ylivoimainen tehtävällesi. Fopenin palauttamien arvojen käsittely on yksinkertaisempaa ja tarkempaa.

if ($fh = fopen($tiedostonimi, "r")) ( # Käsitellään fclose($fh); )

Koska fopen palauttaa False, jos se epäonnistuu, tämä varmistaa, että tiedosto käsitellään vain, jos tiedosto voidaan avata. Tietenkin, jos tiedostoa ei ole olemassa tai se on lukukelvoton, paluuarvon odotetaan olevan negatiivinen. Siksi tällainen tarkistus on ansa, johon kaikki mahdolliset ongelmat putoavat. Vaihtoehtoisesti voit poistua ohjelmasta tai näyttää virheilmoituksen, jos tiedostoa ei voida avata.

Kuten fopen, file_get_contents-, file- ja readfile-funktiot palauttavat False, jos tiedostoa ei voida avata tai käsitellä. Fgets-, fgetss-, fread-, fscanf- ja fclose-funktiot palauttavat myös epätosi, jos tapahtuu virhe. Tietenkin, paitsi fclose, olet todennäköisesti jo käsitellyt niiden palauttamat tulokset. Mitä tulee fclose -sovellukseen, ei ole paljon tehtävissä, jos tiedostokahva ei sulkeudu kunnolla, joten fclose-paluuarvon tarkistaminen on yleensä ylivoimaista.

Päätös on sinun

PHP:stä ei ole pulaa tehokkaita tapoja tiedostojen lukeminen ja analysointi. Klassiset toiminnot, kuten fread, voivat palvella sinua luotettavasti suurimman osan ajasta, tai voit houkutella enemmän readfile-tiedoston yksinkertaisuuteen, jos sitä tarvitset työsi suorittamiseksi. Valinta riippuu todellakin siitä, mitä yrität saada aikaan.

Jos käsittelet suuria tietomääriä, fscanf on todennäköisesti hyödyllisempi ja tehokkaampi kuin esimerkiksi tiedoston käyttäminen yhdessä myöhempien split- ja sprintf-komentojen kanssa. Jos näytät vain suuren määrän tekstiä pienin muutoksin, tiedosto-, file_get_contents- tai readfile-funktioiden käyttäminen voi olla järkevämpää. Tämä ratkaisu on todennäköisesti oikea, jos PHP:n avulla välimuistiin tallentamiseen tai jopa väliaikaisen välityspalvelimen luomiseen.

PHP tarjoaa monia työkaluja tiedostojen käsittelyyn. Tutustu jokaiseen paremmin ja selvitä, mitkä työkalut sopivat parhaisiin projektiin. Sinulle tarjotaan laaja valikoima ohjelmisto, käytä niitä tehokkaimmin ja pidä hauskaa tiedostojen käsittelystä PHP:llä.

PHP ilmestyi paljon myöhemmin kuin ohjelmointikielet vahvistivat asemaansa ja muotoilivat yleisiä ideoita syntaksista, logiikasta, muuttujista ja muista ohjelmaobjekteista. Tiedostot ja niiden kanssa työskentelevät toiminnot eivät edistyneet, eikä edes luonnollisista syistä syntynyt tiedostojen koodausongelma johtanut radikaalisti uusiin ratkaisuihin.

Yleisiä huomioita

Pääasiallinen työ tiedostojen kanssa, olivat ne sitten mitä tahansa, koostuu avaamisesta, lukemisesta/kirjoittamisesta ja sulkemisesta. Voit käyttää tiedoston käsittelyn estämistä/poistamista koskevia toimintoja, voit asettaa tiedoston luku-/kirjoituspaikan - kaikki on sama kuin ennen, kaukaisessa menneisyydessä.

Tärkeä asia PHP:ssä on tiedostojen käsittelyyn tarkoitettujen toimintojen ja niiden käyttövaihtoehtojen runsaus. Käytännössä riittää yksinkertaisten mutta toimivien vaihtoehtojen käyttäminen. Tiedosto on ennen kaikkea ohjelmamuisti. Voit tallentaa siihen tietoja. Minkä tahansa ohjelman, minkä tahansa verkkosivuston tarkoitus on esittää, käsitellä ja varmistaa tietojen turvallisuus.

Olennainen seikka

Aikaisemmin yhteensopivuuden vaatimus ainakin alhaalta ylöspäin oli horjumaton. Toisin sanoen ohjelma, joka on kerran kirjoitettu jollakin ohjelmointikielen versiolla, käännetään/tulkitaan ihanteellisesti seuraavassa versiossa. Nykyaikaisessa ohjelmoinnissa näin ei ole. Vaatimus kielen syntaktisten rakenteiden yhteensopivuudesta on tullut historiaan, ja taistelusta tyylien ja ohjelmointityökalujen sekä tiettyjen työkalujen versioiden välillä on tullut heidän elämän normi.

Työskentely tiedostojen ja tietokantojen kanssa on yhtä tärkeää kuin sivuston käyttöliittymä. Ensimmäinen tulee rakentaa siten, että alustaa, isännöintiä tai kieliversiota vaihdettaessa ei tarvitse muuttaa sivuston koodia. Tiedostojen käsittelyn käyttöliittymän tulee olla erillisessä skriptissä ja varmistaa täydellinen yhteensopivuus, aivan kuten sivuston suunnittelun tulee mukautua riittävästi mihin tahansa laitteeseen, selaimeen ja tarjota sivuston muulle toiminnalle samat ominaisuudet.

Lue ja muuta itseäsi

Voiko ohjelma muuttaa itseään, eli voiko skripti parantaa? Tähän päivään asti tämä kysymys kiinnostaa monia. Mutta tehtävä kuulostaa paljon käytännöllisemmältä: PHP lukee PHP-tiedoston. Kehittäjä ei voi aina ratkaista tiettyä ongelmaa kirjoittamalla tiettyä koodia. Joskus sitä on tarpeen muuttaa, kun vierailija tulee sivustolle ja muotoilee kysymyksen, jota ei kehitysvaiheessa ollut ennakoitu.

Kuten kaikissa muissakin tapauksissa, sinun on ensin avattava tiedosto. Ei ole väliä, onko tämä tiedosto olemassa vai ei. Jos tiedetään, että tiedosto on olemassa (file_exists()-funktio antaa positiivisen vastauksen), fopen()-funktiota käytetään pääsyn 'r', 'r+', 'a', 'a+' kanssa. Jos tiedostoa ei ole vielä olemassa, käytä käyttöoikeuksia "a", "a+", "w", "w+". Tiedoston avaamisen tulos on sen kuvaaja. Tiedosto suljetaan fclose()-funktiolla.

On kätevää käyttää PHP:tä tiedoston lukemiseen taulukkoon, kun sitä ei tarvitse käsitellä lukuhetkellä.

if (file_exists($fName)) (

$aLines = tiedosto($fName)

Tässä vaihtoehdossa jokainen tiedoston rivi menee taulukon elementtiin peräkkäin. On huomattava, että file()- tai file_get_contents()-funktioiden ei tarvitse avata tiedostoa ja sulkea sitä.

Kun syöttötiedosto on liian suuri ja sinun on löydettävä vain vähän tietoa tai muista syistä, voit lukea tiedoston rivi riviltä PHP:n avulla. PHP tarjoaa mahdollisuuden tehdä tämä fgets()- ja fgetc()-funktioilla.

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

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

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

Molemmat vaihtoehdot toimivat moitteettomasti. Kuitenkin, kun suoritat PHP-lukua PHP-tiedostolle myöhempää muokkausta varten, on ryhdyttävä varotoimiin. Aina ei ole mahdollista ennakoida, kuinka kävijä käyttää sitä sivuston kehitysvaiheessa. On parempi, jos skriptejä muutetaan sivuston toimintojen sisällä, eikä tätä muutosta voi hallita vierailija, mukaan lukien resurssin ylläpitäjä.

Tulosten tallentaminen

Vastaanotetut ja päivitetyt tiedot kirjoitetaan tiedostoon fputs()-funktiolla rivi riviltä tai file_put_contents()-funktiolla kokonaisuudessaan.

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

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

parvi ($fvs, LOCK_EX)

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

fputs($fvs, $cLine)

$cLine = "2 riviä" . chr(10)

fputs($fvs, $cLine)

parvi ($fvs, LOCK_UN)

Rivi riviltä -tallennusvaihtoehdossa voit käsitellä tietoja tallennusprosessin aikana; toisessa tapauksessa kirjoitettu merkkijono tai matriisi sijoitetaan koko tiedostoon.

$tiedosto = " scData.php "

$cContents = file_get_contents($file)

// merkinnän lisääminen

$cContents .= "uusi merkintä\n"

// kirjoita tiedosto takaisin

file_put_contents($tiedosto, $cContents)

PHP-tiedostojen lukeminen ja kirjoittaminen on helppoa ja luonnollista. On kuitenkin tärkeää pitää mielessä: jokaisella tiedostolla on nimi, tunniste ja polku (kansio). Jotta PHP-skripti voi lukea ja kirjoittaa tiedostoja, tällä skriptillä on oltava asianmukaiset oikeudet. Ne näkyvät automaattisesti isännöinnissä, mutta joissain tapauksissa niitä on laajennettava.

Joissakin tapauksissa voi olla toivottavaa tarkistaa tulokset suorittamalla testilukema. PHP-tiedostojen kirjoittaminen vaatii tätä kehitysvaiheessa, mutta joissain tapauksissa, sivuston turvallisuuden tai luotettavuuden vuoksi tietojen tallennuksen tarkistaminen on välttämätöntä.

Tyypillinen ominaisuus PHP:lle, MySQL:lle, JavaScriptille ja erityisesti selaimille: sallii hiljaa joidenkin virheiden tapahtua. "Ei tunnistettu, ei tehty..." - ei kovin hyvä etulinjan käytäntö tietotekniikat, mutta tämä opettaa kehittäjiä olemaan tekemättä virheitä ja kirjoittamaan puhdasta, laadukasta koodia, mikä ei myöskään ole huono.

PHP ja työskentely oikeiden asiakirjojen kanssa

PHP:n PHP-tiedoston lukeminen on varmasti käytännön mielenkiintoista, mutta tämä on ohjelmoinnin aluetta. Käyttäjä ja vierailija ovat kiinnostuneita soveltuvasta tiedosta, jota hän on tottunut näkemään taulukoiden ja asiakirjojen muodossa, erityisesti *.xlsx- ja *.docx-tiedostomuodoissa. Nämä ovat MS Excel- ja MS Word -muotoisia tiedostoja.

Tavaraluettelot, hinnat, ominaisuudet muodostetaan yleensä taulukoiksi, joten PHP:n Excel-tiedoston lukeminen on välttämätöntä.

PHPExcel- ja PHPWord-kirjastot on kehitetty toimimaan tällaisten tiedostojen kanssa. Kuitenkin *.xlsx- ja *.docx-tiedostojen sisältö esitetään OOXML-standardissa, eli todellinen, ymmärrettävä dokumentti esitetään zip-arkistossa. Zip-arkisto on joukko tiedostoja, jotka sisältävät kuvia, objekteja, kaavoja ja lisäyksiä muista ohjelmista. Tekstitiedostot tässä esitetään kuvauksilla tunnisteiden muodossa. Tällaisen tiedoston lukeminen ei riitä, se täytyy jäsentää saadaksesi sisällön ja rakenteen käyttöä ja muokkausta varten.

Tämä tarkoittaa, että lukutoiminto muuttuu arkiston avaustoimenpiteeksi. Nämä kirjastot avaavat dokumenttiarkiston itsenäisesti ja tarjoavat kehittäjälle laajat toiminnot tällaisten asiakirjojen lukemiseen, käsittelyyn ja kirjoittamiseen.

Excel taulukot

include_once 'PhpOffice/PhpExcel/IOFactory.php'

funktio scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//Tämä taulukko sisältää merkkijonotaulukoita

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//hoito

foreach($aSheet->getRowIterator() as $row)(

$cellIterator = $rivi->getCellIterator()

foreach($cellIterator $soluna)(

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

array_push($array, $item)

Excel-tiedostojen lukeminen ja käsittely on paljon vaikeampaa käsitellä Word-asiakirjat. Paras vaihtoehto, jos sinun on toteutettava vakava projekti sovelletun tiedon lukemiseen ja käsittelyyn, on ensin hallita PHPWord-kirjasto. Tämä antaa sinulle hyvän kokemuksen ja nopean käsityksen ongelman yksityiskohdista.

Word-asiakirjat

Vain kaksi riviä:

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

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

Asiakirja $cFileName on nyt käsiteltävissä. Seuraavaksi arkisto avataan, sen sisältö valitaan ja analysoidaan, joka voidaan näyttää verkkosivulla, muuttaa ja kirjoittaa takaisin.

$zipClass = uusi ZipArkisto()

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

// lukea dokumentin koko sisältö

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

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

$cNameInExt = substr($cNameIn, -4)

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

// tiedostot, joiden tunniste on ".xml" ja ".xml.rels", tallennetaan dokumenttitaulukkoon

// jokainen xml-rivi kirjoitetaan yksilöllisellä numerolla järjestyksessä

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

$cBodyInLen = strlen($cBodyIn)

// kaikki muut tiedostot kirjoitetaan asiakirjakansioon sellaisenaan

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

$zipClass->getFromName($cNameIn, $cWorkPath); // sisältö tiedostona

Mahdollisuudet, jotka avautuvat milloin PHP apua Excelin ja PHP Wordin avulla voit käsitellä oikeita asiakirjoja ja tehdä niiden sisällöstä merkityksellistä milloin tahansa. Nykypäivän dynaamisessa maailmassa tästä tulee erittäin tärkeää. Painopiste on jo kauan sitten poistunut paikallisesta käytöstä tietokonelaitteisto virtuaaliseen Internet-tilaan. Siksi taulukoiden ja asiakirjojen luominen paikallisissa Microsoft-tuotteissa on vähemmän tehokasta kuin tällaisten asiakirjojen käsitteleminen automaattisessa ja puoliautomaattisessa tilassa verkkosivustolla, joka on taulukon tai asiakirjan luojan lisäksi myös sen kuluttajien käytettävissä.

Tekstitiedostot, toinen elämä

Ensinnäkin tekstitiedostot ovat yksinkertaisempia kuin PHP-tiedostot tai sovellusasiakirjat. Tässä on kuitenkin mietittävää. Tällaisten tiedostojen luku-/kirjoitustoiminnot on jo mainittu yllä, mutta tällaisten tiedostojen merkitys on paljon tärkeämpi.

Koska on olemassa sellainen asia kuin asiakas ja palvelin (ensimmäistä hallitsee JavaScript, toista PHP), ei edes eväste- ja istuntomekanismit pysty selviytymään tarpeesta siirtää tietoa komentosarjojen, sivujen tai tiettyjen prosessien välillä.

Halutut muutokset voidaan heijastaa tietokantaan, mutta kaikista eduistaan ​​ja nopeudestaan ​​huolimatta pienet väliaikaiset tai pysyvät tekstitiedostot voivat olla paljon mielenkiintoisempi vaihtoehto tiedon välittämiseen. Jos et luo paljon pieniä tiedostoja ja hallitse niiden kokoa, ne voivat olla erityinen ja joustavampi versio tietokannasta.

PHP:n tekstitiedoston lukeminen on nopeaa, se voidaan jäsentää välittömästi rakenteeksi, taulukoksi tai objektiksi. Jälkimmäinen on erittäin tärkeä, koska sen avulla voit luoda esineitä, jotka elävät varatun ajan ulkopuolella PHP-skripti, joka, kuten tiedät, voi olla olemassa vain palvelimella ja vain kun sivu ladataan, syntyy AJAX-vastaus tai muusta syystä, joka saa PHP-tulkin käynnistymään.

Jos ajattelet sitä, että tekstitiedosto on kehittäjän sisältö ja rakenne, PHP-tiedosto on tulkin syntaksi ja kehittäjän logiikka, ja "tagatut" kuvaukset html, css, xml ovat semanttisia elementtejä, mutta säänneltyjä. staattisten standardien mukaan. Voidaan päätellä, että tiedostojen on luultavasti aika hankkia uutta sisältöä, ja tämän pitäisi sinänsä määrittää niiden laatu ja käyttölogiikka. Juuri siksi, että ohjelmointi ei ole vielä valmis seuraavaan kehitysvaiheeseen, tiedostot jäävät nykyään vain tiedostoiksi, jotka kehittäjä luo ja määrittelee niiden käytön.

Mielenkiintoisin ja lupaavin asia on, kun PHP lukee PHP-tiedoston itsenäisesti tarpeen tullen. Ja yksinkertainen PHP lukee rivin tiedostosta johtaa objektin luomiseen, ainakin siinä tilassa, jossa se on tallennettu. Nämä eivät ole täysin tuttuja ajatuksia, mutta nykymaailmassa kaikki muuttuu niin nopeasti.

16.5K

Itse asiassa php-tiedoston avaaminen ei ole suuri ongelma. Olutpullon avaaminen voi olla vaikeampaa, kun olet keskellä metsää. Mutta vain innokkaat ohjelmoijat ajattelevat näin. Ja aloittelijoille kerromme sinulle kaikista PHP:n ominaisuuksista tiedostojen kanssa työskentelemiseen:

php-tiedostoja

Tiedostot, joissa on php-tunniste, sisältävät koodia, joka on kirjoitettu samannimisellä ohjelmointikielellä. Toisin kuin muut kielet, php on palvelinpuolen ohjelmointikieli. Eli se toimii palvelinpuolella. Siksi sen koodin virheenkorjausta varten asiakaskoneelle on asennettava paikallinen palvelin.

Php-tiedostojen kanssa työskentelemiseen käytetään erityisiä sovelluksia - ohjelmistoeditoreja. Yleisimmät ovat:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP -kehitys.
Kun luot PHP-pohjaisia ​​verkkosivustoja, saatat joutua käyttämään ohjelmakoodia uudelleen. Tällaisissa tilanteissa on kätevää yhdistää toisessa tiedostossa olevia valmiita ratkaisuja. Tähän käytetään include-rakennetta. Sen syntaksi on:

sisältää tiedostonimen

Kytkentäesimerkki:

Mukana oleva tiedosto:


Tiedoston sisällyttäminen on myös mahdollista vaati-konstruktiolla. Toisin kuin include, se sisältää tiedoston ennen ohjelmakoodin suorittamista. Koodissa vaatimalla vain yksi kutsu tähän tiedostoon on mahdollista. Kun järjestelmä avataan uudelleen, se näyttää yleisen virheilmoituksen ja pysäyttää ohjelman suorittamisen.

Sisällyttävä rakenne sisältää vain lähteen ohjelman suorituksen aikana. Se tukee useita php-tiedostojen lukemista. Jos tapahtuu virhe, näyttöön tulee vain varoitusviesti ja koodin suoritus jatkuu seuraavalta riviltä.

Tiedostojen avaaminen ja sulkeminen

Php:ssä kaikki tiedostojen toiminnot suoritetaan useissa vaiheissa:

  • Tiedoston avaaminen;
  • Sisällön muokkaus;
  • Tiedoston sulkeminen.

Fopen()-funktiota käytetään tiedoston avaamiseen. Sen syntaksi on:

int fopen(merkkijonotiedoston nimi, merkkijonotila [, int use_include_path])

Hyväksytyt argumentit:

  • merkkijono tiedostonimi – tiedoston nimi tai absoluuttinen polku siihen. Jos tiedoston polkua ei ole määritetty, se etsitään nykyisestä hakemistosta. Jos etsimäsi tiedosto puuttuu, järjestelmä näyttää virheilmoituksen. Esimerkki:

  • merkkijonotila – ilmaisee tiedoston avaustilan. Argumentin hyväksymät arvot:
  • r – tiedosto avataan vain lukua varten, tiedoston osoitin asetetaan alkuun;
  • r+ – tiedosto on avoinna lukemista ja kirjoittamista varten;
  • w – luo uuden tiedoston vain kirjoittamista varten. Jos samanniminen tiedosto on jo olemassa, kaikki sen tiedot poistetaan automaattisesti.
  • w+ - luo uuden tiedoston kirjoittamista ja lukemista varten. Kun tällainen tiedosto on olemassa, sen tiedot korvataan kokonaan uusilla;
  • a – tiedosto on avoinna kirjoittamista varten. Osoitin asetetaan loppuun. Eli php-tiedostoon kirjoittaminen ei ala alusta, vaan lopusta;
  • a+ – avaa tiedoston luku-kirjoitustilassa. Tallennus alkaa lopusta;
  • b – tapa työskennellä binääridataa sisältävän tiedoston kanssa (binäärilukujärjestelmässä). Tämä tila on käytettävissä vain käyttöjärjestelmä Windows.

Voit sulkea tiedoston käytön fclose()-funktiolla. Syntaksi:

int fclose (int-tiedosto) , jossa int-tiedosto on suljettavan sivuston kahva.

Jokaisen lukemisen tai kirjoittamisen jälkeen tiedosto on suljettava tällä toiminnolla. Muussa tapauksessa tiedostolle luotu stream pysyy auki. Ja tämä johtaa tarpeettomasti palvelimen kapasiteetin kulutukseen.

Esimerkki:

Tiedostojen lukeminen ja kirjoittaminen

Jos haluat yksinkertaisesti näyttää tiedoston koko sisällön, readfile()-funktio on ihanteellinen. Sen syntaksi on:

readfile (merkkijonotiedoston nimi) , jossa merkkijonotiedoston nimi on merkkijonotiedoston nimi (ei kahva).


Sama tiedosto voidaan lukea fpassthru()-funktiolla. Se lukee tiedot pääteosoittimen sijainnista tiedoston loppuun. Sen syntaksi on:

int fpassthru (int-tiedosto)

Toiminto vaatii tiedoston avaamisen ja sulkemisen. Esimerkki:

Tulos on samanlainen kuin edellinen.

Toiminnot php-tiedostojen käsittelyyn mahdollistavat sisällön lukemisen rivi riviltä ja merkki merkiltä:

  • merkkijono fgets (int-tiedosto, int pituus)– funktio lukee merkkijonon, jonka pituus on . Esimerkki:

  • merkkijono fread (int tiedosto, int pituus)– toiminto on sama kuin edellinen.

Tekstidatan kirjoittamiseksi tiedostoon on kaksi identtistä toimintoa:

  • int fputs (int-tiedosto, merkkijono [, int pituus ])
  • int fwrite(int tiedosto, merkkijono [, int pituus ])

Funktiot kirjoittavat tiedostoon int-tiedostoon määritetyn pituisen merkkijonon int ( valinnainen argumentti). Esimerkki:

Tiedostojen luominen ja poistaminen

Voit luoda php-tiedoston käyttämällä fopen()-funktiota "w"- tai "w+"-käyttötilassa. Tai touch()-toiminto. Se määrittää tiedoston muokkausajan. Jos etsityllä nimellä ei ole elementtiä, se luodaan. Sen syntaksi.




Yläosa