Указанная секция PHP может использоваться в любом месте файла, неограниченное количество раз, вперемежку с обычным текстом html. Чтобы PHP-код начал интерпретироваться, html-страничку (расширение .htm или html) нужно переименовать в .php.
1. Простой вывод текста
Текст можно вводить как в одинарных кавычках, так и в двойных. В функции аргументы можно передавать без скобок. Кроме echo можно использовать ключевое слово print. Отличие echo от print в том, что echo может выводить несколько строк, указанных через запятую:
Обе эти строки выведут один и тот же результат. Одинарные кавычки отличаются от двойных тем, что одинарные отключают сканирование строки на наличие в ней переменных, например, в следующем примере только первый оператор echo выведет значение переменной:
Одинарные кавычки также отключают действие Esc-кодов (см. ниже). Одинарные кавычки увеличивают производительность кода, поэтому их использование предпочтительнее.
Другой способ определения строк – это использование heredoc-синтаксиса. В этом случае строка должна начинаться с символа , а используется в другой секции . Переменные бывают трех типов — числовой, строковый и логический. Тип определяется неявно в момент присвоения переменной значения. Переменная появляется в момент её назначения. Для проверки факта существования переменной имеется функция IsSet, например (выполните этот код 2 раза, во второй раз раскомментируйте присвоение переменной $index):
Если переменная не была задана (присвоена), но её значение используется, то переменная автоматически получает значение по умолчанию. Например, если функция, применяемая над переменной, математическая, то переменной присвоится число 0. Переменные, объявленные вне функций, являются глобальными, т. е. видны во всем файле. Переменные, объявленные в теле функции, видны только в этой функции. Операторы PHP, в отличие от функций, констант и переменных, нечувствительны к регистру.
3. Неявное преобразование типа переменной (в данном примере преобразование строки в число):
Будет выведен результат 20. Это означает, что интерпретатор преобразовал строку ’10’ в число. При выводе произошло также преобразование — число 20 было преобразовано в строку ’20’. Автоматические преобразования типов упрощают код, но затрудняют поиск логических ошибок при отладке.
4. Определение констант, использование комментариев.
В этом примере задана константа и показано использование комментариев. Имя константы тоже чувствительно к регистру. Существующие предопределенные логические константы TRUE и FALSE нечувствительны к регистру. Константы удобно использовать в отдельном файле и подключать его оператором require_once, например, в таком файле могут храниться строковые константы пунктов меню. При случае легко поменять язык сайта, просто включив другой файл с константами.
5. Другие способы задания комментариев:
6. Использование перевода строки и параграфа при выводе
Тут показано использование перевода строки при выводе. Если использовать , то это будет означать конец параграфа, и интервал до новой строки будет увеличен по сравнению с .
7. Использование Ecs-кодов
r
n — команда, полностью эквивалентная тегу
в HTML — перенос строки (n почему-то не всегда работает).
$ — выведет символ доллара.
\ — выведет обратную косую черту.
» — выведет кавычки.
8. Пример функции
Имена функций чувствительны к регистру. Возврат значения переменной из функции возможно с помощью ключевого слова return $имя_переменной. Вместо тега можно использовать тег , но лучше этого не делать.
По умолчанию параметры в функцию передаются по значению, то есть переданную в функцию переменную можно свободно изменять внутри функции, и на выходе значение переменной, которая передавалась, останется прежним. Чтобы передать переменную не по значению, а по ссылке, в вызове функции к переменной нужно добавить амперсанд &, например:
9. Пример условного оператора, получение переменной окружения.
Здесь показан пример условного оператора — проверка на адрес клиента, который зашел на сайт. Если его адрес не равен 192.168.0.14, то будет выведен файл ‘postinfo.html’ (тут еще и продемонстрировано действие оператора include). Бывают следующие операторы сравнения:
| оператор | описание |
| == | равно |
| === | равно и совпадают типы |
| != | не равно |
| меньше больше | |
| = | больше либо равно |
Кроме того, есть очень удобный оператор elseif:
Тут также продемонстрировано действие оператора include. Бывают еще функции включения include_once, require, require_once. Функции включения с окончанием _once гарантируют, что включение файла будет произведено только один раз, что спасает от логических ошибок в программе — если будет произведена попытка повторного включения, то сгенерируется фатальная ошибка. Функции include и include_once отличаются от require и require_once тем, что первая пара генерирует только предупреждение об ошибке о продолжает выполнение сценария. Вторая пара генерирует фатальную ошибку (дальнейшее выполнение сценария прекращается). Таким образом, include лучше использовать для включения файлов с содержимым (документов), а require для файлов программы PHP.
Функции подключения удобны при делении страниц сайта на секции — заголовок, тело документа, подвал. В этом случае заголовок и подвал неизменны и вставляются всегда из одних и тех же файлов — дизайн теперь менять намного проще.
10. Получение других переменных окружения
Здесь показан вывод переменных окружения сервера. В одной строке можно использовать несколько операторов, отделенных табуляцией, пробелами и точкой с запятой. Более правильно, конечно, было бы использовать цикл foreach, поскольку перечень переменных для каждого сервера может отличаться (см. пункт 18 Массивы).
11. Логгер пользователей, которые заходят на сайт
Файл лога будет называться YYMMDD.txt и писаться в папку logs, которая находится в корневом каталоге сайта (там же, где файл index.html).
— строки складываются друг с другом не оператором ‘+’, а оператором ‘.’ (кто бы мог подумать).
— функция date позволяет получать текущее время в отформатированном виде.
— переменные можно складывать еще и просто перечисляя их в одной строке (. )
— rn используем для добавления перевода строки.
— $file = fopen(путь_до_файла,»a») используем для открытия файла и получения его дескриптора ($file). «a» означает, что файл будет использоваться для добавления данных.
— fwrite пишем в файл, fclose его закрываем.
Возможны другие варианты открытия файла:
‘r’ — Открыть только для чтения, помещает указатель на начало файла.
‘r+’ — Открыть для чтения и для записи, помещает указатель на начало файла.
‘w’ — Открыть только для записи, помещает указатель на начало файла и очищает все содержимое файла. Если файл не существует, создается новый файл
‘w+’ — Открыть для чтения и для записи, помещает указатель на начало файла и очищает все содержимое файла. Если файл не существует, создается новый файл.
‘a’ — Открыть только для записи, помещает указатель на конец файла. Если файл не существует, создается новый файл.
‘a+’ — Открыть для чтения и для записи, помещает указатель на конец файла. Если файл не существует, создается новый файл.
Может также использоваться символ ‘b’ в системах, различающих бинарные и текстовые файлы (не используется в Unix). Если данное значение не имеет смысла, оно игнорируется.
12. Как запустить PHP-скрипт? Опишу один из способов.
— в тело html-странички (например, page.html), в любом месте раздела нужно встроить код PHP:
— файл странички переименовываем из page.html в page.php. В NetObjects Fusion 7.5, в частности, это делается через свойства страницы (GoStructure View, щелкаем на желто-черную иконку странички, в окошке Properties выбираем закладку Page, жмем кнопку Custom Names. в выпадающем списке File extension: меняем расширение файла на .php, просто вбивая вручную, жмем Ok).
— убеждаемся, что права на файл page.php равны 755 (права можно просмотреть и изменить либо в командной строке unix, либо в ftp-клиенте с соответствующими возможностями. Я использовал с успехом ftp-клиент, встроенный в Total Commander).
— теперь в браузере нужно загружать не page.html, а page.php. При этом html-код выполнится без изменений и отобразится в браузере, но дополнительно веб-сервер выполнит и PHP-код, заключенный между тегами и ? > . Отобразится как HTML-код, так и то, что будет выведено командой echo в коде PHP. Этот код может многое — модифицировать выводимую страницу, обращаться к базам данных, писать и читать файлы на web-сервере и многое другое. Если просмотреть исходный код страницы page.php в браузере (правая кнопка — View Source), то код PHP виден не будет (т. е. сервер отдает пользователю уже откомпилированную страничку).
13. Как узнать версию PHP, которая установлена на сайте? Функция phpinfo() выводит красивую и подробную информацию об установленном PHP.
14. Функция Error_Reporting() меняет параметры вывода сообщений об ошибке.
Если перед функцией поставить символ @, например @print(), то в случае ошибки в этой функции сообщение об ошибке не выведется.
15. Блок кода задается так же, как в C, с помощью <>.
16. Цикл for задается так же, как в C:
Отличие в том, что инициализировать можно несколько переменных:
Кроме того, можно делать несколько проверок, но это не имеет смысла, поскольку срабатывает только последняя:
Например, так получим бесконечный цикл:
А так цикл ни разу не выполнится:
Кроме того, можно делать несколько изменений переменных, опять же через запятую.
17. exit() прекращает работу сценария — дальнейший HTML-код не загрузится и не отобразится. Оператор die(«сообщение») делает то же самое, но выводит сообщение.
18. Функция для поиска и замены с помощью регулярного выражения
pattern регулярное выражение для поиска, чего будем менять
replacement чем заменяем
subject строка, в которой производится поиск и замена
limit сколько раз производим замену (необязательный параметр)
mixed псевдотип; говорит о том, что параметр может принимать множество (но не обязательно все) типов.
19. Массивы
Присвоение элементам значений:
В этом случае последний элемент массива получит индекс 21.
Можно в качестве индексов использовать символы:
Можно создавать массивы с помощью функции array:
С помощью функции array можно создавать массивы с символьными индексами:
Цикл foreach позволяет вывести все элементы массива:
А так с помощью foreach можно получать значение индекса:
Функция count позволяет получить количество элементов массива:
Пример, который выводит все переменные окружения сервера:
Этот код не такой громоздкий, как был приведен ранее (п. 10), и выводит весь список существующих переменных. Коды & nbsp ; выводят пробелы, которые не обрезаются до одного.
Другие предопределенные массивы:
| $GLOBALS | Все глобальные переменные скрипта (включает все остальные). |
| $_SERVER | Переменные, установленные web-сервером либо напрямую связанные с окружением выполнения текущего скрипта. Аналог старого массива $HTTP_SERVER_VARS (который по-прежнему доступен, но не рекомендуется). |
| $_GET | Переменные, передаваемые скрипту через HTTP GET. Аналог старого массива $HTTP_GET_VARS (который по-прежнему доступен, но не рекомендуется). |
| $_POST | Переменные, передаваемые скрипту через HTTP POST. Аналог старого массива $HTTP_POST_VARS (который по-прежнему доступен, но не рекомендуется). |
| $_COOKIE | Переменные, передаваемые скрипту через HTTP cookies. Аналог старого массива $HTTP_COOKIE_VARS (который по-прежнему доступен, но не рекомендуется). |
| $_FILES | Переменные, передаваемые скрипту через HTTP post-загрузку файлов. Аналог старого массива $HTTP_POST_FILES (который по-прежнему доступен, но не рекомендуется). Для дополнительной информации смотрите «Загрузка методом POST». |
| $_ENV | Переменные, передаваемые скрипту через окружение. Аналог старого массива $HTTP_ENV_VARS (который по-прежнему доступен, но не рекомендуется). |
| $_REQUEST | Переменные, передаваемые скрипту через механизмы ввода GET, POST и COOKIE, и которым, следовательно, нельзя доверять. Наличие и порядок включения переменных в этот массив определяется в соответствии с директивой конфигурации PHP variables_order. Этот массив не имеет прямых аналогов в версиях PHP до 4.1.0. Смотрите также import_request_variables(). |
| $_SESSION | Переменные, зарегистрированные на данный момент в сессии скрипта. Аналог старого массива $HTTP_SESSION_VARS (который по-прежнему доступен, но не рекомендуется). Дополнительную информацию смотрите в разделе Функции обработки сессии. |
20. Строки
Функции для работы со строками и символами:
mixed str_replace (mixed search, mixed replace, mixed subject[, int &count]) возвращает строку, в subject, в которой все search заменены на replace. В переменной count подсчитывается количество замен.
int ord (string string) возвращает ASCII-код первого символа в строке.
string chr (int ascii) возвращает строку из одного символа, код которого задан аргументом ascii.
21. Удобные функции для работы с массивами
array split (string pattern, string string [, int limit]) позволяет получить массив из строки string, помещая её по частям, границы которых выделяются разделителем pattern. При этом pattern может состоять как из одного символа, так и из нескольких, а также из регулярного выражения (подробнее см. help). В результирующие элементы получаемого массива pattern не попадает. Функцию удобно использовать для разделения текста на отдельные строки, для разбиения html-кода на блоки с помощью тегов, для обработки CSV-таблиц и т. д. Если указан необязательный элемент limit, то массив будет состоять из не более чем limit элементов. В случае ошибки функция возвращает FALSE. Пример (открывается простой текстовый файл, каждая строка которого состоит из ссылки, и этими ссылками по разделителю rn заполняется массив $good_links):
bool in_array (mixed needle, array haystack [, bool strict]) ищет в массиве haystack значение needle и возвращает TRUE в случае удачи, FALSE в противном случае. Чрезвычайно удобная функция, одной строкой заменяющая цикл поиска по элементам массива. Если третий параметр strict установлен в TRUE, тогда функция in_array() также проверит соответствие types параметра needle и соответствующего значения массива haystack. Если needle — строка, сравнение будет регистрозависимым. Пример:
Работа с файлами
Работа с файлами — важный инструмент PHP.
Включение внешних файлов
В каждый PHP-документ можно включить файл с помощью инструкции include(). Её аргумент: путь к файлу. Этой инструкцией удобно пользоваться при наличии одинаковых кусков кода во многих PHP-программах. Содержимое включаемого файла обрабатывается как простой HTML-текст. Для того, чтобы содержимое этого файла обрабатывалось как PHP-программа, нужно обрамлять его открывающим и закрывающим тегами PHP.
Пример 1
Включаемый файл top.php с PHP-программой:
. Общее приветствие.
. Основная часть.
В данном случае результат будет тем же, если включаемый файл top.php содержит только строку HTML-текста:
Включаемые файлы могут возвращать значения подобно функциям. Использование оператора return прерывает выполнение этого файла так же, как и функции.
Пример 2
Включаемый файл top.php с PHP-программой:
Включаемый файл вернул 56
Инструкцию include() можно использовать внутри цикла. В цикле include() выполняется при каждой итерации. Это можно использовать для включения нескольких файлов. Например:
Определение имени включаемого файла и его загрузка производятся повторно при каждом вызове . Это означает, что если содержание включаемого файла с момента предыдущего вызова изменилось, то загрузится новое содержание.
Оператор include() также можно включать в тело условного оператора.
Несмотря на сходство по внешнему виду с функцией, include() функцией не является, а представляет собой специальную конструкцию языка.
Для указания что файл нужно подключать только один раз используется оператор include_once()
Анализ файлов
PHP содержит множество функций, дающих информацию о файлах. Наиболее употребимыми являются:
- file_exists() — определяет существование файла. Например:
- is_file() — определяет, является ли исследуемый объект файлом. Например:
- is_dir() — определяет, является ли исследуемый объект каталогом. Например:
- is_readable() — определяет, доступен ли файл для чтения. Например:
- is_writable() — определяет, доступен ли файл для записи. Например:
- filesize() — определяет размер файла в байтах.
- filemtime() — определяет дату и время последнего изменения файла.
- fileatime() — определяет дату и время последнего обращения к файлу.
Время возвращается в формате Unix, т.е. представляет собой количество секунд, прошедших после 1 января 1970 г. В примере 2 это число преобразуется в понятный для человека формат с помощью функции date( ). Подробнее об этой функции можно узнать в разделе «Дополнительные возможности».
Пример 3
Внимание! С удаленными файлами эти функции не работают. Их можно применять только к локальной файловой системе.
Управление файлами
PHP содержит множество функций управления файлами. Наиболее употребимыми являются:
- touch() — создает пустой файл с заданным именем. Если такой файл уже существует, то функция изменит дату модификации. Например:
- copy() — копирует файл. Для копирования файлов в php применяется функция copy ($source, $result). Ей нужно передать лишь два параметра — источник $source и имя файла-копии — $result. Стоит отметить, что следует указывать полные адреса к файлам. Пример применения функции copy:
Пример 4
Пример 5
Пример 6
Пример 7
- file_get_contents() — прочитать весь файл или URL
- file_put_contents() — записать файл
Работа с каталогами
В PHP есть несколько функций для работы с каталогами:
-
mkdir() — создание каталога. Аргументы: путевое имя каталога и режим доступа. Режим доступа — восьмеричное число из трех цифр с ведущим нулем. Первая цифра — право доступа для владельца, вторая — для группы, третья — для всех остальных. В системе Windows режим доступа игнорируется. В системе UNIX определены следующие права доступа:
Пример 8
Проверочное выражение цикла сработает не так, как хотелось бы, если в каталоге есть файл с именем «0». В таком случае имя «0» будет преобразовано в 0, что вызовет завершение цикла. Избежать подобного можно, если принять дополнительные меры безопасности, изменив проверочное выражение: Помимо использования функция fgetc() fgets() fgetss(), Вы можете использовать
$file = file($filename). Она читает $filename в массив($file).
Передача файла с сервера. Скачать файл. DownLoad.
Ручной Download, или как скриптом открыть пользователю окошко сохранения файла. Чтобы в браузере открылся диалог «Сохранить файл» с названием файла file.dat, скрипт должен послать такие заголовки: Готовый пример отправки файла с диска: Не мешало бы также ссылаться на скрипт как http://. /download.php?file.dat, иначе браузеры, основанные на Mozilla, могут попытаться записать файл как file.dat.php. или указать атрибут download: Примечание: Не используйте заголовок header(«Cache-Control: no-cache») в таких скриптах, большинство версий Internet Explorer не смогут скачать файл. Следующий пример скрипта демонстрирует как организовать поддержку докачки: Предполагается, что $cd — путь к файлу, $fn — имя файла Как передать файл на сервер?
Функции для работы с каталогами
Изменяет текущий каталог PHP на указанный в качестве параметра str. Возвращает TRUE в случае успешного завершения, FALSE в случае возникновения ошибки
chroot() — Сменить корневой каталог boolean chroot (string str) Изменяет корневой каталог текущего процесса на переданный в качестве параметра str. Возвращает TRUE в случае успешного завершения, FALSE в случае возникновения ошибки.. Замечание: Для Windows-платформ эта функция не реализована.
closedir() — Освободить дескриптор каталога void closedir (resourse catalog) Закрывает поток, связанный с каталогом и переданный в качестве параметра catalog. Перед использованием данной функции, поток должен быть открыт с помощью функции opendir().
