Php како да се изговара. Работа со датотеки во php: отворање, пишување, читање. Традиционалните методи на печење

Последно ажурирање: 1/11/2015

Како и повеќето програмски јазици, PHP поддржува работа со датотеки, кои се еден од начините за складирање на информации.

Читање и пишување датотеки

Отворање и затворање датотеки

За отворање датотеки во PHP, се дефинира функцијата fopen(). Ја има следнава дефиниција: ресурс fopen (низа $име на датотека, низа $режим) . Првиот параметар $filename ја претставува патеката до датотеката, а вториот е режимот на отворање. Во зависност од целта на отворањето и видот на датотеката, овој параметар може да ги има следните вредности:

    "r" : Датотеката е отворена само за читање. Ако датотеката не постои, враќа false

    "r+" : Датотеката е отворена само за читање и може да се запишува. Ако датотеката не постои, враќа false

    "w" : Датотеката е отворена за пишување. Ако таква датотека веќе постои, тогаш таа се препишува, ако не, тогаш се креира.

    "w+" : Датотеката е отворена за пишување и читлива. Ако таква датотека веќе постои, тогаш таа се препишува, ако не, тогаш се креира.

    "a" : Датотеката е отворена за пишување. Ако таква датотека веќе постои, тогаш податоците се запишуваат до крајот на датотеката, а старите податоци остануваат. Ако датотеката не постои, таа се креира

    "a+" : Датотеката е отворена за читање и пишување. Ако датотеката веќе постои, тогаш податоците се додаваат на крајот на датотеката. Ако датотеката не постои, таа се креира

Излезот од функцијата fopen ќе биде дескриптор на датотека. Оваа рачка се користи за операции со датотеки и за затворање на датотеката.

По завршувањето на работата, датотеката мора да се затвори со помош на функцијата fclose(), која зема дескриптор на датотека како параметар. На пример, да отвориме и затвориме датотека:

$fd = fopen("form.php", "r") или умре ("не можев да ја отворам датотеката"); fclose($fd);

Конструкцијата или умре ("текст на грешка") дозволува скриптата да престане да работи и да прикаже некоја порака за грешка доколку функцијата fopen не можеше да ја отвори датотеката.

Читање датотека

Можете да користите неколку функции за читање датотека. За читање ред-по-линија, се користи функцијата fgets(), која прима дескриптор на датотека и враќа еден прочитан ред. Ајде да одиме низ целата датотека линија по ред:

Секогаш кога ќе се повика fgets(), PHP ќе го постави покажувачот на крајот од прочитаната линија. За да се следи крајот на датотеката, се користи функцијата feof(), која се враќа true кога датотеката е завршена. И додека не се достигне крајот на датотеката, можеме да ја користиме функцијата fgets().

Читање на целата датотека

Во овој случај, не мораме експлицитно да ја отвориме датотеката, да добиеме рачка и потоа да ја затвориме датотеката.

Блокирај читање

Можете исто така да направите читање блок-по-блок, односно да прочитате одреден број бајти од датотека користејќи ја функцијата fread():

Функцијата fread() зема два параметри: рачката на датотеката за читање и бројот на бајти за читање. Кога се чита блок, покажувачот во датотеката се поместува до крајот на тој блок. Исто така, користејќи ја функцијата feof() можете да го следите завршувањето на датотеката.

Напишете датотека

За да напишете датотека, користете ја функцијата fwrite(), која ја запишува следната линија во датотеката:

Друга функција fputs() работи слично:

Работа со покажувачот на датотеката

При отворање на датотека за читање или пишување во режим „w“, покажувачот во датотеката се поставува на почетокот. При читање податоци, PHP го поместува покажувачот во датотеката до крајот на блокот на прочитани податоци. Сепак, можеме и рачно да манипулираме со покажувачот во датотеката и да го поставиме на произволна локација. За да го направите ова, треба да ја користите функцијата fseek, кој ја има следната формална дефиниција:

Int fseek (ресурс $handle , int $offset [, int $whence = SEEK_SET ])

Параметарот $handle претставува рачка на датотека. Параметарот $offset е поместување во бајти во однос на почетокот на датотеката од која ќе започне читањето/пишувањето. Третиот изборен параметар одредува како се поставува поместувањето. Може да потрае три вредности:

    SEEK_SET: стандардна вредност, го поставува поместувањето во офсет бајти во однос на почетокот на датотеката

    SEEK_CUR: го поставува поместувањето во офсет бајти во однос на почетокот на моменталната позиција во датотеката

    SEEK_END : го поставува поместувањето да ги помести бајтите од крајот на датотеката

Ако покажувачот е успешно инсталиран, функцијата fseek() враќа 0, а ако покажувачот е неуспешен, враќа -1.

