1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 16:52:12 +01:00
Files
archived-doc-ru/chapters/tutorial.xml
2024-06-24 15:44:30 +03:00

472 lines
27 KiB
XML
Raw 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: 46ffb4b3fa11ea5733de780a8bcc211d8dc3d92b 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-страницы, их создают и редактируют так же,
как обычные страницы на языке HTML-разметки.
</para>
<section xml:id="tutorial.requirements">
<info><title>Что мне потребуется?</title></info>
<para>
Руководство предполагает, что на сервере уже активировали
поддержку PHP, и что файлы, имена которых заканчиваются на <filename>.php</filename>,
обрабатывает PHP. На большей части серверов PHP-файлы обрабатывает модуль по умолчанию
для PHP-файлов, но всё равно лучше попросить администратора сервера
проверить это. Итак, если сервер поддерживает PHP, то ничего делать
не нужно. Просто создавайте файлы <filename>.php</filename>
и размещайте их в каталоге веб-сервера — они будут обрабатываться
автоматически. Не нужно ничего компилировать или устанавливать
дополнительные инструменты. Думайте о PHP-файлах как о простых HTML-файлах
с набором новых «волшебных» тегов, которые умеют делать всё, что требуется.
</para>
<para>
Например, требуется сэкономить на интернет-канале и вести разработку локально.
Тогда потребуется установить веб-сервер наподобие <link
xlink:href="&url.apache;">Apache</link>, и, разумеется, <link
xlink:href="&url.php.downloads;">PHP</link>. Скорее всего, потребуется
установить базу данных, например, <link xlink:href="&url.mysql.docs;">MySQL</link>.
</para>
<para>
Всё это можно установить по-отдельности или поступить проще:
руководство приводит <link linkend="install">инструкции по установке PHP</link>
(предполагается, что веб-сервер уже установили). Если при установке PHP
возникли проблемы, задайте вопросы через
<link xlink:href="&url.php.mailing-lists;">список рассылки по вопросам
установки</link>. Если же выбрали более простой способ,
<link xlink:href="&url.installkits;">найдите уже настроенный пакет</link>
для своей операционной системы, который автоматически установит всё
перечисленное за несколько щелчков мыши. Веб-сервер с поддержкой PHP
легко настроить в любой операционной системе, включая Mac OS X, Linux и Windows.
На Linux для поиска RPM-пакетов, возможно, пригодятся страницы
<link xlink:href="&url.rpmfind;">rpmfind</link> и <link xlink:href="&url.rpmfind.pbone;">PBone</link>.
Страница <link xlink:href="&url.apt-get;">apt-get</link>
помогает в поиске пакетов для ОС Debian.
</para>
</section>
<section xml:id="tutorial.firstpage">
<info><title>Первая страница на PHP</title></info>
<para>
Создайте файл с именем <filename>hello.php</filename> в корневом каталоге веб-сервера
(<varname>DOCUMENT_ROOT</varname>) и запишите в него следующее:
</para>
<para>
<example>
<title>Первый скрипт на PHP: <filename>hello.php</filename></title>
<programlisting role="php">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>Тестируем PHP</title>
</head>
<body>
<?php echo '<p>Привет, мир!</p>'; ?>
</body>
</html>
]]>
</programlisting>
<simpara>
Откройте файл в браузере, для этого наберите имя веб-сервера
и название файла <literal>/hello.php</literal>. При локальной разработке эта ссылка
может быть чем-то вроде <literal>http://localhost/hello.php</literal>
или <literal>http://127.0.0.1/hello.php</literal>, но это зависит
от настроек сервера. Если всё настроили правильно, PHP обработает
этот файл, а браузер выведет следующий текст:
</simpara>
<screen role="html">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>Тестируем PHP</title>
</head>
<body>
<p>Привет, мир!</p>
</body>
</html>
]]>
</screen>
</example>
</para>
<para>
Эта программа чрезвычайно проста, и чтобы создать настолько простую
страницу, даже не обязательно запускать и писать код на PHP. Всё, что делает программа, —
выводит строку <literal>Hello World</literal> через PHP-инструкцию
<function>echo</function>. Заметьте, что файл <emphasis>не обязан быть
исполняемым</emphasis> или ещё каким-то образом отличаться от других файлов.
Сервер знает, что этот файл требуется интерпретировать средствами PHP, поскольку
расширение файла — «.php», которое сервер настроен передавать PHP.
О PHP-файле думают как об обычном HTML-файле,
который содержит набор тегов, которые умеют делать много интересного.
</para>
<para>
Если пример ничего не вывел, появилось окно загрузки файла
или код отображается как обычный текст, скорее всего,
на веб-сервере не включили PHP или неправильно сконфигурировали сервер.
Попросите администратора сервера включить такую поддержку.
Предложите администратору инструкцию по установке: раздел «<link linkend="install">Установка и настройка</link>».
Если разработка ведётся локально,
также прочтите главу об установке, чтобы точно знать, что всё настроили правильно.
Убедитесь также, что файл запрашивается с сервера, который отдаёт данные вывода, через HTTP-протокол.
Если просто обратиться к файлу из файловой системы, PHP не будет его обрабатывать.
Обращайтесь к <link xlink:href="&url.php.support;">способам поддержи</link> PHP-программистов,
если ошибки всё равно остаются.
</para>
<para>
Цель примера — показать формат PHP-тегов. В примере
мы указали <literal>&lt;?php</literal>, чтобы обозначить начало
PHP-тега. Затем мы поместили PHP-инструкцию и вышли из режима PHP,
добавив завершающий тег <literal>?&gt;</literal>. Так можно входить
и выходить из режима 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>простой текст</emphasis> (plain text), если редактируете тестовый скрипт
в каком-то из них, иначе PHP не сумеет прочитать и запустить скрипт.
</para>
</note>
<para>
Теперь, когда работающий PHP-скрипт успешно создали, самое время создать самый
знаменитый 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-переменная,
которая содержит информацию, которую 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>
Вместо вызова PHP-инструкции echo для вывода текста, мы вышли из режима
PHP и просто отправили HTML-код. Важный момент здесь состоит в том, что логическая
структура 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>
<para>
PHP также умеет работать с входными данными XForms-форм,
хотя вы найдёте работу с обычными HTML-формами комфортной уже через некоторое время.
Хотя работа с формами, которые составили по технологии XForms, — не для новичков,
они могут вас заинтересовать. Раздел о возможностях языка PHP
также содержит <link linkend="features.xforms">короткое введение в обработку данных
форм XForms</link>.
</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
-->