1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00
Files
archived-doc-ru/chapters/tutorial.xml
2026-01-12 09:14:49 +03:00

433 lines
23 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>&lt;?php</literal> обозначает начало
PHP-кода. Затем идёт PHP-инструкция и тег <literal>?&gt;</literal>,
который заставляет парсер выйти из режима интерпретации PHP-кода.
Теги указывают в произвольном месте файла, когда требуется переключить режимы интерпретации PHP-кода и анализа HTML-разметки.
Подробнее о разборе исходного кода рассказывает раздел руководства
«<link linkend="language.basic-syntax">Основы синтаксиса</link>».
</para>
<note>
<info><title>Замечание о переводах строк</title></info>
<para>
У переводов строк небольшое значение в HTML-разметке, однако, HTML-разметка
с переносами выглядит аккуратной.
PHP автоматически удаляет переводы строки, которые идут сразу после закрывающего
тега <literal>?&gt;</literal>. Это может быть чрезвычайно полезно
при добавлении ряда блоков PHP-кода или при подключении PHP-файлов с PHP-кодом,
который ничего не выводит. Но иногда это сбивает
с толку. Можно поставить пробел после закрывающего тега
<literal>?&gt;</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
-->