Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемГеннадий Тюхтин
1 Лекция 15 Функции PHP –Описание примера –Функция date –Функции работы с файлами
2 Описание примера Существуют два основных способа хранения данных: в двумерных (обычных) файлах и в базах данных. В общем случае под двумерным файлом будем понимать простой текстовый файл. В рассматриваемом ниже примере заказы клиента записываются в текстовый файл, по одному заказу в каждой строке. Этот способ столь же прост, сколь и ограничен. Если приходится иметь дело с большим объемом информации, лучше воспользоваться базами данных. Однако, двумерные файлы находят достаточно широкое применение, поэтому необходимо владеть технологией их применения.
3 Описание примера Рассмотрим работу с файлами на примере сбора заказов. Форма заказа представлена в листинге 1.листинге 1 Отображение переменных формы производит сценарий. Его текст приведен в листинге 2.листинге 2
4 Функция date Функция date() принимает два аргумента, один из которых является необязательным. Первый аргумент представляет собой строку формата, а второй, необязательный, метку времени UNIX. Если метка времени не указана, то функция date() обрабатывает текущую дату и время. Она возвращает отформатированную строку, содержащую дату. Типовой вызов функции выглядит так: echo date("jS F Y"); Вывод этого выражения имеет вид "31th July 2001". Коды форматирования, используемые функцией date(), перечислены в таблице
5 Функция date КодОписание аУтро или время после полудня, с двумя строчными символами, "am" или "pm" АУтро или время после полудня, с двумя прописными символами, "AM" или "PM". dДень месяца в виде двузначного числа с ведущим нулем. Диапазон значений от "01" до "31". DДень недели в виде трехбуквенной аббревиатуры. Диапазон значений от "Mon" (понедельник) до "Sun" (воскресенье).
6 Функция date КодОписание FМесяц в полнотекстовом формате. Диапазон значений от "January" до "December". gЧасы в 12-часовом формате без ведущих нулей. Диапазон значений от "1" до "12". GЧасы в 24-часовом формате без ведущих нулей. Диапазон значений от "0" до "23". hЧасы в 12-часовом формате с ведущими нулями. Диапазон от "01" до "12" HЧасы в 24-часовом формате с ведущими нулями. Диапазон от "00" до "23"
7 Функция date КодОписание iМинуты с ведущими нулями. Диапазон значений от "00" до "59". jДень месяца в виде числа без ведущих нулей. Диапазон значений от "1" до "31". IДень недели в полнотекстовом формате. Диапазон значений от "Monday" (понедельник) до "Sunday" (воскресенье). mМесяц в двузначном числовом формате с ведущими нулями. Диапазон значений от "01" до "12".
8 Функция date КодОписание MМесяц в виде трехбуквенной аббревиатуры. Диапазон значений от "Jan" (январь) до "Dec" (декабрь). nМесяц в виде числа без ведущих нулей. Диапазон значений от "1" до "12". sСекунды с ведущими нулями. Диапазон значений от "00" до "59". SПорядковый суффикс для дат в двухбуквенном формате ("st", "nd", "rd"). tПолное количество дней в месяце. Диапазон значений от "28" до "31".
9 Функция date КодОписание ТВременная зона сервера, заданная в трехбуквенном формате, например, "EST". wДень недели в виде числа. Диапазон значений от "0" (воскресенье) до "6" (суббота). yГод в двузначном формате, например, "00". YГод в четырехзначном формате, например, "2000". zДень года в виде числа. Диапазон значений от "0" до "365".
10 Открытие файла Для открытия файла в среде РНР используется функция fopen(). При открытии файла необходимо указать режим его использования. $fp = fopen("$DOCUMENT_ROOT/../ orders/orders.txt", "w'); fopen ожидает двух или трех входных параметров. Обычно используются два. Первым параметром должен быть файл, который необходимо открыть. При этом можно указать путь к файлу. Указанный путь называется относительным, поскольку он описывает позицию в файловой системе относительно $DOCUMENT_ROOT.
11 Открытие файла В среде UNIX в качестве разделителя каталогов используется символ прямой слэш (/). На платформах Windows можно применять символы прямой или обратный слэш. При использовании символа обратный слэш он должен быть помечен как специальный, чтобы функция fopen смогла их корректно интерпретировать. Для этого помещают дополнительный символ обратный слэш : $fp = fopen("..\\..\\orders\\ orders.txt", "w") ; Второй параметр функции fopen() это режим открытия файла, который должен иметь строковый тип. Режимы файла перечислены в таблице.
12 Открытие файла РежимЗначение rРежим чтения, начиная с начала файла. r+r+Режим чтения и записи, начиная с начала файла. wРежим записи, начиная с начала файла. Если файл существует, его содержимое удаляется. Если файл не существует, файл создается. w+w+Режим записи и чтения, начиная с начала файла. Если файл уже существует, его содержимое удаляется. Если файл не существует, он создается.
13 Открытие файла РежимЗначение aРежим добавления (записи), начиная с конца существующего содержимого, если оно имеется. Если файл не существует, файл создается. a+a+Режим добавления (записи) и чтения, начиная с конца существующего содержимого, если оно имеется. Если файл не существует, он создается. bДвоичный режим (в сочетании с одним из остальных режимов). Windows различает эти файлы, а UNIX – нет.
14 Открытие файла Третий параметр функции fopen() не является обязательным. Его можно использовать, если файл необходимо искать в пути include_path (определенном в конфигурации РНР). Если это требуется, установите параметр равным 1 и не задавайте имя каталога или путь: $fp = fopen("orders.txt", "a", 1); В случае успешного открытия файла функция fopen() возвращает указатель на файл и сохраняет его в переменой, в данном случае $fp. Эта переменная будет использоваться для доступа к файлу, когда потребуется выполнить считывание либо запись в него.
15 Открытие файла Используя функцию fopen(), можно открывать для чтения или записи не только локальные, но и удаленные файлы с использованием протоколов FTP и HTTP. Если используемое имя файла начинается с ftp://, открывается FTP-соединение с указанным сервером в пассивном режиме и возвращается указатель на начало файла. Если используемое имя файла начинается с открывается HTTP-соединение с указанным сервером и возвращается указатель на ответ от сервера. При этом обязательно следует указывать завершающие символы косой черты в именах каталогов, как показано в следующем примере:
16 Открытие файла Обычная ошибка, связанная с открытием файла попытка открыть файл, для которого отсутствуют права на чтение или запись. В этом случае РНР выводит соответствующее предупреждение. В случае получения подобного сообщения об ошибке необходимо убедиться, что пользователь, выполняющий сценарий, обладает правами доступа к файлу. Если сценарий находится в UNIX в каталоге ~/public_html/chapter2/, общедоступный для записи каталог можно было бы создать, набрав следующие команды: mkdir ~/orders chmod 777 -/orders
17 Открытие файла Если обращение к функции fopen() оказывается безуспешным, она возвращает значение false. Обработку ошибок можно сделать более удобной, подавив сообщение об ошибке от РНР, и реализовав = fopen("$DOCUMENT_ROOT/../orders/ orders.txt", "a", 1); if (!$fp) {echo " Your order could not be processed. "; exit;} перед обращением к функции указывает РНР на необходимость подавления любых сообщений об ошибках, генерируемых после вызова функции. должен располагаться в самом начале строки.
18 Запись в файл Для этого можно воспользоваться функцией fwrite() или fputs(). Функцию fwrite() можно вызвать так: fwrite($fp, $outputstring); Это запись строки из переменной $outputstring в файл, указанный $fp. Прототип fwrite() имеет вид Int fputs(int fp,string str,int [len]); Третий необязательный параметр len - максимальное количество байтов, которые требуется записать. Функция записывать строку str в файл, пока не встретит конец строки или не запишет len байтов, в зависимости от того, что произойдет раньше.
19 Запись в файл Создадим строку, которая представляет одну запись в файле данных: $output = $date."\t".$tireqty. "tires \t". $oilqty." oil\t".$total."\t\n"; В этом примере каждая запись заказа сохраняется в отдельной строке файла. После обработки нескольких заказов содержимое файла будет выглядеть, как в листинге 3.листинге 3
20 Закрытие файла По завершении использования файла его следует закрыть при помощи функции fclose(), как показано ниже: fclose($fp); Эта функция возвращает значение true в случае успешного закрытия файла и false, если файл не был закрыт. Ошибка при этом значительно менее вероятна, чем при открытии файла, поэтому в данном случае проверка выполнения функции не выполняется.
21 Считывание из файла Создадим Web-интерфейс, который позволит читать файлы. Код этого интерфейса приведен в листинге 4.Web-интерфейслистинге 4 В примере используется цикл while для считывания из файла конца файла. Проверка производится функцией feof(): while (!feof($fp)) Для считывания из файла используется функция fgets(): $order= fgets($fp, 100); Считывание будет выполняться, пока не встретится символ новой строки (\n), EOF или из файла не будут прочитаны 99 байт.
22 Считывание из файла Интересна функция fgetss(): string fgetss (int fp, int length, string [allowable_tags] ) ; Она подобна функции fgets(), но будет избавляться от любых дескрипторов РНР и HTML, найденных в строке. Если в файле необходимо оставить конкретные дескрипторы, они должны быть включены в строку allowable_tags. Функцию fgetss() следует использовать для обеспечения безопасности при считывании файла, содержащего данные, введенные пользователем.
23 Считывание из файла Функция fgetcsv() вариация fgets() : array fgetcsv(int fp, int length, string [delimiter]); Используется для разделения строк файлов при использовании в качестве разделительного символа табуляции или запятой. Если требуется восстановить переменные в строке отдельно одна от другой, следует прибегнуть к функции fgetcsv(). Ей необходимо передать разделитель полей. Например: $order = fgetcsv($fp, 100, "\t"); Параметр length должен быть больше длины самой длинной строки считываемого файла, выраженной в символах.
24 Считывание из файла Вместо считывания по одной строке из файла за один проход можно считывать весь файл. Существуют три различных способа. readfile(). Открывает файл, повторяет его содержимое в стандартном выводе (окне браузера), а затем закрывает файл. Прототип этой функции имеет вид int readfile (string имя_файла, int [use_include_path]) ; Необязательный второй параметр указывает, должен ли РНР искать файл в пути use_include_path, и действует так же, как в функции fopen(). Функция возвращает общее количество байтов, считанных из файла.
25 Считывание из файла Во-вторых, можно использовать функцию fpassthru(). Вначале необходимо открыть файл с помощью функции fopen(). Затем указатель файла можно передать в функцию fpassthru(), которая загрузит содержимое файла, начиная с позиции, заданной указателем, в стандартный вывод. По завершении функция закрывает файл: $fp = fopen("$DOCUMENT_ROOT/../orders/ orders.txt", "r"); fpassthru($fp); Функция fpassthru() возвращает значение true, если считывание было выполнено успешно, и false в противном случае.
26 Считывание из файла Третья возможность считывания всего файла использование функции file(). Эта Функция идентична функции readfile() за исключением того, что вместо повторения файла в стандартном выводе она преобразует его в массив. Ее вызов выглядит так: $filearray = file($fp); Эта строка приведет к считыванию всего файла в массив, названный $filearray. каждая строка файла сохраняется в отдельном элементе массива.
27 Считывание из файла Еще одна возможность обработки файлов считывание из файла по одному символу. Это выполняется с помощью функции fgetc(). В качестве своего параметра она принимает указатель файла и возвращает следующий символ файла: while (!feof($fp)) { $char = fgetc($fp); if (!feof($fp)) echo ($char=="\n" ? " ": $char); } Этот код считывает из файла по одному символу за раз и сохраняет его в переменной $char, пока не будет достигнут конец файла. Затем выполняется дополнительная обработка с целью замещения текстовых символов конца строки \n HTML-разделителями строк.
28 Считывание из файла Побочный эффект использования функции fgetc() : она будет возвращать символ EOF, в то время как fgets() не делает этого. После считывания символа приходится снова выполнять проверку с помощью функции feof(), поскольку символ EOF не должен отображаться в окне браузера. Последний способ использование функции fread() для считывания из файла произвольного количества байтов: string fread(int fp, int length); Функция считывает length байтов или все байты до конца файла, в зависимости от того, что произойдет раньше.
29 Другие файловые функции Проверка существования файла. Если необходимо проверить файл на предмет существования без его открытия, можно воспользоваться функцией file_exists() : If file_exists ("$DOCUMENT_ROOT/../ orders/orders.txt")) echo "There are orders waiting."; Else echo "There are no orders."; Выяснение размера файла. Размер файла можно проверить с помощью функции filesize(). Она возвращает размер файла, выраженный в байтах: echo filesize("$DOCUMENT_ROOT/../orders /orders.txt");
30 Другие файловые функции Удаление файла unlink(): unlink("$DOCUMENT_ROOT/../orders.txt"); Эта функция возвращает значение false, если файл не может быть удален. Это будет происходить при недостаточном уровне прав доступа к файлу или если файл не существует. Перемещение внутри файла. Выяснять позицию указателя файла внутри файла и изменять ее можно с помощью функций rewind(), fseek() и ftell(). Функция rewind() переустанавливает указатель файла на начало файла. Функция ftell() сообщает в байтах позицию указателя относительно начала файла.
31 Другие файловые функции Примеры: echo "Final position is ".(ftell($fp)); rewind($fp); echo " Position is".(ftell ($fp) ); echo " "; Функция fseek() может использоваться для установки указателя файла внутри файла: int fseek(int fp, int offset); При вызове fseek() указатель файла fp устанавливается в точку файла, имеющую смещение offset байтов относительно начала файла. Вызов функции rewind() эквивалентен вызову функции fseek() со смещением, равным нулю.
32 Блокирование файлов Во избежание одновременного доступа используется блокирование файлов с помощью функции flock(). Эта функция должна вызываться после открытия файла, но перед считыванием данных из файла или их записью: bool flock(int fp, int operation); В функцию необходимо передать указатель на открытый файл и число, представляющее вид требуемой блокировки. Функция возвращает значение true, если блокировка была успешно выполнена, и false в противном случае. Возможные значения параметра operation перечислены в таблице.
33 Блокирование файлов ЗначениеОписание 1Блокировка чтения. Файл может использоваться совместно с другими читающими приложениями. 2Блокировка записи. Это монопольный режим. Файл не доступен для совместного использования. 3Снятие существующей блокировки. +4Добавление 4 к текущему значению параметра предотвращает другие попытки блокирования во время выполнения текущего блокирования.
34 Проблемы При работе с двумерными файлами возникает ряд проблем: Когда двумерные файлы становятся большими, работа с ними существенно замедляется. Поиск конкретной записи или группы записей в файле затруднен. Конкурирующий доступ может порождать проблемы. При необходимости вставить записи или удалить их из середины файла (т.е. при необходимости произвольного доступа), это может оказаться затруднительным. Кроме ограничений, налагаемых правами доступа к файлам, не существует никакого способа обеспечения различных уровней доступа к данным.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.