Kurkite, atidarykite, skaitykite, rašykite, ištrinkite ir patikrinkite, ar nėra failų PHP. Php failo kūrimas, PHP skaitymo eilutės skaitymas ir rašymas iš failo

16,5 tūkst

Tiesą sakant, kaip atidaryti php failą nėra didelė problema. Būnant miško viduryje gali būti sunkiau atidaryti alaus butelį. Tačiau taip galvoja tik aistringi programuotojai. Ir pradedantiesiems papasakosime apie visas PHP galimybes dirbti su failais:

php failus

Failuose su plėtiniu php yra kodas, parašytas to paties pavadinimo programavimo kalba. Skirtingai nuo kitų kalbų, php yra serverio programavimo kalba. Tai yra, jis veikia serverio pusėje. Todėl norint derinti jo kodą, kliento kompiuteryje turi būti įdiegtas vietinis serveris.

Norėdami dirbti su php failais, naudojamos specialios programos - programinės įrangos redaktoriai. Dažniausi yra šie:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP kūrimas.
Kuriant svetaines PHP pagrindu, gali tekti pakartotinai naudoti programos kodą. Tokiose situacijose patogu prijungti paruoštus sprendimus, esančius kitame faile. Tam naudojama įtraukimo konstrukcija. Jo sintaksė yra tokia:

įtraukti failo pavadinimą

Ryšio pavyzdys:

Įtrauktas failas:


Įtraukti failą taip pat galima naudojant reikalingą konstrukciją. Skirtingai nuo include, jis apima failą prieš programos kodo vykdymą. Kode naudojant reikalavimą, galimas tik vienas šio failo iškvietimas. Vėl prisijungus, sistema parodys visuotinį klaidos pranešimą ir sustabdys programos vykdymą.

Įtraukimo konstrukcija apima tik šaltinį programos vykdymo metu. Jis palaiko daugkartinį php failo skaitymą. Jei įvyksta klaida, bus rodomas tik įspėjamasis pranešimas, o kodo vykdymas bus tęsiamas nuo kitos eilutės.

Failų atidarymas ir uždarymas

php visos operacijos su failais atliekamos keliais etapais:

  • Failo atidarymas;
  • Turinio redagavimas;
  • Failo uždarymas.

Funkcija fopen() naudojama failui atidaryti. Jo sintaksė yra tokia:

int fopen (eilutės failo pavadinimas, eilutės režimas [, int use_include_path])

Priimtini argumentai:

  • eilutės failo pavadinimas – failo pavadinimas arba absoliutus kelias į jį. Jei failo kelias nenurodytas, jo bus ieškoma esamame kataloge. Jei ieškomo failo trūksta, sistema parodys klaidos pranešimą. Pavyzdys:

  • eilutės režimas – nurodo failo atidarymo režimą. Argumentu priimtinos vertės:
  • r – failas atidaromas tik skaitymui, failo žymeklis nustatomas pradžioje;
  • r+ – failas atidarytas skaitymui ir rašymui;
  • w – sukuria naują failą tik rašymui. Jei failas tokiu pat pavadinimu jau yra, visi jame esantys duomenys automatiškai ištrinami;
  • w+ – sukuria naują failą rašymui ir skaitymui. Kai toks failas egzistuoja, jo duomenys visiškai perrašomi naujais;
  • a – failas atidarytas rašymui. Rodyklė nustatoma pabaigoje. Tai yra, rašymas į php failą prasidės ne nuo pradžios, o nuo pabaigos;
  • a+ – atidaryti failą skaitymo ir rašymo režimu. Įrašymas prasidės nuo pabaigos;
  • b – darbo su byla, kurioje yra dvejetainių duomenų, režimas (dvejetainėje skaičių sistemoje). Šis režimas galimas tik „Windows“ operacinėje sistemoje.

Norėdami uždaryti prieigą prie failo, naudokite fclose() funkciją. Sintaksė:

int fclose (int failas) , kur int failas yra svetainės uždarymo rankena.

Po kiekvieno skaitymo ar rašymo failas turi būti uždarytas naudojant šią funkciją. Kitu atveju failui sukurtas srautas lieka atidarytas. Ir dėl to be reikalo eikvojama serverio talpa.

Pavyzdys:

Failų skaitymas ir rašymas

Norint tiesiog parodyti visą failo turinį, funkcija readfile() yra ideali. Jo sintaksė yra tokia:

readfile (eilutės failo pavadinimas) , kur eilutės failo pavadinimas yra eilutės failo pavadinimas (ne rankena).


Tą patį failą galima nuskaityti naudojant fpassthru() funkciją. Jis skaito duomenis nuo pabaigos rodyklės padėties iki failo pabaigos. Jo sintaksė yra tokia:

int fpassthru (int failas)

Funkcijai reikia atidaryti ir uždaryti failą. Pavyzdys:

Rezultatas panašus į ankstesnį.

Funkcijos, skirtos dirbti su failais php, leidžia skaityti turinį eilutė po eilutės ir simbolis po simbolio:

  • string fgets (int failas, int ilgis)– funkcija nuskaito ilgio eilutę. Pavyzdys:

  • string fread (int failas, int ilgis)– veiksmas yra identiškas ankstesniam.

Norint įrašyti tekstinius duomenis į failą, yra dvi identiškos funkcijos:

  • int fputs (int failas, eilutės eilutė [, int ilgis ])
  • int fwrite(int failas, eilutės eilutė [, int ilgis ])

Funkcijos įrašo į failą int failą nurodyto ilgio eilutę int ilgio ( neprivalomas argumentas). Pavyzdys:

Failų kūrimas ir trynimas

