mirror of
https://github.com/php/doc-ru.git
synced 2026-03-23 23:32:16 +01:00
433 lines
23 KiB
XML
433 lines
23 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 876557ae38f6ca5035618f7cea48ca627118b437 Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<info><title>Простой учебник</title></info>
|
||
|
||
<para>
|
||
Это краткое и простое руководство показывает только основы PHP.
|
||
Текст рассказывает, только как создавать динамические
|
||
веб-страницы на PHP, хотя PHP умеет больше.
|
||
Раздел «<link linkend="intro-whatcando">Что умеет PHP</link>»
|
||
даёт дополнительную информацию.
|
||
</para>
|
||
<para>
|
||
Веб-страницы с поддержкой PHP обрабатываются аналогично
|
||
HTML-страницам: PHP-страницы создают и редактируют аналогично
|
||
страницам на языке HTML-разметки.
|
||
</para>
|
||
|
||
<section xml:id="tutorial.firstpage">
|
||
<info><title>Первая страница на PHP</title></info>
|
||
<simpara>
|
||
Вначале потребуется установить PHP.
|
||
Инструкция по установке доступна
|
||
<link xlink:href="&url.php.downloads;">на странице загрузки</link>.
|
||
</simpara>
|
||
<para>
|
||
Теперь создадим файл с названием <filename>hello.php</filename>
|
||
и напишем внутри следующий код:
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>Первый скрипт на PHP: <filename>hello.php</filename></title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
echo "Привет, мир!";
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
В терминале перейдём в каталог, в котором содержится файл,
|
||
и запустим сервер разработки следующей командой:
|
||
</simpara>
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
php -S localhost:8000
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
Для доступа к файлу в браузере указывают URL-адрес,
|
||
который состоит из адреса веб-сервера и ссылки на файл: <literal>/hello.php</literal>.
|
||
Из команды, которую выполнили на предыдущем шаге, возьмём адрес веб-сервера и построим полный URL-адрес:
|
||
<literal>http://localhost:8000/hello.php</literal>.
|
||
При правильной конфигурации PHP обработает файл,
|
||
а браузер покажет вывод: "Привет, мир!".
|
||
</simpara>
|
||
<simpara>
|
||
PHP-интерпретатор умеет генерировать веб-страницы из исходного кода, в котором PHP-код встроили в HTML-разметку.
|
||
Поэтому PHP-инструкции записывают непосредственно внутри разметки будущего HTML-документа, как показывает следующий пример:
|
||
</simpara>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>Тестируем PHP</title>
|
||
</head>
|
||
<body>
|
||
<?php echo '<p>Привет, мир!</p>'; ?>
|
||
</body>
|
||
</html>
|
||
]]>
|
||
</programlisting>
|
||
<simpara>
|
||
Код сгенерирует следующий HTML-вывод:
|
||
</simpara>
|
||
<screen role="html">
|
||
<![CDATA[
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>Тестируем PHP</title>
|
||
</head>
|
||
<body>
|
||
<p>Привет, мир!</p>
|
||
</body>
|
||
</html>
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Эта программа чрезвычайно проста, и чтобы создать настолько простую
|
||
страницу, даже не обязательно запускать и писать код на PHP. Единственное, что делает программа, —
|
||
выводит строку <literal>Привет, мир!</literal> PHP-инструкцией
|
||
<function>echo</function>. Заметьте, что файл <emphasis>не требуется делать исполняемым</emphasis>
|
||
или ещё каким-то образом отличаться от других файлов.
|
||
Сервер знает, что этот файл требуется интерпретировать средствами PHP, поскольку
|
||
расширение файла — ".php", которое сервер настроен передавать PHP.
|
||
О PHP-файле думают как об обычном HTML-файле,
|
||
который содержит набор тегов, которые умеют делать много интересного.
|
||
</para>
|
||
|
||
<para>
|
||
Цель примера — показать формат PHP-тегов. Тег <literal><?php</literal> обозначает начало
|
||
PHP-кода. Затем идёт PHP-инструкция и тег <literal>?></literal>,
|
||
который заставляет парсер выйти из режима интерпретации PHP-кода.
|
||
Теги указывают в произвольном месте файла, когда требуется переключить режимы интерпретации PHP-кода и анализа HTML-разметки.
|
||
Подробнее о разборе исходного кода рассказывает раздел руководства
|
||
«<link linkend="language.basic-syntax">Основы синтаксиса</link>».
|
||
</para>
|
||
|
||
<note>
|
||
<info><title>Замечание о переводах строк</title></info>
|
||
<para>
|
||
У переводов строк небольшое значение в HTML-разметке, однако, HTML-разметка
|
||
с переносами выглядит аккуратной.
|
||
PHP автоматически удаляет переводы строки, которые идут сразу после закрывающего
|
||
тега <literal>?></literal>. Это может быть чрезвычайно полезно
|
||
при добавлении ряда блоков PHP-кода или при подключении PHP-файлов с PHP-кодом,
|
||
который ничего не выводит. Но иногда это сбивает
|
||
с толку. Можно поставить пробел после закрывающего тега
|
||
<literal>?></literal>, чтобы принудительно вывести пробел и перевод строки,
|
||
или можно явно добавить перевод строки в последний вызов
|
||
языковых конструкций echo или print из блока PHP-кода.
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<info><title>Кратко о текстовых редакторах</title></info>
|
||
<para>
|
||
PHP-файлы создают и редактируют в текстовых редакторах и интегрированных средах
|
||
разработки (IDE). Список отдельных редакторов содержит статья
|
||
<link xlink:href="&url.phpeditorlist;">Список PHP-редакторов</link>.
|
||
Попросите администратора страницы добавить редактор, который рекомендуете, в список.
|
||
Окажется полезным редактор с подсветкой синтаксиса.
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<info><title>Кратко о текстовых процессорах</title></info>
|
||
<para>
|
||
В текстовых процессорах наподобие StarOffice Writer, Microsoft Word и Abiword
|
||
неудобно редактировать PHP-файлы. Убедитесь, что сохраняете файл
|
||
в формате <emphasis>plain text</emphasis>, если изменяете тестовый скрипт
|
||
в таком редакторе, иначе не получится прочитать и выполнить PHP-скрипт.
|
||
</para>
|
||
</note>
|
||
|
||
<para>
|
||
Теперь, когда узнали основы языка, пора создать самый
|
||
знаменитый PHP-скрипт! Вызовите функцию <function>phpinfo</function> и увидите
|
||
много полезной информации о системе и настройке, например, доступные
|
||
<link linkend="language.variables.predefined">предопределённые переменные</link>,
|
||
загруженные PHP-модули и <link linkend="configuration">параметры настройки</link>.
|
||
Уделите время изучению этой важной информации.
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<info><title>Получение информации о системе средствами PHP</title></info>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
phpinfo();
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</section>
|
||
|
||
<section xml:id="tutorial.useful">
|
||
<info><title>Примеры кода</title></info>
|
||
<para>
|
||
Теперь напишем полезный код и узнаем, в каком браузере
|
||
посетитель просматривает страницу. Для этого проверим строку пользовательского
|
||
агента, которую браузер отправляет как часть HTTP-запроса. Информация об агенте содержится
|
||
в массиве, который хранится <link linkend="language.variables">в переменной</link>.
|
||
В PHP каждая переменная начинается со знака доллара, а значение отдельного элемента массива
|
||
в переменной получают по ключу. Извлечём строку пользовательского агента из элемента
|
||
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
<varname>$_SERVER</varname> — суперглобальная зарезервированная переменная,
|
||
которую PHP заполняет информацией о запросе, среде выполнения и серверном окружении.
|
||
Дополнительную информацию о таких переменных содержит раздел
|
||
«<link linkend="language.variables.superglobals">Суперглобальные переменные</link>».
|
||
</para>
|
||
</note>
|
||
<para>
|
||
Для вывода значения элемента массива, который хранится в переменной, напишем следующий код:
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<info><title>Вывод значения элемента массива</title></info>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
echo $_SERVER['HTTP_USER_AGENT'];
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
Пример вывода программы:
|
||
</para>
|
||
<screen role="html">
|
||
<![CDATA[
|
||
Mozilla/5.0 (Linux) Firefox/112.0
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
В PHP-переменных хранят числа, строки, массивы и значения других <link linkend="language.types">типов</link>.
|
||
Тип значения, элемент которого выводил код предыдущего примера, называется <link linkend="language.types.array">массивом</link>.
|
||
Массивы полезны для хранения значений произвольных типов.
|
||
</para>
|
||
<para>
|
||
Переменная <varname>$_SERVER</varname> — только один пример переменной,
|
||
к которой PHP автоматически открывает доступ. Список таких переменных приводит раздел
|
||
«<link linkend="reserved.variables">Зарезервированные переменные</link>»
|
||
или вывод функции <function>phpinfo</function>, которую приводил
|
||
как пример предыдущий раздел.
|
||
</para>
|
||
<para>
|
||
В PHP-тег разрешается помещать больше одной инструкции и создавать
|
||
небольшие блоки кода, которые делают больше, чем простой вызов инструкции echo.
|
||
Например, если требуется проверить, что используется браузер Firefox,
|
||
делают так:
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<info><title>Пример использования <link linkend="language.control-structures">управляющих
|
||
структур</link> и <link linkend="language.functions">функций</link></title></info>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
|
||
echo 'Вы пользуетесь браузером Firefox.';
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
Пример вывода программы:
|
||
</para>
|
||
<screen role="html">
|
||
<![CDATA[
|
||
Вы пользуетесь браузером Firefox.
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Здесь вводится ряд новых понятий. Во-первых, в коде появилась инструкция
|
||
<link linkend="control-structures.if">if</link>. Если вы знакомы с основами синтаксиса
|
||
языка C, код выглядит для вас логичным. Иначе, вероятно, лучше взять книгу об основах языка PHP
|
||
и прочитать одну-две начальных главы или почитать раздел «<link
|
||
linkend="langref">Справочник языка</link>» этого руководства.
|
||
</para>
|
||
<para>
|
||
Во-вторых, в коде появился вызов функции <function>str_contains</function>.
|
||
Функция <function>str_contains</function> — встроенная в PHP функция, которая определяет,
|
||
содержит ли строка другую строку. В примере функция ищет строку
|
||
<literal>«Firefox»</literal> (т. н. «иголку», или needle)
|
||
в элементе <varname>$_SERVER['HTTP_USER_AGENT']</varname> (в т. н. «стоге сена»,
|
||
или haystack). Если функция нашла «иголку» в «стоге сена», она возвращает логическое значение
|
||
&true;. Иначе функция возвращает логическое значение &false;.
|
||
Если функция вернёт &true;, то условие в
|
||
выражении конструкции <link linkend="control-structures.if">if</link> окажется истинным (&true;),
|
||
а PHP выполнит код в фигурных скобках {}. Иначе код
|
||
не выполняется. Попробуйте создать аналогичные примеры с использованием
|
||
инструкций <link linkend="control-structures.if">if</link> и
|
||
<link linkend="control-structures.else">else</link>, а также других функций
|
||
наподобие <function>strtoupper</function> и <function>strlen</function>.
|
||
Каждая страница руководства также содержит примеры.
|
||
Почитайте страницу руководства о том, <link linkend="about.prototypes">
|
||
как читать определения функций</link>, и раздел
|
||
<link linkend="language.functions">о PHP-функциях</link>,
|
||
если не знаете, как использовать функции.
|
||
</para>
|
||
<para>
|
||
Пойдем дальше и покажем, как переходить в режим PHP и выходить
|
||
из режима интерпретации даже в середине блока PHP-кода:
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<title>Смешение режимов HTML и PHP</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
|
||
?>
|
||
<h3>Функция str_contains() вернула значение true</h3>
|
||
<p>Вы просматриваете страницу в браузере Firefox.</p>
|
||
<?php
|
||
} else {
|
||
?>
|
||
<h3>Функция str_contains() вернула значение false</h3>
|
||
<p>Ваш браузер не похож на Firefox.</p>
|
||
<?php
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
Пример вывода данной программы:
|
||
</para>
|
||
<screen role="html">
|
||
<![CDATA[
|
||
<h3>Функция str_contains() вернула значение true</h3>
|
||
<p>Вы просматриваете страницу в браузере Firefox.</p>
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Вместо вывода текста инструкцией echo, мы вышли из режима
|
||
интерпретации PHP-кода и написали HTML-разметку.
|
||
Логическая последовательность выполнения PHP-кода при этом сохраняется:
|
||
PHP отправит пользователю только один блок HTML-разметки
|
||
на основе значения, которое вернёт функция <function>str_contains</function>
|
||
по результатам поиска подстроки <literal>Firefox</literal>.
|
||
</para>
|
||
</section>
|
||
|
||
<section xml:id="tutorial.forms">
|
||
<info><title>Работа с формами</title></info>
|
||
<para>
|
||
Список преимуществ PHP дополняет способ обработки HTML-форм.
|
||
Основа заключается в том, что PHP-скрипт автоматически получает доступ к каждому элементу формы.
|
||
Подробнее о работе с формами в PHP рассказывает раздел
|
||
«<link linkend="language.variables.external">Переменные из внешних источников</link>». Вот пример HTML-формы:
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<info><title>Простейшая HTML-форма</title></info>
|
||
<programlisting role="html">
|
||
<![CDATA[
|
||
<form action="action.php" method="post">
|
||
<label for="name">Имя:</label>
|
||
<input name="name" id="name" type="text">
|
||
|
||
<label for="age">Возраст:</label>
|
||
<input name="age" id="age" type="number">
|
||
|
||
<button type="submit">Отправить</button>
|
||
</form>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
В этой форме нет ничего особенного. Это обычная HTML-форма без каких-либо
|
||
специальных тегов. Когда пользователь заполнит форму и нажмёт кнопку
|
||
отправки, PHP вызовет страницу <filename>action.php</filename>.
|
||
В файле пишут что-то вроде этого:
|
||
</para>
|
||
<para>
|
||
<example>
|
||
<info><title>Выводим данные формы</title></info>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
Привет, <?php echo htmlspecialchars($_POST['name']); ?>.
|
||
Тебе <?php echo (int) $_POST['age']; ?> лет.
|
||
]]>
|
||
</programlisting>
|
||
<para>
|
||
Пример вывода программы:
|
||
</para>
|
||
<screen role="html">
|
||
<![CDATA[
|
||
Привет, Сергей. Тебе 30 лет.
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Кроме частей, в которых вызывается функция <function>htmlspecialchars</function>
|
||
и приводится тип <literal>(int)</literal>, понятно, что делает код.
|
||
Функция <function>htmlspecialchars</function> гарантирует, что специальные HTML-символы
|
||
правильно закодировались, поэтому люди не смогут внедрить HTML-теги или Javascript-код
|
||
на страницу. Поскольку известно, что поле age — число, можно просто
|
||
<link linkend="language.types.typecasting">преобразовать</link> значение в целое число (<type>int</type>),
|
||
что автоматически избавит нас от случайных символов. PHP также может сделать это
|
||
автоматически через модуль <link linkend="ref.filter">filter</link>. PHP автоматически
|
||
устанавливает переменные в элементах <varname>$_POST['name']</varname> и <varname>$_POST['age']</varname>.
|
||
Раньше мы использовали суперглобальную переменную <varname>$_SERVER</varname>, а здесь мы точно так же
|
||
используем суперглобальную переменную <varname>$_POST</varname>, которая содержит
|
||
POST-данные. Обратите внимание, что для атрибута <emphasis>method</emphasis>
|
||
в форме установили значение POST. Если бы указали метод <emphasis>GET</emphasis>,
|
||
информацию формы содержала бы суперглобальная переменная <varname>$_GET</varname>.
|
||
В коде также обращаются к суперглобальной переменной <varname>$_REQUEST</varname>,
|
||
если источник данных запроса не имеет значения. Эта переменная содержит объединенную информацию
|
||
о GET-, POST- и COOKIE-данных.
|
||
</para>
|
||
</section>
|
||
|
||
<section xml:id="tutorial.whatsnext">
|
||
<info><title>Что дальше?</title></info>
|
||
<para>
|
||
Новые знания помогут понять бо́льшую часть руководства
|
||
и примеры скриптов.
|
||
</para>
|
||
<para>
|
||
Сайт с материалами PHP-конференций содержит слайд-презентации,
|
||
которые подробнее рассказывают о возможностях PHP:
|
||
<link xlink:href="&url.php.talks;">&url.php.talks;</link>
|
||
</para>
|
||
</section>
|
||
</chapter><!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|