Пример за користење на функцијата:

$fd = fopen ("hello.txt", "w+") или умре ("не можев да ја отворам датотеката"); $str = "Здраво свет!"; // линија за пишување fwrite($fd, $str); // напишете ја линијата на почетокот fseek($fd, 0); // поставете го покажувачот на датотеката на почетокот fwrite($fd, "Oink"); // напишете ја линијата на почетокот fseek($fd, 0, SEEK_END); // поставете го покажувачот на крајот fwrite($fd, $str); // напишете друга линија на крајот fclose($fd);

За користење на функциите fopen, fclose, feof, fgets, fgetss и fscanf

Да ги наброиме сите можности

Една од придобивките од работењето со современи програмски јазици како PHP е бројот на достапни функции. PHP лесно може да го усвои мотото на Perl, „Има повеќе од еден начин да се направи нешто“, особено кога станува збор за обработка на датотеки. Но, со изобилството на достапни алатки, се поставува прашањето која е најдобра за завршување на работата. Се разбира, одговорот на ова прашање навистина зависи од тоа кои се вашите цели при обработката на датотеката, така што учењето на сите можности на јазикот е вредно за вашето време.

Традиционалните методи на печење

Фопен методите се можеби најпознатите за програмерите во C и C++ од минатото, бидејќи тие се повеќе или помалку алатки кои ви биле на дофат со години ако сте работеле со тие програмски јазици. За кој било од овие методи, ја следите стандардната процедура, користејќи fopen за отворање на датотеката, функција за читање на податоците и потоа fclose за затворање на датотеката, како што е прикажано во Списокот 1.

Наведување 1. Отворање и читање датотека користејќи fgets
$file_handle = fopen("myfile", "r"); додека (!feof($file_handle)) ($line = fgets($file_handle); echo $line; ) fclose($file_handle);

Иако овие функции им се познати на повеќето искусни програмери, дозволете ми да анализирам како функционираат. Во реалноста, ги следите овие чекори:

  1. Отворете ја датотеката. $file_handle складира врска до самата датотека.
  2. Проверете дали сте стигнале до крајот на датотеката.
  3. Продолжете со читање на датотеката додека не стигнете до крајот, печатејќи го секој ред што ќе го прочитате.
  4. Затворете ја датотеката.

Имајќи го тоа на ум, ќе ја разгледам секоја функција на датотека што се користи овде.

fopen функција

Функцијата fopen воспоставува врска со датотека. Велам „воспоставува врска“ затоа што, освен што отвора датотека, fopen може да отвори и URL:

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

Оваа линија на програма создава врска до горната страница и ви овозможува да започнете да ја читате како локална датотека.

Забелешка:Опцијата „r“ што се користи во fopen покажува дека датотеката е отворена само за читање. Бидејќи пишувањето во датотека не е вклучено во опсегот на прашањата што се дискутирани во овој напис, нема да ги наведам сите можни вредности на параметарот. Сепак, треба да го промените „r“ во „rb“ ако читате од бинарни датотеки за компатибилност со повеќе платформи. Подолу е пример за овој тип.

feof функција

Командата feof одредува дали читањето стигнало до крајот на датотеката и враќа True или False. Јамката прикажана во продолжува до крајот на датотеката „myfile“. Имајте предвид дека feof враќа и False ако читате URL и времето на врската истекува бидејќи нема повеќе податоци за читање.

Функција fclose

Да ја прескокнеме средината на листата 1 и да одиме до крај; fclose го прави спротивното од fopen: ја затвора врската со датотеката или URL-то. Откако ќе ја извршите оваа функција, повеќе нема да можете да читате од датотеката или приклучокот.

Fgets функција

Враќајќи се наназад неколку линии во Списокот 1, доаѓате до срцето на процесот на обработка на датотеки: всушност читање на датотеката. Функцијата fgets е ваше изборно оружје за првиот пример. Зема линија на податоци од датотека и ја враќа како низа. Оттаму можете да ги прикажете податоците или на друг начин да ги обработувате. Примерот во Списокот 1 ја печати целата датотека.

Ако одлучите да ја ограничите големината на податочниот дел со кој работите, можете да додадете аргумент fgets за да ја ограничите максималната должина на низата со податоци што е зафатена. На пример, користете го следниов код за да ја ограничите должината на линијата на 80 знаци:

$string = fgets($file_handle, 81);

Размислете за „\0“, индикаторот за крај на линијата во C, и поставете ја должината на еден знак подолга отколку што навистина ви треба. Како што можете да видите, примерот погоре користи 81, додека ви требаат 80 знаци. Направете навика да додавате дополнителен знак секогаш кога треба да поставите ограничување на должината на линијата за дадена функција.