Norėdami sukurti php failą, galite naudoti funkciją fopen() prieigos režimu "w" arba "w+". Arba funkcija touch(). Jis nustato failo keitimo laiką. Jei ieškomo pavadinimo elemento nėra, jis bus sukurtas. Jo sintaksė.

styga fgets(ištekliaus rankena [, vid. ilgis])

Grąžina 1 baito ilgio eilutę, nuskaitytą iš failo deskriptoriaus, nurodyto rankena. Skaitymas baigiasi, kai nuskaitytų baitų skaičius pasiekia ilgį - 1, kai pasiekia eilutės pabaigą (kuri įtraukiama į grąžinamąją reikšmę) arba kai pasiekia failo pabaigą (atsižvelgiant į tai, kas įvyksta anksčiau). Jei ilgis nenurodytas, numatytasis dydis yra 1 kilobaitas arba 1024 baitai.

Jei įvyksta klaida, funkcija grįžta NETEISINGA .

Dažniausios klaidos:

Programuotojai, pripratę prie „C“ funkcijų semantikos fgets (), turi atsižvelgti į skirtumą, kaip grąžinama failo pabaigos (EOF) vėliavėlė.

Failo žymeklis turi būti galiojantis ir nukreipti į failą, kurį sėkmingai atidarė funkcijos fopen () arba fsockopen () .

Žemiau pateikiamas paprastas pavyzdys:


1 pavyzdys. Failo skaitymas eilutė po eilutės

$rankena = fopen("/tmp/inputfile.txt" , "r" );
while (! feof ($handle )) (
$buferis = fgets($rankena, 4096);
echo $buferis ;
}
fclose($rankena);
?>

komentaras: Ilgio parametras tapo neprivalomas, pradedant PHP 4.2.0 versija. Jei šis parametras praleistas, daroma prielaida, kad eilutės ilgis yra 1024. Nuo PHP 4.3, praleidus ilgio parametrą, srautas bus nuskaitomas iki eilutės pabaigos. Jei dauguma failo eilučių yra ilgesnės nei 8 kilobaitai, efektyviausias sprendimas dėl scenarijaus naudojamų išteklių yra nurodyti didžiausią eilutės ilgį.

komentaras:Ši funkcija gali tinkamai apdoroti dvejetainius duomenis nuo PHP 4.3. Ankstesnėse versijose šios funkcijos nebuvo.

PHP pasirodė daug vėliau, nei programavimo kalbos sustiprino savo pozicijas ir suformulavo bendras idėjas apie sintaksę, logiką, kintamuosius ir kitus programos objektus. Failai ir funkcijos, skirtos darbui su jais, nepadarė pažangos, net ir dėl natūralių priežasčių iškilusi failų kodavimo problema radikaliai naujų sprendimų neprivedė.

Bendros pastabos

Pagrindinis darbas su failais, kad ir kokie jie būtų, susideda iš atidarymo, skaitymo/rašymo ir uždarymo. Galite naudoti prieigos prie failo blokavimo/atblokavimo funkcijas, kol jis apdorojamas, galite nustatyti skaitymo/rašymo padėtį faile – viskas kaip ir anksčiau, tolimoje praeityje.

Svarbus PHP taškas yra darbo su failais funkcijų ir jų naudojimo parinkčių gausa. Praktiškai pakanka naudoti paprastas, bet veikiančias parinktis. Failas visų pirma yra programos atmintis. Jame galite saugoti informaciją. Bet kurios programos, bet kurios svetainės tikslas yra pateikti, apdoroti ir užtikrinti informacijos saugumą.

Esminė aplinkybė

Anksčiau suderinamumo reikalavimas, bent jau iš apačios į viršų, buvo nepajudinamas. Tai reiškia, kad programa, vieną kartą parašyta viena programavimo kalbos versija, idealiai sukompiliuojama/interpretuojama kitoje versijoje. Šiuolaikiniame programavime taip nėra. Kalbos sintaksinių struktūrų suderinamumo reikalavimas tapo istorijos dalyku, o kova tarp stilių ir programavimo įrankių bei tam tikrų įrankių versijų tapo jų gyvenimo norma.

Darbas su failais, taip pat su duomenų bazėmis, yra toks pat svarbus kaip ir svetainės sąsaja. Pirmasis turėtų būti sukurtas taip, kad keičiant platformą, prieglobą ar kalbos versiją, nereikėtų keisti svetainės kodo. Darbo su failais sąsaja turi būti įtraukta į atskirą scenarijų ir užtikrinti visišką suderinamumą, kaip ir svetainės dizainas turi deramai prisitaikyti prie bet kurio įrenginio, naršyklės ir suteikti tokias pačias galimybes likusioms svetainės funkcijoms.

Skaitykite ir keiskite save

Ar programa gali pasikeisti pati, tai yra, scenarijus gali tobulėti? Iki šiol šis klausimas domina daugelį. Tačiau užduotis skamba daug praktiškiau: PHP nuskaito PHP failą. Kūrėjas ne visada gali išspręsti tam tikrą problemą parašydamas konkretų kodą. Kartais jį reikia pakeisti, kai lankytojas ateina į svetainę ir suformuluoja klausimą, kuris nebuvo numatytas kūrimo etape.

Kaip ir visais kitais atvejais, pirmiausia turite atidaryti failą. Nesvarbu, ar šis failas egzistuoja, ar ne. Jei žinoma, kad failas egzistuoja (funkcija file_exists() duoda teigiamą atsakymą), funkcija fopen() naudojama su prieiga 'r', 'r+', 'a', 'a+'. Jei failo dar nėra, tada su prieiga „a“, „a+“, „w“, „w+“. Failo atidarymo rezultatas bus jo aprašas. Failas uždaromas naudojant fclose() funkciją.

