- •Государственное образовательное учреждение высшего профессионального образования Волго-Вятская академия государственной службы
- •Разработка Web-приложений
- •Часть 2. Основы php – основного языка создания Web - приложений
- •Оглавление
- •Глава 1. Основы языка php 7
- •Глава 2. Синтаксис и семантика операторов php 58
- •Глава 3. Массивы 103
- •Глава 4. Функции 141
- •Глава 5. Работа с файлами 198
- •Глава 6. Вопросы и задания 271
- •Глава 1.Основы языка php
- •1.1.Замечания о некоторых особенностях языка и среды его выполнения
- •1.2. Как работает обработчик кода php
- •1.3. Синтаксис php – начальные сведения
- •1.3.1. Как интерпретатор распознаёт (различает) код php
- •1.3.2. Синтаксис php разрешает совместное и раздельное использование кода php и html
- •Пример 1‑1
- •1.3.3. Другие особенности синтаксиса php начального уровня
- •Пример 1‑2
- •Наиболее часто применяемые символы управляющих последовательностей
- •1.4. Синтаксис php –типы данных, строки, переменные, константы, функции и выражения
- •1.4.1. Основы понятия «типы данных». Классификация данных в php
- •Скалярных типов (всего четыре):
- •Смешанных типов (всего 2):
- •Специальных типов (всего 2):
- •1.4.2. Интервалы значений числовых данных в php
- •1.4.2.1. Целые числа
- •1.4.2.2.Вещественные (с плавающей точкой) числа
- •1.4.3. Элементы языка, которые «держат» данные. Их синтаксис
- •1.4.3.1. Постановка задачи
- •1.4.3.2. Строки
- •Пример 1‑3
- •Пример 1‑4
- •1.4.3.3. Переменные
- •Пример 1‑5
- •Пример 1‑6
- •Пример 1‑7
- •1.4.3.4. Константы
- •Пример 1‑8
- •1.4.3.5. Функции в php – введение в тему
- •Пример 1‑9 – обобщённая схема определения функции
- •Пример 1‑10
- •1.4.3.6. Функции php по работе с данными
- •Пример 1‑11
- •Пример 1‑12
- •Пример 1‑13
- •Пример 1‑14
- •Пример 1‑15
- •1.4.3.7. Функции php по работе со строками
- •Пример 1‑16
- •Пример 1‑17
- •Пример 1‑18
- •Пример 1‑19
- •1.4.3.8. Понятие «выражение» в php
- •1.4.3.9. Манипуляции с типами
- •Глава 2. Синтаксис и семантика операторов php
- •2.1. Классификация операторов php и порядок их выполнения
- •О ператоры php в порядке убывания приоритета
- •2.2. Математические операторы
- •2.2.1. Арифметические операции
- •Арифметические операторы php
- •Пример 2‑20
- •2.2.2. Математические функции
- •2.2.3. Операторы присваивания
- •Пример 2‑21
- •2.2.4. Операторы инкремента (увеличения) и декремента (уменьшения)
- •Пример 2‑22
- •2.2.5. Строковые операторы
- •Пример 2‑23
- •2.2.6. Побитовые операторы
- •Пример 2‑24
- •Побитовые операторы php
- •2.2.7. Класс логических операторов
- •2.2.8. Операторы (конструкции) управления выполнением скрипта
- •2.2.8.1. Операторы условного перехода
- •If ( условие )
- •Пример 2‑25
- •2.2.8.2. Расширение оператора if - оператор elseif
- •If (выражение) блок_выполнения
- •Пример 2‑26
- •Пример 2‑27
- •Оператор переключения "switch" ("выбор")
- •Пример 2‑28
- •2.2.9. Операторы цикла
- •2.2.9.1. Простейший оператор цикла – цикл с предусловием - оператор while
- •While (выражение) {блок_выполнения}20
- •While (выражение): блок_выполнения endwhile;
- •Пример 2‑29
- •2.2.9.2. Цикл с постусловием - оператор do while
- •2.2.9.3. Циклы for
- •Пример 2‑30
- •Пример 2‑31
- •Пример 2‑32
- •2.2.9.4. Частные случаи использования цикла for в php
- •Пример 2‑33
- •Пример 2‑34
- •Пример 2‑35
- •Пример 2‑36
- •2.2.9.5. Об альтернативном синтаксисе операторов цикла
- •Глава 3. Массивы
- •3.1. Общие вопросы использования массивов в php: определение, типы, использование в выражениях и размерность
- •3.2. Создание массивов и особенности их использования в php
- •Пример 3‑37
- •Пример 3‑38
- •3.3. Операции с массивами
- •3.3.1. Вывод элементов массива на экран
- •Пример 3‑39
- •3.3.2. Изменение, перебор элементов и удаление элементов массива
- •Пример 3‑40
- •Пример 3‑41
- •3.3.3. Сортировка массива
- •Пример 3‑42 - сортировка массивов
- •Array(день1,день3, день11, день111);
- •Array(5,1,3,день1,день5,день3,day1,"яблоко","груша","apple")
- •3.3.4. Преобразование строк в массивы и наоборот
- •Пример 3‑43
- •3.3.5. Примеры специальных функций обработки массивов
- •Extract (имя_массива)
- •Пример 3‑44 - использование array_merge() с параметрами разных типов в php 5
- •Пример 3‑45 – обработка массивов
- •3.3.6. Функции по работе с массивами для самостоятельного изучения
- •3.4. Многомерные массивы
- •3.4.1. Введение
- •Пример 3‑46
- •3.4.2. Создание многомерных массивов
- •Пример 3‑47
- •Пример 3‑48
- •3.4.3. Ссылки на элементы многомерных массивов
- •3.4.4. Перебор элементов многомерных массивов
- •Пример 3‑49
- •3.4.5. Операторы над массивами
- •Операторы над массивами
- •Пример 3‑50
- •Глава 4.Функции
- •4.1. Введение
- •4.2.Создание, подключение и использование собственных функций в php
- •4.2.1. Синтаксис описания функции
- •4.2.2. Описание работы функции навигации по страницам сайта
- •4.2.3. Архитектура проекта, иллюстрирующего работу функции
- •Пример 4-1 - код «простого» решения
- •Пример 4‑2 - текст файла index.Php
- •4.3. Передача данных в функцию
- •4.3.1. Передача в функцию списка простых данных
- •Пример 4‑6
- •Пример 4‑7
- •4.3.2. Передача массивов в функцию
- •Пример 4‑8
- •Пример 4‑9
- •4.3.3. Функции с переменным числом аргументов
- •Пример 4‑10
- •4.3.4. Два способа передачи аргументов в функцию
- •4.3.5. Ссылка в php
- •4.3.6. Передача аргументов в функцию по ссылке
- •Пример 4‑11
- •4.4. Организация возврата значений из функции в вызывающий её скрипт
- •4.4.1. Функции, возвращающие единичные (скалярные) значения
- •Пример 4‑12
- •Пример 4‑13
- •4.4.2. Функция, возвращающая массив. Использование списков
- •Пример 4‑14
- •4.4.3. Функция, возвращающая ссылки
- •Пример 4‑15
- •4.5. Типизация переменных в php по их «области действия», «видимости» и «времени жизни». Глобальные, суперглобальные и статические переменные
- •4.5.1. Общие положения
- •Пример 4‑16
- •4.5.2. Предопределённые переменные и суперглобальные массивы
- •Пример 4‑17
- •4.5.3. Статические переменные
- •Пример 4‑18
- •4.6. Дополнительные возможности работы с функциями в php
- •4.6.1 Переменные, ссылающиеся на функции
- •Пример 4‑19
- •4.6.2. Условное (динамическое) описание функций
- •Пример 4‑20
- •4.6.3. Вложенные функции и вложенные файлы
- •Где хранить эти файлы?
- •Какую команду надо использовать, чтобы вставлять файл в нужное место?
- •Какими должны быть синтаксис и расширение таких файлов?
- •Пример 4‑511
- •4.6.4. Обработка ошибок в функциях пользователя
- •Пример 4‑22
- •4.7. Рекурсивное использование функций
- •4.7.1. Рекурсивные и итеративные функции – в чём разница, недостатки и преимущества
- •Пример 4‑23
- •4.8. Основные итоги по теме «Функции»
- •Глава 5.Работа с файлами
- •5.1. Возможности работы с файлами в php
- •5.1.1. Введение
- •5.1.2. Понятия и термины, связанные с понятием «файл»
- •5.1.2.1. Понятие файла и файловой системы
- •Свойства файла
- •Операции и сущности, связанные с файлами
- •Бинарные (двоичные) и текстовые файлы
- •5.2. Функция открытия файла - базовая функция при работе с файлам. Особенности обращения к файлам
- •5.2.1. Синтаксис функции открытия файла
- •Пример 5‑52
- •5.2.2. Абсолютные и относительные пути (дорожки) до файла
- •5.2.3. Понятие унифицированного (единообразного) идентификатора ресурса - uri
- •5.2.4. Уточнение возможных ссылок на файлы и особенности работы с ними
- •Пример 5‑53
- •Пример 5‑54
- •Перечень некоторых предопределённых констант php
- •5.3. Примеры использования других функций для работы с файлами
- •5.3.1. Проверка существования файла
- •5.3.2. Проверка существования и размера файла
- •Int filesize(string имя_файла)
- •5.3.3. Закрытие файла после завершения работы с ним
- •Int fclose(int дескриптор файла)
- •5.3.4. Основные операции с открытыми файлами
- •5.3.4.1. Запись в файл
- •Int fwrite(int дескриптор, string stroka[, int длина])
- •5.3.4.2. Запись файла целиком
- •Пример 5‑55
- •5.3.4.3. Чтение из файла
- •Пример 5‑56
- •5.3.5. Специальные случаи чтения файлов
- •5.3.5.1. Чтение строк текста: функция fgets( )
- •5.3.5.2. Чтение строк текста c отбрасыванием html тегов: функция fgetss( )
- •5.3.5.3. Посимвольное чтение файла: функция fgetс( )
- •Пример 5‑57
- •5.3.5.4. Чтение файла в индексированный массив: функция file()
- •5.3.5.5. Чтение файла целиком в строку: функция file_get_contents()
- •5.3.5.6. Чтение файла с его синтаксическим разбором: функция fscanf()
- •Пример 5‑58
- •5.4. Функции для операций над каталогами
- •Перечень функций по работе с каталогами
- •5.4.1. Получение дорожки до текущего скрипта и его имени
- •5.4.2. Чтение всего содержимого каталога
- •Пример 5‑8
- •5.4.3. Печать дерева каталогов
- •Визуальное отображение дерева каталогов для текущего каталога ТекКат
- •Пример 5‑9
- •5.5. Общая классификация функций php по работе с файловой системой
- •Категории функций php по работе с файловой системой
- •5.6. Права пользователей по доступу к файлам
- •5.6.1. Определение прав доступа
- •5.6.2. Описание прав доступа в системе unix и их реализация
- •Пример записи прав доступа к файлу для разных групп пользователей
- •B. Матричный вид
- •5.6.3. Особенности управления доступом к файлу в php
- •Глава 6.Вопросы и задания
- •6.1. Вопросы и задания к главе 1(Основы языка php)
- •6.1.1.Контрольные вопросы к главе 1
- •6.1.2. Задания к главе 1
- •6.2. Вопросы и задания к главе 2 (Синтаксис и семантика операторов php)
- •6.2.1.Контрольные вопросы к главе 2
- •6.2.2. Задания к главе 2
- •6.3. Вопросы и задания к главе 3 (Массивы)
- •6.3.1.Контрольные вопросы к главе 3
- •6.3.2. Задания к главе 3
- •6.4. Вопросы и задания к главе 4(Функции)
- •6.4.1.Контрольные вопросы к главе 4
- •6.4.2. Задания к главе 4
- •6.5. Вопросы и задания к главе 5(Работа с файлами)
- •6.5.1.Контрольные вопросы к главе 5
- •6.5.2. Задания к главе 5
- •Рекомендованные для работы с пособием источники
- •32 Монтирование файловой системы — процесс, подготавливающий раздел диска к использованию операционной системой.
5.6. Права пользователей по доступу к файлам
5.6.1. Определение прав доступа
Права доступа к файлам - это основа основ работы с ними. Данное выражение может быть не очень понятно, если пользователи работали только под Windows.
Права доступа бывают:
На чтение файлов: любой процесс имеет право прочитать из файла информацию.
На запись в файлы: любой процесс имеет право записать что-то в файл.
На исполнение файлов: любой процесс может запустить исполняемый файл.
На изменение каталога: любой процесс может стереть, записать файл в каталоге.
В системах Windows многим файлам и папкам (кроме системных) сразу же предоставлены все эти права, вот почему при работе с этой операционной системой у пользователей, как правило, не возникает вопросов, а какие бывают "права доступа". И становится понятно, почему с такой легкостью любой вирус спокойно записывает себя на компьютер с данной операционной системой (без установки дополнительных защит).
Возникает вопрос - а что бывает по-другому, что есть платформа, в которой вирусы не живут? Конечно, бывает... Это системы, которые базируются на платформе Unix. Большинство серверов в мире работают именно под этой системой. Наиболее уязвимые Web-серверы под управлением Windows (IIS) используются гораздо реже. Примерное распределение выглядит так: Unix – подобные сервера – 70%, из них Apache – 66%, IIS – 23%, другие – 7%).
Чем же отличается ОС Unix от Windows в плане обеспечения безопасности доступа? Тем, что права доступа в системах Unix раздаёт главный администратор компьютера, который владеет основным паролем. Он, и только он, может предоставить, например, право что-то записывать в данный файл. В ином случае, все остальные файлы и папки можно только читать. В результате становится понятно, что там, где в основном размещены файлы и папки с пометкой 'только для чтения', вирусам делать нечего, они не смогут туда себя записать и исполниться.
5.6.2. Описание прав доступа в системе unix и их реализация
Файлы в Unix физически состоят из двух частей, реально локализованных в различных блоках дискового накопителя, но обязательно находящихся в одном дисковом разделе, первичном или логическом.
Первая часть файла - его так называемые метаданные49, которые содержат:
файловый дескриптор (это просто некое уникальное число);
сведения об его атрибутах (принадлежности, правах доступа, времени модификации и т.д.);
информацию о том, в каких блоках дискового раздела (которые так и называются - блоки данных) физически размещено содержимое файла - те самые последовательности байтов, которые образуют доступный пользователю ASCII-текст или исполняемый модуль программы.
Метаданные каждого файла записаны в специальной области диска, называемой суперблоком, где образуют, так называемые, информационные узлы (inodes - от information nodes - информационные узлы).
Каждому существующему файлу соответствует свой inode, и именно он однозначно идентифицируется файловым дескриптором.
А сам по себе список inodes, соответствующих как существующим файлам, так и свободным блокам дискового раздела, определяет границы файловой системы, то есть, сколько файлов может быть в ней создано.
В системе UNIX при определении прав доступа ввели категорию пользователей и категорию прав доступа к файлам и каталогам. Различают три группы категорий (типов) работающих на ЭВМ:
пользователь-владелец файла(owner)50;
группа пользователей-владельцев (group), которым устанавливаются права, отличные от прочих пользователей;
прочие пользователи (other).
Можно говорить и о суперпользователе, который «может всё» - это администратор системы или администратор хостинга.
Различным пользователям администратором системы (сервера) могут назначаться следующие права:
на чтение (r–read), соответствующий пользователь (процесс), имеет право на чтение содержимого данного файла и копирование этого файла;
на запись (w-write);
на выполнение (x- execute).
В скобках указаны символы, обозначающие права доступа, которые могут быть использованы при работе с файлами. Таким образом, совокупность прав конкретной категории пользователя должна описываться тройкой символов.
Права для трех перечисленных групп пользователей записываются слитно, в той последовательности, в которой они указаны выше - rwx.
Если категория, к которой принадлежит работающий на компьютере, обладает тем или иным правом, то ставится символ, соответствующий этому праву, иначе ставится прочерк.
Например, обладающий правами только на чтение и запись обозначается так: rw- . Если владелец (owner) файла и группа (group), к которой он принадлежит, обладают всеми правами, а остальные (other) обладают правами на чтение и выполнение, шифр доступа для всех категорий пользователей сразу обозначается так: rwxrwxr-x.
Так как файлы могут быть разных типов, то термин «выполнение» для них имеет разное практическое наполнение:
Для обычных файлов (файлов, содержащих информацию) «выполнение» означает открытие файлов.
Для исполняемых файлов - их запуск.
Для каталогов - просмотр содержимого.
Естественно, что разные категории вошедших в систему субъектов (в нашем случае на сайт) должны обладать разными правами доступа. Информация о них должна записываться в область метаданных файловой системы. Они укажут операционной системе на то, что может делать пользователь той или иной категории с данным файлом. В области метаданных информация о присваивании разным группам пользователей прав доступа содержится в виде совокупности бит. Следовательно, помимо символьного формата записи прав доступа, описанного выше, должен существовать также и числовой формат записи прав доступа. Если представить, что положительное значение права (доступ есть) обозначено единицей, а отрицательное (черта или доступа нет) — нулем, то можно получить двоичной код доступа к файлам.
Так как в командах (функциях), определяющих права доступа к файлу, необходимо указывать эти числа в восьмеричном виде, то надо три вида доступа для трёх категорий пользователей (матрица 3x3) отобразить в виде совокупности трёх восьмеричных чисел. Для этого, в символьном формате буквы заменим единицей, а черточки — нулями. Затем полученное двоичное число необходимо представить в восьмеричном формате — это и будет код прав доступа в числовом формате.
Допустим, код доступа в символьном виде задан так: rwxrwxr-x. Запишем его как 111111101, полученное двоичное выражение заменим восьмеричным и получим числовой формат записи – 775.
В таблицах Таблица 5 -18 (а,b) приведен развёрнутый пример такой записи.
Таблица 5‑18