fread функција

Функцијата fgets е само една од многуте функции достапни за читање датотека. Ова е една од најчесто користените функции, бидејќи обработката на датотека линија по линија во повеќето случаи има најголема смисла. Всушност, неколку други карактеристики нудат слични способности. Како и да е, анализата линија по линија не е секогаш она што ви треба.

И тука имаме пристап до fread. Функцијата fread има малку поинаква намена од fgets: таа е наменета да чита од бинарни датотеки (односно, датотеки што првично не се состојат од текст што може да се чита од човек). Бидејќи концептот на „линии“ не е релевантен за бинарни датотеки (логичките структури на податоци обично не се поделени во линии), мора да го наведете бројот на бајти што треба да се читаат.

$fh = fopen ("myfile", "rb"); $data = fread($file_handle, 4096);

Примерот погоре чита 4096 бајти (4 KB) податоци. Забележете дека, без оглед на вредноста што ја одредувате, fread ќе прочита максимум 8192 бајти (8 KB).

Под претпоставка дека датотеката не е поголема од 8 KB, фрагментот од програмата подолу треба да ја прочита целата датотека во една линија.

$fh = fopen ("myfile", "rb"); $data = fread($fh, големина на датотека ("myfile")); fclose ($fh);

Ако големината на датотеката е поголема, ќе мора да користите јамка за да го прочитате остатокот од неа.

Функција fscanf

За да се вратиме на обработката на низи, fscanf е исто така наследник на традиционалната функција за библиотека на датотеки C. Ако не сте запознаени со неа, fscanf ги чита полињата со податоци во променливи од датотека.

листа ($field1, $field2, $field3) = fscanf($fh, „%s %s %s“);

Низите за формат што се користат во оваа функција се опишани во многу извори како што е PHP.net, па затоа нема да ги повторувам овие информации овде. Доволно е да се каже дека форматирањето на низата е многу флексибилно. Исто така, треба да се спомене дека сите полиња се сместени во променливата што ја враќа функцијата. (Во C, овие ќе бидат пренесени како аргументи.)

fgetss функција

Функцијата fgetss се разликува од традиционалните функции за манипулација со датотеки и ви дава подобро разбирање на можностите на PHP. Работи како fgets, но ги отфрла сите HTML или PHP ознаки што ги детектира, оставајќи го само голиот текст. Да ја земеме HTML-датотеката подолу.

Список 2. Пример HTML-датотека
Мојот наслов

Ако разбирате што значи „Cause there ain't no one for to give you no pain“, тогаш премногу слушате од бендот America



Ајде да го поминеме низ функцијата fgetss.

