Ваш первый Сайт С использованием РНР-скриптов

ФУНКЦИИ РНР ДЛЯ РАБОТЫ С ФАЙЛАМИ

Данные счетчика мы будем хранить в текстовых файлах. Почти любая операция с файлами - создание нового файла, чтение или запись в сущест­вующий файл предваряется операцией открытия файла. Открытие файла на сервере осуществляется при помощи функции fopen($filename, mode). В качестве первого аргумента функции выступает имя файла, а точнее, путь к нему. Второй аргумент mode задает режим работы с открываемым файлом и принимает следующие значения:

Г - открыть файл только для чтения и приготовиться читать его с начала;

Г+ - открыть файл для чтения и для записи и приготовиться работать с ним с его начала;

W - открыть файл только для записи, предварительно удалив из него все со­держимое, причем если файл с указанным именем не существует, то создает­ся новый файл с таким именем;

W+ - открыть файл как для записи, так и для возможного последующего чте­ния, предварительно удалив из него все содержимое, причем если файл с ука­занным именем не существует, то создается новый файл с таким именем;

А - открыть файл только для записи и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается но­вый файл с таким именем;

А+ - открыть файл для записи и для чтения и приготовиться дописывать дан­ные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем.

Для чтения содержимого из файла применяется функция fread($descr, length). Первый аргумент - дескриптор открываемого файла (то, что возвра­щает функция fopen), второй - количество считываемых байтов. Если мы хо­тим считать содержимое всего файла, то вместо аргумента length прибегают к функции filesize($f!lename) - возвращает число байтов, содержащихся в файле. Переменная Sfilename означает название файла или путь к нему. В итоге функция fread вместе с аргументами будет выглядеть так: Fread(Sdescr, filesize($filename))

Запись в открытый файл осуществляется функцией fwrite($descr, "вы­ражение"). Здесь аргумент Sdescr тоже означает дескриптор файла, который возвращается функцией fopen, т. е. $descr=fopen($filename, mode). Именно дескриптор, а не путь к файлу используется в функциях fread и fwritel Второй аргумент функции fwrite представляет собой выражение (число, текст и т. п.), которое мы и записываем в открытый файл.

После окончания работы с файлом, его следует закрыть с помощью функции: fclose($descr). Единственный аргумент этой функции - дескриптор ранее открытого файла.

Удалить какой-либо файл можно при помощи функции unlink("filename"), Где filename - название или путь к файлу (не дескриптор!), который нужно удалить.

Закрепим теоретические знания небольшим примером. Создайте в папке Hdocs, где находятся наши файлы, простой текстовый файл. Пусть он будет называться zapisi.txt. Откройте его и запишите две строчки: Первая запись Вторая запись

Сохраните и закройте этот файл.

Создайте новый PHP-файл в PHP-редакторе и сохраните его в папке htdocs под любым названием с расширением php. Запишите в него следую­щие строки (листинг 4.4):

Листинг 4.4 <?Php

$zapisi="zapisi. txt"; $p=fopen($zapisi, "г");

$n=fread($p, filesize($zapisi));

Fclose(Sp);

Echo $n;

$myfile=" myfile. txt"; $m=fopen($myfile, "w+"); fwrite($m, "Моя запись в файл");

Fclose($m);

?>

Данная программа состоит как бы из двух программ. В первой части про­граммы мы считываем содержимое файла и выводим его в окно браузера. Во второй части мы создаем новый файл и делаем там запись. Я их объеди­нил в 1 листинг, чтобы не писать 2.

Итак, в первой части программы мы присваиваем переменной Szapisi Путь к нашему текстовому файлу, который мы создали. Поскольку этот файл находится в нашем рабочем каталоге, то в качестве пути к нему достаточно указать просто имя файла с расширением. Потом мы открываем этот файл, но только для чтения, поскольку вторым аргументом функиии fopen мы указали параметр г. Функция возвращает дескриптор файла $р, который и использу­ется в дальнейшем. Затем, с помощью функции fread мы считываем содер­жимое открытого файла и заносим это содержимое в переменную $п. Функ­ция filesize, как уже говорилось, возвращает количество байтов в файле. Об­ратите внимание, что аргументом этой функции является путь к файлу (оно у нас в переменной Szapisi), а не его дескриптор. Далее функцией fclose за­крываем файл (точнее, его дескриптор). Потом в окно браузера мы выводим содержимое переменной $п, в которую мы записали содержимое файла, счи­танного при помощи функции fread.

Во второй части кода переменной Smyfile мы присваиваем путь к файлу Myfile.txt. Этот файл мы еще не создали. Функцией fopen. со вторым аргумен­том «и'+» создается новый пустой файл для записи. Эта функция возвращает дескриптор созданного файла $т. Далее функция fwrite записывает в пустой файл то, что стоит в качестве второго аргумента этой функции, а именно «Моя запись в файл». Последняя строчка закрывает созданный файл. •

Сохраните код и запустите браузер. В окно браузера выведется содержи­мое файла zapisi.txt, который мы создали вручную.

Теперь зайдите в рабочий каталог. Вы увидите там новый файл myfile.txt, Который и создала написанная вами программа. Открыв этот файл, вы увиди­те там записанную строчку «Моя запись в файл».