Patogu naudoti PHP, norint nuskaityti failą į masyvą, kai jo nereikia apdoroti skaitymo metu.

if (failas_egzistuoja($fName)) (

$aLines = failas($fName)

Pasirinkus šią parinktį, kiekviena failo eilutė paeiliui patenka į masyvo elementą. Reikėtų pažymėti, kad failo () arba file_get_contents() funkcijoms nereikia atidaryti failo ir jo uždaryti.

Kai įvesties failas yra per didelis ir jums reikia rasti tik šiek tiek informacijos arba dėl kitų priežasčių, galite naudoti PHP failą eilutę perskaityti. PHP suteikia galimybę tai padaryti su fgets() ir fgetc() funkcijomis.

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

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

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

Abu variantai veikia nepriekaištingai. Tačiau atliekant PHP failo nuskaitymą, kad vėliau jį modifikuotų, reikia imtis atsargumo priemonių. Ne visada galima numatyti, kaip lankytojas ja naudosis svetainės kūrimo etape. Geriau, jei scenarijai būtų pakeisti svetainės funkcijomis, o lankytojas, įskaitant išteklių administratorių, negali valdyti šio pakeitimo.

Rezultatų išsaugojimas

Gautą ir atnaujintą informaciją į failą įrašo funkcija fputs() eilutė po eilutės arba funkcija file_put_contents() kaip visuma.

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

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

pulkas ($fvs, LOCK_EX)

$cLine = "1 eilutė". chr (10)

fputs ($fvs, $cLine)

$cLine = "2 eilutės" . chr (10)

fputs ($fvs, $cLine)

pulkas ($fvs, LOCK_UN)

Pasirinkę įrašymo eilutę parinktį, galite manipuliuoti duomenimis įrašymo proceso metu; antruoju atveju įrašyta eilutė arba masyvas įdedamas į visą failą.

$failas = " scData.php "

$cContents = failas_gauti_turinys($failas)

// įrašo pridėjimas

$cContents .= "naujas įrašas\n"

// parašykite failą atgal

file_put_contents($failas, $cContents)

Skaityti ir rašyti PHP failus paprasta ir natūralu. Tačiau svarbu nepamiršti: kiekvienas failas turi pavadinimą, plėtinį ir kelią (aplanką). Kad PHP scenarijus galėtų skaityti ir rašyti failus, scenarijus turi turėti atitinkamas teises. Jie automatiškai rodomi priegloboje, tačiau kai kuriais atvejais juos reikia išplėsti.

Kai kuriais atvejais gali būti pageidautina patikrinti rezultatus atliekant bandomąjį skaitymą. Kuriant PHP failus to reikia, tačiau kai kuriais atvejais, siekiant svetainės saugumo ar patikimumo, būtina patikrinti duomenų įrašymą.

Būdinga PHP, MySQL, JavaScript ir ypač naršyklių savybė: tyliai leidžia įvykti kai kurioms klaidoms. „Neatpažintas, nepadarytas...“ nėra labai gera praktika informacinių technologijų pažangoje, tačiau moko kūrėjus neklysti ir rašyti švarų, kokybišką kodą, kas taip pat nėra blogai.

PHP ir darbas su tikrais dokumentais

PHP skaitymas PHP failas tikrai yra praktinis interesas, tačiau tai yra programavimo sritis. Vartotoją ir svetainės lankytoją domina taikomojo pobūdžio informacija, kurią jis įpratęs matyti lentelių ir dokumentų pavidalu, ypač *.xlsx ir *.docx failų formatais. Tai failai MS Excel ir MS Word formatu.

Prekių, kainų, charakteristikų sąrašai dažniausiai formuojami lentelių pavidalu, todėl PHP skaitymas Excel failas yra būtinas.

PHPExcel ir PHPWord bibliotekos buvo sukurtos dirbti su tokiais failais. Tačiau *.xlsx ir *.docx failų turinys pateikiamas OOXML standarte, tai yra, tikras, suprantamas dokumentas pateikiamas zip archyve. Zip archyvas yra rinkinys failų, įskaitant paveikslėlius, objektus, formules ir įdėklus iš kitų programų. Tekstiniai failai čia pateikiami aprašymais žymų pavidalu. Tokį failą perskaityti neužtenka; reikia jį išanalizuoti, kad gautumėte turinį ir struktūrą naudojimui ir modifikavimui.

Tai reiškia, kad skaitymo operacija virsta archyvo atidarymo procedūra. Šios bibliotekos savarankiškai atidaro dokumentų archyvą ir suteikia kūrėjui plačias tokių dokumentų skaitymo, apdorojimo ir rašymo funkcijas.

Excel lentelės

include_once 'PhpOffice/PhpExcel/IOFactory.php'

funkcija scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFActory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//šiame masyve yra eilučių masyvai

$aSheet = $objPHPExcel->getActiveSheet()

$masyvas = masyvas()

//gydymas

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

$cellIterator = $row->getCellIterator()

foreach($cellIterator kaip $cell)(

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

masyvas_push($masyvas, $elementas)

Skaityti ir apdoroti „Excel“ failus yra daug sunkiau nei apdoroti „Word“ dokumentus. Geriausias pasirinkimas, jei reikia įgyvendinti rimtą taikomosios informacijos skaitymo ir apdorojimo projektą, pirmiausia įsisavinti PHPWord biblioteką. Tai suteiks jums geros patirties ir greitai suprasite problemos specifiką.

Word dokumentai

Tik dvi eilutės:

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

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

Dabar galima apdoroti dokumentą $cFileName. Toliau atidaromas archyvas, parenkamas ir analizuojamas jo turinys, kurį galima atvaizduoti svetainėje, keisti ir atrašyti.

$zipClass = naujas ZIPArchyvas()

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

// perskaityti visą dokumento turinį

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

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

$cNameInExt = substr($cNameIn, -4)

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

// failai su plėtiniais ".xml" ir ".xml.rels" išsaugomi dokumentų lentelėje

// kiekviena xml eilutė parašyta su unikaliu numeriu

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

$cBodyInLen = strlen($cBodyIn)

// visi kiti failai įrašomi į dokumentų aplanką taip, kaip yra

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

$zipClass->getFromName($cNameIn, $cWorkPath); // turinys kaip failas

PHP Excel ir PHP Word siūlomos galimybės leidžia manipuliuoti tikrais dokumentais ir bet kuriuo metu padaryti jų turinį aktualų. Šiandieniniame dinamiškame pasaulyje tai tampa labai svarbu. Svorio centras jau seniai persikėlė iš vietinio kompiuterinių technologijų naudojimo į virtualią interneto erdvę. Todėl lentelių ir dokumentų kūrimas vietiniuose Microsoft produktuose yra mažiau efektyvus nei darbas su tokiais dokumentais automatiniu ir pusiau automatiniu režimu svetainėje, kuri yra prieinama ne tik lentelės ar dokumento kūrėjui, bet ir jos vartotojams.

Tekstiniai failai, kitas gyvenimas

Iš pradžių tekstiniai failai yra paprastesni nei PHP failai ar taikomųjų programų dokumentai. Tačiau čia yra apie ką pagalvoti. Tokių failų skaitymo/rašymo operacijos jau nurodytos aukščiau, tačiau tokių failų reikšmė yra daug svarbesnė.

Kadangi yra tokia duotybė kaip klientas ir serveris (pirmajame dominuoja JavaScript, antrame – PHP), tai net slapukų ir seansų mechanizmai negali susidoroti su poreikiu perkelti informaciją tarp scenarijų, puslapių ar tam tikrų procesų.

Atspindėti norimus pakeitimus duomenų bazėje galima, tačiau nepaisant visų privalumų ir greičio maži laikini ar nuolatiniai tekstiniai failai gali būti kur kas įdomesnis informacijos perdavimo variantas. Jei nesukuriate daug mažų failų ir nekontroliuojate jų dydžio, tai gali būti specifinė ir lankstesnė duomenų bazės versija.

PHP nuskaito tekstinį failą greitai, jį galima iš karto išanalizuoti į struktūrą, masyvą ar objektą. Pastarasis yra labai svarbus, nes leidžia kurti objektus, kurie gyvena ne per PHP scenarijui skirtą laiką, kuris, kaip žinia, gali egzistuoti tik serveryje ir tik puslapio įkėlimo momentu gaunamas AJAX atsakymas. sugeneruotas arba dėl kitos priežasties, dėl kurios paleidžiamas PHP interpretatorius.

Jei galvojate apie tai, kad tekstinis failas yra kūrėjo turinys ir struktūra, PHP failas yra interpretatoriaus sintaksė ir kūrėjo logika, o „pažymėti“ aprašymai html, css, xml yra labiau semantiniai elementai, tačiau reguliuojami. pagal statinius standartus. Galima prieiti prie išvados, kad tikriausiai laikas failams įgyti naują turinį, o tai turėtų lemti jų kokybę ir naudojimo logiką. Būtent todėl, kad programavimas dar nėra paruoštas kitam savo kūrimo etapui, šiandien failai lieka tik failais, kuriuos kuria kūrėjas ir nustato jų naudojimą.

Įdomiausia ir daug žada, kai PHP nuskaito PHP failą savarankiškai, kai atsiranda poreikis. O paprastas PHP nuskaitant eilutę iš failo sukuriamas objektas, bent jau tokios būsenos, kurioje jis buvo išsaugotas. Tai nėra visiškai pažįstamos idėjos, tačiau šiuolaikiniame pasaulyje viskas taip greitai keičiasi.

Nagrinėdami šią temą, turite atsižvelgti į tai, kad norint pasiekti failą, kai kurios PHP funkcijos naudoja failo aprašą, o kitos – kelią į failą.

Skaitymas iš failo

Funkcija fread() gali būti naudojama norint gauti tam tikrą duomenų kiekį iš failo.

fread (failas, ilgis)

Galimybės:

failas – failo aprašas

ilgis – duomenų dydis baitais

Jei failo pabaiga pasiekiama anksčiau, nei funkcija nuskaito nurodytą duomenų dydį, ji grąžins mažesnę eilutę. Šią funkciją patogu naudoti dvejetainiams failams skaityti.

Nurodydami eilutės ilgį ir perkeldami žymeklį, turite atsižvelgti į tai, kad rusiškos raidės yra ne vieno baito dydžio, o didesnės. temoje „Darbas su stygomis“. Taip pat atminkite, kad UTF-8 koduoto failo pradžioje yra keli baitai. UTF-8 koduotė be BOM neturi šių baitų.

Pirmiausia perskaitykime 10 baitų iš failo myfile.txt. Atidarykime jį „r+“ režimu. Rodyklė bus pradžioje.

$failas = fopen("mano failas.txt", "r+"); $take = fread($failas, 10); echo $take;

Jei faile yra rusiškų raidžių, paskutinė raidė gali būti rodoma neteisingai. Taip atsitinka todėl, kad simbolis yra didesnis nei vienas baitas ir viena dalis nuskaitoma, o kita ne.

Fgets() funkcija grąžina vieną eilutę, pradedant nuo žymeklio iki eilutės pabaigos.

fgets (failas, ilgis)

Galimybės:

failas – failo aprašas

ilgis – leidžia nurodyti eilutės dydį baitais. Tokiu atveju, jei pasiekiama eilutės pabaiga, kita eilutė neįtraukiama į funkcijos rezultatą, net jei eilutė yra mažesnė už nurodytą ilgį. Pasirenkamas parametras.

Jei ilgis nenurodytas, senesnėse PHP versijose maksimalus grąžinamos eilutės ilgis buvo ribojamas. Naujesnėse versijose šis apribojimas nėra.

Vykdydami funkciją cikle, galite perskaityti failą eilutę po eilutės.

Perskaitykime vieną eilutę iš failo manofailas.txt. Kadangi žymeklis jau buvo perkeltas, bus skaitoma ne visa eilutė, o nuo žymeklio.

$take = fgets($failas); aidas"
".$paimkite;

Fgetss() funkcija taip pat grąžina vieną eilutę, bet pašalina iš jos HTML žymas. Jei kode yra PHP scenarijus, jis taip pat bus ištrintas.

fgetss (failas, ilgis, reikalingos žymos)

Galimybės:

failas – failo aprašas

ilgis – eilutės dydis baitais. Pasirenkamas parametras.

reikalingos žymos – leidžia nurodyti žymes, kurios nebus ištrintos.

Yra funkcija fgetc(), kuri grąžina vieną simbolį iš failo.

Funkcija file() nuskaito visą failą ir įdeda duomenis į masyvą. Kiekviena eilutė dedama į masyvo elementą. Kad ši funkcija veiktų, failo atidaryti nereikia. Į rodyklės vietą neatsižvelgiama.

failas (failo kelias, vėliavėlės, kontekstas)

Galimybės:

failo kelias – absoliutus arba santykinis kelias į failą

vėliavėlės – vėliavėlės, nulemiančios funkcijos veikimą. Pasirenkamas parametras.

kontekstas – leidžia nurodyti konteksto išteklius

Galite nurodyti šias vėliavėles:

FILE_USE_INCLUDE_PATH – leidžia ieškoti failo įtraukimo kelio aplankuose.

FILE_IGNORE_NEW_LINES – pašalina eilutės pabaigos simbolį. Jei ši vėliavėlė nenustatyta, kiekvienoje eilutėje bus eilutės pabaigos simbolis.

FILE_SKIP_EMPTY_LINES – neprideda tuščių eilučių į masyvą.

Jei nurodytos kelios vėliavėlės, jos atskiriamos operatoriumi „|“.

Puslapyje parodykime failą manofailas.txt.

$ar = failas("mano failas.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); aidas"
"; print_r($ar);

Rašyti į failą

Fwrite() funkcija įrašo duomenis į failą.

fwrite (failas, duomenys, ilgis)

Galimybės:

failas – failo aprašas

duomenys – duomenys, kurie įrašomi

ilgis – didžiausias įrašytų duomenų dydis baitais. Galima parašyti ne visą eilutę, o tik nurodytą baitų skaičių. Pasirenkamas parametras.

Jei žymeklis yra failo pradžioje arba viduryje, funkcija failo simbolius pakeičia naujais. Tai yra, jei parašyti 5 simboliai, tada 5 simboliai ištrinami iš failo ir vietoj jų pridedami nauji.

Kai rašote rusiškas raides, scenarijaus kodavimas turi sutapti su failo koduote.

Į failą įrašykime eilutę „tekstas iš scenarijaus“. Mūsų pavyzdyje deskriptorius yra failo viduryje ir ten bus parašyta eilutė. Kai reikia pridėti duomenų prie failo pabaigos, galite jį atidaryti „a“ režimu. Ir kai reikia perrašyti failą, jis atidaromas „w“ režimu. Rodyklės nejudinsime, o duomenis rašysime ten, kur jie yra.

$text = "tekstas iš scenarijaus"; fwrite($failas, $tekstas);

Apie funkcijų fopen, fclose, feof, fgets, fgetss ir fscanf naudojimą

Išvardinkime visas galimybes

Vienas iš darbo su šiuolaikinėmis programavimo kalbomis, tokiomis kaip PHP, pranašumų yra galimų funkcijų skaičius. PHP gali lengvai pritaikyti Perlo šūkį: „Yra daugiau nei vienas būdas ką nors padaryti“, ypač kai kalbama apie failų apdorojimą. Tačiau turint daugybę įrankių, kyla klausimas, kuris iš jų geriausiai tinka darbui atlikti. Žinoma, atsakymas į šį klausimą tikrai priklauso nuo to, kokie yra jūsų tikslai apdorojant failą, todėl išmokti visas kalbos galimybes verta jūsų laiko.

Tradiciniai fopen metodai

Fopen metodai tikriausiai yra žinomiausi anksčiau C ir C++ programuotojams, nes tai yra daugiau ar mažiau įrankiai, kurie jau daugelį metų buvo po ranka, jei dirbote su tomis programavimo kalbomis. Naudodami bet kurį iš šių metodų, atlikite standartinę procedūrą, naudodami fopen, kad atidarytumėte failą, funkciją nuskaitytumėte duomenims, o tada fclose, kad uždarytumėte failą, kaip parodyta 1 sąraše.

Sąrašas 1. Failo atidarymas ir skaitymas naudojant fgets
$failo_rankena = fopen("mano failas", "r"); while (!feof($failo_rankena)) ( $line = fgets($failo_rankena); echo $line; ) fclose($failo_rankena);

Nors šios funkcijos yra žinomos daugumai patyrusių programuotojų, leiskite paanalizuoti, kaip jos veikia. Iš tikrųjų jūs atliekate šiuos veiksmus:

  1. Atidarykite failą. $file_handle saugo nuorodą į patį failą.
  2. Patikrinkite, ar pasiekėte failo pabaigą.
  3. Tęskite failo skaitymą, kol pasieksite pabaigą, atspausdindami kiekvieną perskaitytą eilutę.
  4. Uždarykite failą.

Atsižvelgdamas į tai, pažvelgsiu į kiekvieną čia naudojamą failo funkciją.

fopen funkcija

Funkcija fopen užmezga ryšį su failu. Sakau „užmezga ryšį“, nes be failo atidarymo, fopen taip pat gali atidaryti URL:

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

Ši programos eilutė sukuria nuorodą į aukščiau esantį puslapį ir leidžia pradėti ją skaityti kaip vietinį failą.

Pastaba:„r“ parinktis, naudojama fopen, rodo, kad failas yra atidarytas tik skaitymui. Kadangi rašymas į failą nėra įtrauktas į šiame straipsnyje aptariamas problemas, neišvardysiu visų galimų parametro reikšmių. Tačiau jūs turite pakeisti „r“ į „rb“, jei skaitote iš dvejetainių failų, kad būtų suderinamos įvairios platformos. Žemiau pateikiamas šio tipo pavyzdys.

feof funkcija

Komanda feof nustato, ar skaitymas pasiekė failo pabaigą, ir grąžina True arba False. Pavaizduota kilpa tęsiasi iki failo „myfile“ pabaigos. Atminkite, kad „feof“ taip pat pateikia „False“, jei skaitote URL ir baigiasi ryšio laikas, nes nebėra nuskaitytų duomenų.

Funkcija fclose

Praleiskime 1 sąrašo vidurį ir eikime į pabaigą; fclose veikia priešingai nei fopen: jis uždaro ryšį su failu arba URL. Įvykdę šią funkciją, nebegalėsite skaityti iš failo ar lizdo.

fgets funkcija

Grįžę keliomis eilutėmis 1 sąraše, pateksite į failų apdorojimo proceso esmę: iš tikrųjų skaitote failą. Fgets funkcija yra jūsų pasirinktas ginklas pirmam pavyzdžiui. Jis paima duomenų eilutę iš failo ir grąžina ją kaip eilutę. Iš ten galite rodyti duomenis arba kitaip juos apdoroti. 1 sąrašo pavyzdys spausdina visą failą.

Jei nuspręsite apriboti duomenų, su kuriais dirbate, dydį, galite pridėti argumentą fgets, kad apribotumėte maksimalų fiksuojamos duomenų eilutės ilgį. Pavyzdžiui, naudokite šį kodą, kad apribotumėte eilutės ilgį iki 80 simbolių:

$eilutė = fgets($failo_rankena, 81);

Pagalvokite apie „\0“, C eilutės pabaigos indikatorių, ir nustatykite ilgį vienu simboliu ilgesnį nei jums iš tikrųjų reikia. Kaip matote, aukščiau pateiktame pavyzdyje naudojamas 81 simbolis, o jums reikia 80 simbolių. Įpraskite pridėti papildomą simbolį, kai reikia nustatyti tam tikros funkcijos eilutės ilgio ribą.

fread funkcija

Fgets funkcija yra tik viena iš daugelio failo skaitymo funkcijų. Tai viena iš dažniausiai naudojamų funkcijų, nes failo apdorojimas eilutė po eilutės daugeliu atvejų yra prasmingiausias. Tiesą sakant, kelios kitos funkcijos siūlo panašias galimybes. Kad ir kaip būtų, eilutė po eilutės analizė ne visada yra tai, ko jums reikia.

Ir čia pasiekiame freadą. Funkcija „fread“ turi šiek tiek kitokią paskirtį nei „fgets“: ji skirta skaityti iš dvejetainių failų (tai yra, failų, kurie iš pradžių nėra sudaryti iš žmogaus skaitomo teksto). Kadangi sąvoka "eilutės" nėra svarbi dvejetainiams failams (loginės duomenų struktūros paprastai neskaidomos į eilutes), turite nurodyti nuskaitomų baitų skaičių.

$fh = fopen("mano failas", "rb"); $duomenys = fread($failo_rankena, 4096);

Aukščiau pateiktame pavyzdyje nuskaitoma 4096 baitai (4 KB) duomenų. Atminkite, kad nepaisant jūsų nurodytos reikšmės, „Fread“ skaitys daugiausia 8192 baitus (8 KB).

Darant prielaidą, kad failas yra ne didesnis nei 8 KB, toliau pateiktas programos fragmentas turėtų perskaityti visą failą vienoje eilutėje.

$fh = fopen("mano failas", "rb"); $duomenys = fread($fh, failo dydis("mano failas")); fclose($fh);

Jei failo dydis yra didesnis, turėsite naudoti kilpą, kad perskaitytumėte likusią jo dalį.

fscanf funkcija

Grįžtant prie eilučių apdorojimo, fscanf taip pat yra tradicinės C failų bibliotekos funkcijos įpėdinis. Jei nesate susipažinę su ja, fscanf nuskaito duomenų laukus į kintamuosius iš failo.

sąrašas ($laukas1, $laukas2, $laukas3) = fscanf($fh, "%s %s %s");

Šioje funkcijoje naudojamos formatų eilutės yra aprašytos daugelyje šaltinių, tokių kaip PHP.net, todėl šios informacijos čia nekartosiu. Pakanka pasakyti, kad eilučių formatavimas yra labai lankstus. Taip pat reikėtų paminėti, kad visi laukai dedami į funkcijos grąžintą kintamąjį. (C kalboje tai būtų perduodama kaip argumentai.)

fgetss funkcija

Fgetss funkcija skiriasi nuo tradicinių failų tvarkymo funkcijų ir leidžia geriau suprasti PHP galimybes. Jis veikia kaip fgets, bet atmeta visas aptiktas HTML arba PHP žymas, palikdamas tik tuščią tekstą. Paimkime žemiau esantį HTML failą.

Sąrašas 2. HTML failo pavyzdys
Mano titulas

Jei supranti, ką reiškia „Cause there ain“no one for to give you no pain“, tuomet klausaisi per daug grupės „America“

Perduokime jį per fgetss funkciją.

Sąrašas 3. Naudojant fgetss
$failo_rankena = fopen("mano failas", "r"); while (!feof($failo_rankena)) ( echo = fgetss($failo_rankena); ) fclose($failo_rankena);

Štai ką gausite kaip išvestį:

Mano pavadinimas Jei supranti, ką reiškia "Cause there ain"nobody for to do you no pain", tuomet klausotės per daug grupės America

fpassthru funkcija

Nepriklausomai nuo to, kaip skaitote duomenis iš failo, likusius duomenis galite spausdinti naudodami standartinį išvesties kanalą naudodami fpassthru funkciją.

fpassthru($fh);

Ši funkcija spausdina duomenis, todėl jums nereikės jų įdėti į kintamąjį.

Netiesinis failų apdorojimas: judėjimas per failą

Žinoma, aukščiau aprašytos funkcijos leidžia skaityti iš failo tik nuosekliai. Sudėtingesnius failus gali tekti perkelti į skirtingas failo dalis failo pradžioje arba pabaigoje. Norėdami tai padaryti, jums reikia fseek funkcijos.

fseek($fh, 0);

Aukščiau pateiktas pavyzdys grįžta į failo pradžią. Jei nenorite pereiti į pačią failo pradžią – tarkime, užtenka vieno kilobaito – tiesiog parašykite:

fseek($fh, 1024);

Nuo PHP 4.0 versijos taip pat yra keletas kitų parinkčių. Pavyzdžiui, jei jums reikia pajudėti į priekį 100 baitų nuo dabartinės padėties, galite naudoti šį kodą:

fseek($fh, 100, SEEK_CUR);

Taip pat 100 baitų perkėlimas atgal atliekamas taip:

fseek($fh, -100, SEEK_CUR);

Jei norite grįžti į 100 baitų padėtį prieš failo pabaigą, naudokite SEEK_END.

fseek($fh, -100, SEEK_END);

Pasiekę naują vietą, duomenims nuskaityti galite naudoti fgets, fscanf ar kitą funkciją.

Pastaba: negalite naudoti fseek failų aprašams, nurodantiems URL.

Užfiksuokite visą failą

Dabar pereiname prie kai kurių unikalių PHP failų apdorojimo galimybių: didelių duomenų blokų apdorojimo vienoje ar dviejose eilutėse. Pavyzdžiui, kaip galite paimti failą ir parodyti visą jo turinį savo tinklalapyje? Na, matėte ciklo su fgets naudojimo pavyzdį. Bet kaip tai padaryti lengviau? Procesas yra beveik juokingai lengvas naudojant fgetcontents, kuris sujungia visą failą į eilutę.

$mano_failas = failo_gauti_turinys("mano failo pavadinimas"); echo $mano_failas;

Nors tai nėra geriausias pasirinkimas, šią komandą galite parašyti dar trumpiau:

echo file_get_contents("mano failo pavadinimas");

Šiame straipsnyje daugiausia dėmesio skiriama vietinių failų apdorojimui, tačiau verta paminėti, kad naudodami aprašytas funkcijas taip pat galite užfiksuoti, rodyti ir analizuoti kitus tinklalapius.

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

Ši komanda iš tikrųjų yra tokia pati kaip:

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

Galbūt žiūrite į šiuos pavyzdžius ir galvojate: „Tai daug darbo“. PHP kūrėjai su jumis sutinka. Taigi galite sutrumpinti aukščiau pateiktą komandą iki:

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

Skaitymo failo funkcija išveda visą failo arba tinklalapio turinį į numatytąjį išvesties buferį. Pagal numatytuosius nustatymus ši komanda rodo klaidos pranešimą, kai nepavyksta. Norėdami išvengti tokio elgesio (jei norite), išbandykite komandą:

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

Žinoma, jei reikia apdoroti failų turinį, vienos eilutės, kurią grąžina file_get_contents, tikriausiai yra per daug. Pirmiausia galbūt norėsite jį padalinti į dalis naudodami split() funkciją.

$masyvas = split("\n", file_get_contents("mano failas"));

Bet kam jums reikia viso šio sudėtingumo, jei yra puikiai tinkama funkcija, kuri atliks darbą už jus? PHP file() funkcija šią užduotį atlieka vienu žingsniu: grąžina eilučių masyvą, kurio elementai yra failo eilutės.

$masyvas = failas("mano failas");

Reikėtų pažymėti, kad tarp dviejų aukščiau pateiktų pavyzdžių yra nedidelis skirtumas. Split komanda pašalina naujas eilutes, o failo komanda baigia masyvo eilutes naujomis eilutėmis (kaip ir fgets).

Tačiau PHP galimybės gerokai viršija aukščiau aprašytas galimybes. Galite išanalizuoti visus .ini failus PHP stiliumi naudodami tik vieną parse_ini_file komandą. Komanda parse_ini_file taikoma failams, panašiems į tuos, kurie rodomi 4 sąraše.

Sąrašas 4. .ini failo pavyzdys
; Komentaro pavadinimas = "Karaliaus Artūro" užduotis = ieškoti Šventojo Gralio mėgstamiausios spalvos = Mėlyna Samuelis Clemensas = Markas Tvenas Caryn Johnson = Whoopi Goldberg

Šios komandos vaizduoja failą kaip masyvą ir spausdina masyvą:

$failo_masyvas = parse_ini_file("holy_grail.ini"); print_r $failo_masyvas;

Rezultatas bus toks išėjimas:

Sąrašas 5. Išvestis
Masyvas (=> Karalius Artūras => Šventojo Gralio ieškoti => Mėlynas => Markas Tvenas => Whoopi Goldberg)

Žinoma, galite pastebėti, kad ši komanda sujungė skyrius. Tai yra numatytasis veiksmas, tačiau jį galite lengvai tinkinti naudodami antrąjį parse_ini_file argumentą: process_sections, kuris yra Būlio kintamasis. Nustatykite process_sections į True.

$failo_masyvas = parse_ini_file("holy_grail.ini", tiesa); print_r $failo_masyvas;

Ir jūsų produkcija atrodys taip:

Sąrašas 6. Išvestis
Array ( => Array ( => Karalius Artūras => Siekti Šventojo Gralio => Mėlynas) => Array ( => Markas Tvenas => Whoopi Goldberg))

PHP pateikia duomenis į lengvai analizuojamą daugiamatį masyvą.

Tačiau tai tik ledkalnio viršūnė, kai kalbama apie failų apdorojimą PHP. Sudėtingesnės funkcijos, pvz., tidy_parse_file ir xml_parse, gali padėti analizuoti atitinkamai HTML ir XML dokumentus. Išsamesnės informacijos apie šių funkcijų veikimą rasite skyriuje. Jei dirbate su šiais failų tipais, verta apsvarstyti abu šiuos dalykus, tačiau užuot peržiūrėję visus galimus failų tipus, galbūt norėsite atidžiau pažvelgti į šio straipsnio turinį, kuriame pateikiamos kelios geros bendrosios taisyklės. dirbu su iki šiol aprašytomis funkcijomis.

Geras programavimo stilius

Niekada nemanykite, kad viskas jūsų programoje veiks taip, kaip numatyta. Pavyzdžiui: ką daryti, jei failas, kurio ieškote, buvo perkeltas? Ką daryti, jei dėl leidimo pakeitimo negalėsite perskaityti failo turinio? Galite patikrinti failo egzistavimą ir teises jį skaityti iš anksto naudodami failo_egzistuoja ir yra_skaitoma metodus.

Sąrašas 7. Failas_egzistuoja ir yra_skaitomas
$failo pavadinimas = "mano failas"; if (failo_egzistuoja($failo pavadinimas) && yra_skaitomas ($failo pavadinimas)) ( $fh = fopen($failo pavadinimas, "r"); # Apdorojama fclose($fh); )

Tačiau praktikoje ši programa tikriausiai bus per didelė jūsų užduotis. Fopen grąžintų verčių tvarkymas yra paprastesnis ir tikslesnis.

if ($fh = fopen($failo pavadinimas, "r")) ( # Apdorojama fclose($fh); )

Kadangi fopen grąžina False, jei nepavyksta, tai užtikrins, kad failas bus apdorotas tik tuo atveju, jei failą bus galima atidaryti. Žinoma, jei failo nėra arba jis neįskaitomas, tikėtina, kad grąžinimo reikšmė bus neigiama. Todėl toks patikrinimas yra spąstai, į kuriuos patenka visos galimos problemos. Arba galite išeiti iš programos arba parodyti klaidos pranešimą, jei failo atidaryti nepavyksta.

Kaip ir fopen, funkcijos file_get_contents, file ir readfile pateikia False, jei failo negalima atidaryti ar apdoroti. Funkcijos fgets, fgetss, fread, fscanf ir fclose taip pat grąžina False, jei įvyksta klaida. Žinoma, išskyrus fclose , tikriausiai jau apdorojote jų grąžinamus rezultatus. Kalbant apie fclose , nėra daug ką padaryti, jei failo rankena neužsidaro tinkamai, todėl tikrinti grąžinamąją fclose reikšmę paprastai yra per daug.

Tavo pasirinkimas

PHP netrūksta efektyvių failų skaitymo ir analizavimo būdų. Klasikinės funkcijos, pvz., „Fread“, didžiąją laiko dalį gali patikimai pasitarnauti arba jus labiau traukia skaitymo failo paprastumas, jei to jums reikia norint atlikti darbą. Pasirinkimas tikrai priklauso nuo to, ką jūs bandote pasiekti.

Jei apdorojate didelius duomenų kiekius, greičiausiai fscanf bus naudingesnis ir efektyvesnis nei, tarkime, failo naudojimas kartu su paskesnėmis split ir sprintf komandomis. Jei tiesiog rodote didelį teksto kiekį su nedideliais pakeitimais, failo , file_get_contents arba readfile funkcijų naudojimas gali būti prasmingesnis. Šis sprendimas tikriausiai bus teisingas, kai naudosite PHP talpykloje saugoti ar net kuriant laikinąjį tarpinį serverį.

PHP suteikia daug įrankių darbui su failais. Susipažinkite su kiekvienu iš jų geriau ir sužinokite, kurie įrankiai geriausiai tinka projektui, su kuriuo dirbate. Jums siūlomas platus programinės įrangos įrankių pasirinkimas, naudokite juos efektyviausiai ir smagiai tvarkykite failus naudodami PHP.

Dalintis