Листа 3. Користење fgetss
$file_handle = fopen("myfile", "r"); додека (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Ова е она што ќе го добиете како излез:

Мојот наслов Ако разбираш што значи „Cause there ain't no one for to give you no pain“, тогаш премногу слушаш од бендот America

fpassthru функција

Без оглед на тоа како читате податоци од датотека, можете да ги испечатите преостанатите податоци користејќи го стандардниот излезен канал користејќи ја функцијата fpassthru.

fpassthru ($fh);

Оваа функција ги печати податоците за да не мора да ги ставате во променлива.

Нелинеарна обработка на датотеки: движење низ датотека

Се разбира, функциите опишани погоре ви дозволуваат само последователно да читате од датотека. Покомплексните датотеки може да бараат преместување во различни делови од датотеката на почетокот или на крајот на датотеката. За да го направите ова, потребна ви е функцијата fseek.

fseek ($fh, 0);

Примерот погоре се враќа на почетокот на датотеката. Ако не сакате да се префрлите на самиот почеток на датотеката - да речеме, доволно е еден килобајт - едноставно напишете:

fseek ($fh, 1024);

Од PHP V4.0, достапни се и неколку други опции. На пример, ако треба да се движите напред 100 бајти од вашата моментална позиција, можете да го користите следниов код:

fseek($fh, 100, SEEK_CUR);

Исто така, поместувањето 100 бајти наназад се прави со:

fseek($fh, -100, SEEK_CUR);

Ако сакате да се вратите на позицијата од 100 бајти пред крајот на датотеката, наместо тоа, користете SEEK_END.

fseek($fh, -100, SEEK_END);

Откако ќе се достигне новата позиција, можете да користите fgets, fscanf или друга функција за читање на податоците.

Забелешка:не можете да користите fseek на дескриптори на датотеки што упатуваат на URL.

Снимајте цела датотека

Сега продолжуваме да погледнеме во некои од уникатните способности за обработка на датотеки на PHP: обработка на големи блокови на податоци во една или две линии. На пример, како можете да земете датотека и да ја прикажете целата нејзина содржина на вашата веб-страница? Па, видовте пример за користење на јамка со fgets. Но, како можете да го олесните? Процесот е речиси смешно лесен со користење на fgetcontents, што ја става целата датотека на линија.

$my_file = file_get_contents ("myfilename"); ехо $my_file;

Иако ова не е најдобрата опција, можете да ја напишете оваа команда уште пократко:

echo file_get_contents ("myfilename");

Оваа статија првенствено се фокусира на обработка на локални датотеки, но вреди да се напомене дека исто така можете да снимате, прикажувате и анализирате други веб-страници користејќи ги опишаните функции.

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

Оваа команда е всушност иста како:

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

Можеби ги гледате овие примери и размислувате: „Тоа е многу работа“. Програмерите на PHP се согласуваат со вас. Така, можете да ја скратите горната команда на:

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

Функцијата за читање датотека ја прикажува целата содржина на датотека или веб-страница во стандардниот излезен бафер. Стандардно, оваа команда прикажува порака за грешка кога не успее. За да го избегнете ова однесување (ако го сакате), обидете се со командата:

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

Се разбира, ако треба да ја обработувате содржината на датотеките, тогаш единствената линија вратена од file_get_contents е веројатно премногу. Можеби ќе сакате прво да го поделите на парчиња користејќи ја функцијата split().

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

Но, зошто ви е потребна сета оваа сложеност ако постои совршено соодветна функција што ќе ја заврши работата за вас? Функцијата PHP file() ја исполнува оваа задача во еден чекор: враќа низа низа чии елементи се линиите на датотеката.

$array = датотека ("myfile");

Треба да се забележи дека постои мала разлика помеѓу двата примери погоре. Командата split ги отстранува новите линии, додека командата за датотека ги завршува линиите на низата со нови линии (како и fgets).

Сепак, можностите на PHP се многу подалеку од оние опишани погоре. Можете да анализирате цели .ini датотеки во PHP стил со само една команда parse_ini_file. Командата parse_ini_file се применува на датотеки слични на оние прикажани во Списокот 4.

Листа 4. Пример датотека .ini
; Име на коментар = потрага по „Крал Артур“ = Да се ​​бара омилената боја на светиот грал = Син Семјуел Клеменс = Марк Твен Керин Џонсон = Вупи Голдберг

Следниве команди претставуваат датотека како низа и потоа ја печатат низата:

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

Резултатот ќе биде следниот излез:

Листа 5. Излез
Низа ( => Кралот Артур => Да се ​​бара Светиот Грал => Сина => Марк Твен => Вупи Голдберг)

Се разбира, може да забележите дека оваа команда ги споила деловите. Ова е стандардното дејство, но можете лесно да го приспособите со користење на вториот аргумент на parse_ini_file: process_sections, кој е Булова променлива. Поставете process_sections на True.

$file_array = parse_ini_file ("holy_grail.ini", точно); print_r $file_array;

И вашиот излез ќе изгледа вака:

Листа 6. Излез
Низа ( => Низа ( => Кралот Артур => Да се ​​бара Светиот Грал => Сина) => Низа ( => Марк Твен => Вупи Голдберг))

PHP ги става податоците во повеќедимензионална низа која лесно може да се анализира.

Но, ова е само врвот на ледениот брег кога станува збор за обработка на датотеки во PHP. Покомплексните функции како tidy_parse_file и xml_parse можат да ви помогнат да ги анализирате HTML и XML документите, соодветно. Погледнете го делот за подетални информации за тоа како функционираат овие функции. И двете од овие вреди да се разгледаат дали ќе работите со овие типови датотеки, но наместо да ги прегледате сите можни типови датотеки, можеби ќе сакате подетално да ја разгледате содржината на овој напис, кој има некои добри општи правила за работа со функциите што ги опишав досега.

Добар стил на програмирање

Никогаш не претпоставувајте дека сè во вашата програма ќе работи како што е планирано. На пример: што ако датотеката што ја барате е преместена? Што ако промената на дозволата предизвика да не можете да ја читате содржината на датотеката? Можете да го проверите постоењето на датотека и правата за нејзино читање однапред користејќи ги методите file_exists и is_readable.

Листа 7. Користење на file_exists и е_читлив
$filename = "моја датотека"; ако (датотеката_постои ($име на датотека) && е_читлива ($filename)) ($fh = fopen($filename, "r"); # Се обработува fclose($fh); )

Меѓутоа, во пракса, ова парче програма веројатно ќе биде претерано за вашата задача. Ракувањето со вредностите вратени од fopen е поедноставно и попрецизно.

if ($fh = fopen($име на датотека, „r“)) ( # Се обработува fclose($fh); )

Бидејќи fopen враќа False ако не успее, ова ќе осигури дека датотеката ќе се обработи само ако датотеката може да се отвори. Се разбира, ако датотеката не постои или е нечитлива, би очекувале повратната вредност да биде негативна. Затоа, ваквата проверка е замка во која паѓаат сите потенцијални проблеми. Алтернативно, можете да излезете од програмата или да прикажете порака за грешка ако датотеката не може да се отвори.

Како fopen, функциите file_get_contents, file и readfile враќаат False доколку датотеката не може да се отвори или обработи. Функциите fgets, fgetss, fread, fscanf и fclose исто така враќаат False доколку се појави грешка. Се разбира, со исклучок на fclose, веројатно веќе сте ги обработиле резултатите што ги враќаат. Што се однесува до fclose, нема многу што може да се направи ако рачката на датотеката не се затвора правилно, така што проверката на повратната вредност на fclose е генерално претерано.

Изборот е твој

PHP нема недостиг од ефикасни начини за читање и анализирање датотеки. Класичните функции како fread може да ви служат со сигурност поголемиот дел од времето или можеби ќе ве привлече повеќе од едноставноста на readfile ако тоа е она што ви треба за да ја завршите работата. Изборот навистина зависи од тоа што се обидувате да постигнете.

Ако обработувате големи количини на податоци, најверојатно ќе најдете fscanf покорисен и поефикасен отколку, да речеме, да користите датотека во комбинација со последователните команди за поделба и sprintf. Меѓутоа, ако едноставно прикажувате голема количина текст со мали промени, користењето на функциите на датотеката , file_get_contents или readfile може да има повеќе смисла. Ова решение веројатно ќе биде точно кога користите PHP за кеширање или дури и создавање привремен прокси-сервер.

PHP обезбедува многу алатки за работа со датотеки. Запознајте се со секој од нив подобро и дознајте кои алатки се најдобри за проектот на кој работите. Ви се нуди широк избор на софтверски алатки, користете ги најефективно и забавувајте се со обработката на вашите датотеки користејќи PHP.

PHP се појави многу подоцна отколку што програмските јазици ги зајакнаа своите позиции и формулираа општи идеи за синтаксата, логиката, променливите и другите програмски објекти. Датотеките и функциите за работа со нив не постигнаа напредок, па дури и проблемот со кодирање на датотеки, што се појави од природни причини, не доведе до радикално нови решенија.

Општи забелешки

Главната работа со датотеките, какви и да се тие, се состои од отворање, читање/пишување и затворање. Можете да ги користите функциите за блокирање/одблокирање на пристапот до датотека додека се обработува, можете да ја поставите позицијата за читање/запишување во датотеката - сè е исто како порано, во далечното минато.

Важна точка во PHP е изобилството на функции за работа со датотеки и опции за нивно користење. Во пракса, доволно е да се користат едноставни, но работни опции. Датотеката е, пред сè, програмска меморија. Можете да складирате информации во него. Целта на секоја програма, целта на која било веб-локација е да ги презентира, обработува и гарантира безбедноста на информациите.

Суштинска околност

Претходно, барањето за компатибилност, барем од дното кон врвот, беше непоколебливо. Односно, програма еднаш напишана во една верзија на програмски јазик е идеално компајлирана/интерпретирана во следната верзија. Во современото програмирање тоа не е случај. Барањето за компатибилност на синтаксичките структури на еден јазик стана историја, а борбата помеѓу стиловите и програмските алатки и верзии на одредени алатки стана норма на нивниот живот.

Работата со датотеки, како и со бази на податоци, е исто толку важна како и интерфејсот на страницата. Првиот треба да биде изграден на таков начин што при промена на платформата, хостинг или јазична верзија, нема потреба да се менува кодот на страницата. Интерфејсот за работа со датотеки мора да биде вклучен во посебна скрипта и да обезбеди целосна компатибилност, исто како што дизајнот на страницата мора соодветно да се прилагоди на кој било уред, прелистувач и да ја обезбеди останатата функционалност на страницата со истите можности.

Прочитајте и променете се

Може ли некоја програма да се промени сама по себе, односно дали скрипта може да се подобри? До денес, ова прашање интересира многумина. Но, задачата звучи многу попрактична: PHP читање PHP-датотека. Развивачот не може секогаш да реши одреден проблем со пишување специфичен код. Понекогаш е неопходно да се промени кога посетителот доаѓа на страницата и формулира прашање што не било предвидено во фазата на развој.

Како и во сите други случаи, прво треба да ја отворите датотеката. Не е важно дали оваа датотека постои или не. Ако се знае дека датотеката постои (функцијата file_exists() дава позитивен одговор), функцијата fopen() се користи со пристап 'r', 'r+', 'a', 'a+'. Ако датотеката сè уште не постои, тогаш со пристап „a“, „a+“, „w“, „w+“. Резултатот од отворањето на датотеката ќе биде неговиот дескриптор. Датотеката е затворена со функцијата fclose().

Удобно е да се користи PHP за читање датотека во низа кога нема потреба да се обработува во моментот на читање.

ако (датотеката_постои ($fName)) (

$aLines = датотека ($fName)

Во оваа опција, секоја линија од датотеката секвенцијално оди во елементот на низата. Треба да се забележи дека функциите file() или file_get_contents() не треба да ја отвораат датотеката и да ја затворат.

Кога влезната датотека е преголема и треба да најдете само малку информации или поради други причини, можете да користите PHP за да ја читате датотеката линија по линија. PHP обезбедува можност да се направи ова со функциите fgets() и fgetc().

$fvs = fopen ($fName, „r“)

додека ((неточно !== ($cLine = fgets($fvs, 2000)))) (

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

И двете опции функционираат беспрекорно. Меѓутоа, кога се врши PHP читање на PHP-датотека за подоцнежна модификација, треба да се преземат мерки на претпазливост. Не е секогаш можно да се предвиди како посетителот ќе го користи во фазата на развој на локацијата. Подобро е ако скриптите се менуваат во рамките на функциите на страницата, а контролата на оваа промена не е достапна за посетителот, вклучително и администраторот на ресурсите.

Зачувување резултати

Примените и ажурираните информации се запишуваат во датотеката со функцијата fputs() линија по линија или од функцијата file_put_contents() како целина.

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

$fvs = fopen ($fName, „a“)

стадо ($fvs, LOCK_EX)

$cLine = „1 ред“. chr (10)

fputs ($fvs, $cLine)

$cLine = "2 реда" . chr (10)

fputs ($fvs, $cLine)

стадо ($fvs, LOCK_UN)

Во опцијата за снимање линија по линија, можете да манипулирате со податоци за време на процесот на снимање; во вториот случај, напишаната низа или низа се ставаат во целата датотека.

$file = " scData.php "

$cContents = file_get_contents ($датотека)

// додавање запис

$cContents .= "нов запис\n"

// напишете ја датотеката назад

file_put_contents ($датотека, $cContents)

Читањето и пишувањето PHP-датотеки е лесно и природно. Сепак, важно е да се има предвид: секоја датотека има име, наставка и патека (папка). За да може скриптата PHP да чита и пишува датотеки, оваа скрипта мора да ги има соодветните права. Тие се автоматски изложени на хостингот, но во некои случаи треба да се прошират.

Во некои случаи, може да биде пожелно да се проверат резултатите со извршување на тест читање. Пишувањето PHP-датотеки го бара ова за време на развојот, но во некои случаи, во интерес на безбедноста или доверливоста на локацијата, проверката на снимањето на податоците е од суштинско значење.

Карактеристична карактеристика на PHP, MySQl, JavaScript и особено прелистувачите: тивко дозволување на некои грешки да се случат. „Не е препознаено, не е направено...“ не е многу добра практика во најсовремената информатичка технологија, но ги учи програмерите да не прават грешки и да пишуваат чист, висококвалитетен код, што исто така не е лошо.

PHP и работа со вистински документи

PHP читањето PHP-датотека е секако од практичен интерес, но ова е доменот на програмирањето. Корисникот и посетителот на страницата се заинтересирани за информации од применета природа, кои тој е навикнат да ги гледа во форма на табели и документи, особено во формати на датотеки *.xlsx и *.docx. Станува збор за датотеки во формат MS Excel и MS Word.

Списоците на стоки, цени, карактеристики обично се формираат во форма на табели, така што PHP читањето на датотеката Excel е од суштинско значење.

Библиотеките PHPExcel и PHPWord се развиени за работа со такви датотеки. Сепак, содржината на датотеките *.xlsx и *.docx се претставени во стандардот OOXML, односно вистинскиот, разбирлив документ е претставен во зип архива. Zip архива е збир на датотеки, вклучувајќи слики, објекти, формули и инсерти од други програми. Текстуалните датотеки овде се претставени со описи во форма на ознаки. Читањето на таква датотека не е доволно; треба да ја анализирате за да ја добиете содржината и структурата за употреба и измена.

Ова значи дека операцијата за читање се претвора во постапка за отворање архива. Овие библиотеки самостојно ја отвораат архивата на документи и му обезбедуваат на развивачот широки функции за читање, обработка и пишување такви документи.

Табели на Excel

include_once 'PhpOffice/PhpExcel/IOFactory.php'

функција scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//оваа низа содржи низи од низи

$aSheet = $objPHPExcel->getActiveSheet()

$ низа = низа ()

//третман

foreach($aSheet->getRowIterator() како $ред)(

$cellIterator = $row->getCellIterator()

foreach ($cellIterator како $cell)(

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

array_push ($ низа, $item)

Читањето и обработката на датотеките на Excel е многу потешко отколку обработката на документите на Word. Најдобрата опција, доколку треба да спроведете сериозен проект за читање и обработка на применетите информации, е прво да ја совладате библиотеката PHPWord. Ова ќе ви даде добро искуство и брзо разбирање на спецификите на проблемот.

Word документи

Само два реда:

$oWord = ново \PhpOffice\PhpWord\PhpWord()

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

Документот $cFileName сега е достапен за обработка. Следно, архивата се отвора, нејзината содржина се избира и анализира, која може да се прикаже на веб-страницата, да се смени и да се запише назад.

$zipClass = нова ZipArchive()

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

// прочитајте ја целата содржина на документот

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

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

$cNameInExt = substr($cNameIn, -4)

ако (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// датотеките со екстензии „.xml“ и „.xml.rels“ се зачувани во табелата со документи

// секоја xml линија е напишана со единствен број по редослед

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

$cBodyInLen = strlen($cBodyIn)

// сите други датотеки се запишани во папката со документи како што е

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

$zipClass->getFromName($cNameIn, $cWorkPath); // содржина како датотека

Можностите што ги нудат PHP Excel и PHP Word ви дозволуваат да манипулирате со вистински документи и да ја направите нивната содржина релевантна во секое време. Во денешниот динамичен свет, ова станува многу важно. Центарот на гравитација одамна се пресели од локалната употреба на компјутерска технологија во виртуелниот интернет простор. Затоа, креирањето табели и документи во локалните производи на Microsoft е помалку ефикасно од работењето со такви документи во автоматски и полуавтоматски режим на веб-локација, до која е достапна не само создавачот на табелата или документот, туку и на неговите потрошувачи.

Текстуални датотеки, друг живот

За прво приближување, текстуалните датотеки се поедноставни од PHP-датотеките или документите за апликација. Сепак, тука има за што да се размислува. Операциите за читање/запишување на таквите датотеки се веќе наведени погоре, но значењето на таквите датотеки е многу поважно.

Бидејќи постои таков како клиент и сервер (во првиот доминира JavaScript, во вториот од PHP), тогаш дури и механизмите за колачиња и сесии не можат да се справат со потребата за пренос на информации помеѓу скрипти, страници или одредени процеси.

Можно е да се одразат саканите промени во базата на податоци, но и покрај сите нивни предности и брзина, малите привремени или постојани текстуални датотеки можат да бидат многу поинтересна опција за пренос на информации. Ако не креирате многу мали датотеки и не ја контролирате нивната големина, тие можат да бидат специфична и пофлексибилна верзија на базата на податоци.

PHP читањето текстуална датотека е брзо, може веднаш да се анализира во структура, низа или објект. Последново е многу важно, бидејќи ви овозможува да креирате објекти кои живеат надвор од времето доделено на PHP скрипта, што, како што знаете, може да постои само на серверот и само во моментот кога страницата е вчитана, AJAX одговорот е генериран или поради друга причина што предизвикува PHP преведувач да се стартува.

Ако размислувате за фактот дека текстуалната датотека е содржината и структурата од развивачот, PHP-датотеката е синтаксата на толкувачот плус логиката на развивачот, а „означените“ описи html, css, xml се повеќе семантички елементи, но регулирани според статички стандарди. Може да се дојде до заклучок дека веројатно е време датотеките да добијат нова содржина, а тоа самото треба да го одреди нивниот квалитет и логиката на користење. Токму затоа што програмирањето сè уште не е подготвено за следната фаза од неговиот развој, датотеките денес остануваат само датотеки што развивачот ги создава и ја одредува нивната употреба.

Најинтересно и најперспективно е кога PHP самостојно чита PHP-датотека кога ќе се појави потреба. И едноставното PHP читање линија од датотека резултира со создавање на објект, барем во состојбата во која е зачуван. Ова не се сосема познати идеи, но во современиот свет сè се менува толку брзо.

16,5 илјади

Всушност, како да се отвори датотека php не е голем проблем. Може да биде потешко да отворите шише пиво кога сте среде шума. Но, само страствените програмери размислуваат на овој начин. И за почетници, ќе ви кажеме за сите можности на PHP за работа со датотеки:

php датотеки

Датотеките со наставката php содржат код напишан на истоимениот програмски јазик. За разлика од другите јазици, php е програмски јазик од страна на серверот. Тоа е, работи на страната на серверот. Затоа, за да се дебагира неговиот код, мора да се инсталира локален сервер на машината на клиентот.

За работа со php-датотеки, се користат специјални апликации - софтверски уредници. Најчести се:

  • Dreamweaver.
  • PHPE уреди.
  • Развој на Eclipse PHP.
Кога креирате веб-локации базирани на PHP, можеби ќе треба повторно да го користите програмскиот код. Во такви ситуации, погодно е да се поврзат готови решенија лоцирани во друга датотека. Конструкцијата вклучува се користи за ова. Неговата синтакса е:

вклучи име на датотека

Пример за поврзување:

Вклучена датотека:


Вклучувањето датотека е исто така можно со користење на конструкцијата бара. За разлика од вклучувањето, таа ја вклучува датотеката пред да се изврши програмскиот код. Со користење на бара во кодот, можен е само еден повик до оваа датотека. Кога ќе се пристапи повторно, системот ќе прикаже глобална порака за грешка и ќе го запре извршувањето на програмата.

Конструкцијата вклучува го вклучува само изворот за време на извршувањето на програмата. Поддржува повеќекратно читање на php датотека. Ако се појави грешка, ќе се прикаже само предупредувачка порака, а извршувањето на кодот ќе продолжи од следната линија.

Отворање и затворање датотеки

Во php, сите операции со датотеки се изведуваат во неколку фази:

  • Отворање датотека;
  • Уредување на содржина;
  • Затворање на датотеката.

Функцијата fopen() се користи за отворање на датотека. Неговата синтакса е:

int fopen (име на датотека на низа, режим на стринг [, int use_include_path])

Прифатени аргументи:

  • стринг име на датотека – име на датотека или апсолутна патека до неа. Ако патеката до датотеката не е одредена, таа ќе се пребарува во тековниот директориум. Ако датотеката што ја барате недостасува, системот ќе прикаже порака за грешка. Пример:

  • стринг режим – го означува режимот на отворање на датотеката. Вредности прифатени со аргументот:
  • r – датотеката се отвора само за читање, покажувачот на датотеката е поставен на почетокот;
  • r+ – датотеката е отворена за читање и пишување;
  • w – создава нова датотека само за пишување. Ако датотека со исто име веќе постои, сите податоци во неа автоматски се бришат;
  • w+ - создава нова датотека за пишување и читање. Кога постои таква датотека, нејзините податоци целосно се препишуваат со нови;
  • a – датотеката е отворена за пишување. Покажувачот е поставен на крајот. Тоа е, пишувањето во датотеката php ќе започне не од почеток, туку од крајот;
  • a+ – отворете датотека во режим за читање-пишување. Снимањето ќе започне од крајот;
  • б – начин на работа со датотека која содржи бинарни податоци (во бинарниот броен систем). Овој режим е достапен само на оперативниот систем Windows.

За да го затворите пристапот до датотека, користете ја функцијата fclose(). Синтакса:

int fclose (int-датотека) , каде што int-датотеката е рачка до страницата за затворање.

По секое читање или пишување, датотеката мора да се затвори со оваа функција. Во спротивно, потокот создаден за датотеката останува отворен. И ова води до непотребно трошење на капацитетот на серверот.

Пример:

Читање и пишување датотеки

За едноставно прикажување на целата содржина на датотеката, функцијата readfile() е идеална. Неговата синтакса е:

readfile (име на датотека со низа) , каде што името на датотеката со низа е името на датотеката со низа (не е рачка).


Истата датотека може да се чита со помош на функцијата fpassthru(). Ги чита податоците од крајната позиција на покажувачот до крајот на датотеката. Неговата синтакса е:

int fpassthru (int датотека)

Функцијата бара отворање и затворање датотека. Пример:

Резултатот е сличен на претходниот.

Функциите за работа со датотеки во php ви овозможуваат да читате содржина линија по линија и знак по знак:

  • стринг fgets (int-датотека, int должина)– функцијата чита низа со должина. Пример:

  • стринг fread (int-датотека, int должина)– дејството е идентично со претходното.

За да напишете текстуални податоци во датотека, постојат две идентични функции:

  • int fputs (int-датотека, стринг низа [, int должина ])
  • int fwrite (int-датотека, низа од низа [, int должина])

Функциите пишуваат во датотека int датотека низа низа со одредена должина int должина ( опционален аргумент). Пример:

Креирање и бришење датотеки

За да креирате датотека php, можете да ја користите функцијата fopen() во режим на пристап „w“ или „w+“. Или функцијата touch(). Го поставува времето за промена на датотеката. Ако нема елемент со пребараното име, тој ќе се креира. Нејзината синтакса.




Врв