Запись программно (при помощи функции fwrite) что-либо в файл несет в себе одну неприятность. Рассмотрим, например, работу счетчика посеще­ний вашего сайта (более подробно он будет рассмотрен ниже). При посеще­нии посетителем страницы со счетчиком программа открывает текстовый файл с числом посещений при помощи функции fopen, затем делает новую запись, т. е. записывает число, увеличенное на единицу. Затем при помощи функции fclose закрываем файл. Все пройдет нормально, если запись в файл происходит как бы единолично, т. е. зашел один посетитель на страницу, прснрамма для записи в файл успешно сработала. Затем зашел другой посе­титель, программа записи опять сработала. Но допустим, что на страницу од­новременно зашло несколько посетителей. Программа не может выполняться несколько раз одновременно. Только после того как программа «обслужит» одного посетителя, она сможет корректно «обслужить» другого! При одно­временном использовании программы для записи в файл несколькими посе­тителями могут возникнуть конфликтные ситуации, которые приведут к на­рушению или полному разрушению информации в файле для записи. Разум­но предположить, что пока программа работает для одного посетителя (даже если на эго уходят микросекунды), допуск к ней других посетителей следует заблокировать. Для блокировки файла имеется специальная функция flockQ. Она блокирует файл и ье позволяет посетителям читать или записывать в не­го до rex пор. пока блокировка не будет снята. Функция блокировки имеет 3 аргумента, но мы рассмотрим только два из них, которые нам понадобятся: Flock($deckript, type). Первый аргумент представляет собой дескриптор бло­кируемого файла, который возвращает функция fopen. Второй аргумент type Указывает на тип операции с файлом и нам понадобится 2 значения этого ар­гумента:

LOCK EX - блокировка файла;

LOCK UN - снятие блокировки, чтобы другие посетители могли получить доступ к файлу.

Функция flock вызывается сразу после открытия файла и перед закрыти­ем файла для снятия с него блокировки. Перепишем листинг 4.4 следующим образом:

Листинг 4.4а (с использованием блокировки файла) <?Php

$zapisi="zapisi. txt"; $p=fopen($zapisi, "г"); flock($p, LOCKEX); $n=fread($p, filesize($zapisi)); flock($p, LOCK_UN); f'close($p); echo $n;

$myfile=" myflle. txt"; $m=fopen($myfile, "w+"); flock($p, LOCK EX);

Fwrite($m, "Моя запись в файл"); flock($p, LOCKUN);

Fclose($m);

?>

Здесь мы применяем блокировку в двух случаях: при чтении файла и при записи в него. При открытии файла, когда посетитель посещает страницу с этим кодом и запускает его, файл открывается и блокируется от доступа к нему других посетителей. После чтения из файла или записи в него блоки­ровка снимается и файл опять готов для чтения и записи другими посетите­лями. Это прием мы будем использовать для создания счетчика посещения страниц. Там я применял блокировку при записи в файл (файлы) новых дан­ных о посещении страницы.

Для создания счетчика нам понадобится еще несколько функций для ра­боты с файлами.

Функция file(filename) считывает файл и возвращает массив, каждый элемент которого обозначает строку в прочитанном файле.

Функция fileexistsf'flle") проверяет, существует ли файл, что указан в круглых скобках или нет {File - путь к этому файлу). Если файл существует, функция возвращает True. В противном случае - False.

Функция foreach (массив as Переменная) {программный код;} при­сваивает переменный элемент массива и выполняет программный код. Этот цикл повторяется до тех пор. пока не закончатся все элементы массива.

Функция соип1(массив) возвращает число элементов в массиве.

Функция in_array($znach, $mass) ищет значение Sznach в массиве Smass И возвращает True, если это значение найдено, в противном случае возвраща­ет False.

Для примера создайте в рабочем каталоге новый текстовый файл, напри­мер Massiv.Txt. Запишите туда 5 строк: Первый элемент второй элемент третий элемент четвертый элемент пятый элемент

Сохраните и закройте файл. Наберите в PHP-редакторе следующий код (листинг 4.5):

Листинг 4.5 <?php

$massiv=" massiv. txt"; $q=file($massiv); for^ach($q as $stroka)

{

Echo "$stroka<br>";

$r[]=$stroka;

}

Echo count($r);

?>

Итак, функция file возвращает массив строк файла massiv.txt. Массив со­храняется в переменной Sq. Далее функция foreach присваивает переменной Sstroka сначала первый элемент массива Sq. Далее выполняется код в фигур­ных скобках. А именно, мы выводим в окно браузера значение переменной Sstroka, которой был присвоен первый элемент массива (первая строка файла Massiv.txt). Затем мы значение переменной Sstroka присваиваем первому эле­менту нового массива $г. Далее цикл повторяется. Переменной Sstroka при­сваивается уже второй элемент массива Sq (первый элемент массива в пере­менной Sstroka стирается). Уже второму элементу массива присваивается новое значение переменной Sstroka. Итак, цикл будет повторяться, пока не будут перебраны всг элементы массива Sq. Потом мы выводим число строк массива Sr. Это число, как и в массиве Sq, равно пяти, именно столько строк мы написали в текстовом файле massiv.txt. Все строки у нас уже будут в массиве $г[].

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.