автордың кітабын онлайн тегін оқу Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5
Переводчик Л. Киселева
Робин Никсон
Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 7-е изд. . — Астана: "Спринт Бук", 2025.
ISBN 978-601-12-3658-4
© ТОО "Спринт Бук", 2025
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Посвящается всем читателям, которые вносили свои идеи и предложения, исправляли ошибки и другими способами помогали поддерживать книгу в актуальном состоянии на протяжении семи изданий начиная с 2009 года. Я благодарю вас за преданность языку PHP и связанным с ним технологиям, которые описываются в этой книге, и прошу: продолжайте присылать свои отзывы.
Предисловие
Сочетание PHP и MySQL — самый удобный подход к созданию динамических веб-приложений, основанных на использовании баз данных. Он удерживает свои позиции, несмотря на вызовы, брошенные другими интегрированными средами разработки, освоение которых дается значительно труднее. Благодаря открытости исходных кодов его можно использовать совершенно бесплатно, поэтому он очень популярен у веб-разработчиков.
Любой потенциальный разработчик, использующий платформу UNIX/Linux или даже Windows, должен освоить эти технологии. В сочетании с партнерскими технологиями JavaScript, React, CSS и HTML5 можно создавать сайты калибра таких промышленных стандартов, как Facebook, Reddit, TikTok и Gmail.
Для кого предназначена эта книга
Книга предназначена для тех, кто хочет изучить способы создания эффективных и динамичных сайтов. Сюда можно отнести веб-мастеров или специалистов по графическому дизайну, которые уже освоили создание статических веб-сайтов или CMS, таких как WordPress, и у которых есть желание вывести свое мастерство на следующий уровень, а также студентов вузов и колледжей, недавних выпускников этих учебных заведений и просто энтузиастов.
Фактически любой, кто стремится изучить основные принципы, заложенные в основу адаптивного веб-дизайна, сможет получить подробные сведения об основных технологиях: PHP, MySQL, JavaScript, CSS и HTML5, освоить основы библиотеки React и узнать, как использовать Node.js для разработки серверных сценариев на JavaScript.
Предположения, допущенные в книге
При написании книги автор предполагал, что читатель уже имеет элементарные понятия об HTML и способен как минимум скомпоновать простой статический сайт. Но при этом не обязательно наличие у читателя каких-либо знаний в области PHP, MySQL, JavaScript, CSS и HTML5, хотя, если такие знания имеются, изучение материала будет происходить значительно быстрее.
Структура издания
Главы книги следуют в определенном порядке. Сначала делается краткий обзор всех основных технологий, которые рассматриваются в книге, а затем описывается процесс их установки на сервер, предназначенный для разработки веб-приложений, чтобы подготовить читателя к практической работе с примерами.
В первой части описываются основы языка программирования PHP, включая основы синтаксиса, массивов, функций и объектно-ориентированного программирования.
За описанием основ PHP следует введение в систему управления базами данных MySQL, которое начинается знакомством со структурой базы данных MySQL и заканчивается составлением сложных запросов.
После этого рассказывается, как объединить PHP и MySQL и приступить к созданию собственных динамических веб-страниц, интегрирующих формы и использующих другие возможности HTML. Затем будут рассмотрены подробности практических аспектов разработки на PHP и MySQL, включая описание различных полезных функций и способов работы с cookies и сессиями, а также способов поддержания высокого уровня безопасности.
В следующих нескольких главах даются основы JavaScript, начиная с простых функций и обработки событий и заканчивая доступом к объектной модели документа (DOM), проверкой ввода пользователя и обработкой ошибок в браузере. Здесь же будет представлено обстоятельное руководство по использованию популярной библиотеки React для JavaScript.
После рассмотрения основных технологий описываются способы создания фоновых Ajax-вызовов и превращения сайтов в высокодинамичную среду.
После этого вам предстоит узнать, как использовать CSS для стилевого оформления и подбора формата ваших веб-страниц, прежде чем будут раскрыты приемы существенного снижения трудозатрат по разработке приложений с помощью библиотеки React, и как можно использовать Node.js вместо PHP и веб-сервера Apache для разработки серверных сценариев на JavaScript. Получив все эти сведения, вы сможете создать полноценный набор программ, в совокупности представляющий собой работоспособный сайт социальной сети.
По мере изложения материала дается большое количество указаний и советов по выработке хорошего стиля программирования, а также подсказок, которые помогут вам выявлять и устранять скрытые ошибки программирования. Кроме того, делается много ссылок на сайты с дополнительными материалами, относящимися к рассматриваемым темам.
Условные обозначения
В книге применяются следующие условные обозначения.
Курсив
Курсивом выделены новые термины.
Моноширинный шрифт
Используется для листингов программ, а также внутри абзацев для обозначения таких элементов, как функции, базы данных, типы данных, переменные среды, операторы и ключевые слова, имена файлов и их расширений, команд и параметров командной строки, переменных и других кодовых элементов, тегов HTML и содержимого файлов, названий путей, утилит Unix, названий таблиц и столбцов.
Моноширинный жирный шрифт
Показывает команды или другой текст, который пользователь должен ввести самостоятельно.
Моноширинный курсив
Показывает текст, который должен быть заменен значениями, введенными пользователем, или значениями, определяемыми контекстом.
Шрифт без засечек
Используется для обозначения URL, адресов электронной почты, названий меню, параметров, кнопок, каталогов.
Так обозначаются замечания общего характера.
Так обозначаются предупреждения или предостережения.
Использование примеров кода
Вспомогательные материалы (вместе со всеми примерами кода) доступны для загрузки на сайте GitHub (https://github.com/RobinNixon/lpmj7) вместе со следующими дополнительными главами в формате PDF.
• Дополнительная глава 1 «Введение в CSS» (https://oreil.ly/H9YTV).
• Дополнительная глава 2 «Введение в jQuery» (https://oreil.ly/bfjgQ).
• Дополнительная глава 3 «Введение в jQuery Mobile» (https://oreil.ly/OAZ65).
• Дополнительная глава 4 «Введение в HTML5» (https://oreil.ly/kFP8K).
• Дополнительная глава 5 «Холсты HTML5» (https://oreil.ly/Dwr0y).
• Дополнительная глава 6 «Аудио и видео в HTML5» (https://oreil.ly/LWijz).
• Дополнительная глава 7 «Другие возможности HTML5» (https://oreil.ly/fDzNZ).
• Дополнительная глава 8 «Что нового в PHP 8 и MySQL 8» (https://oreil.ly/wR_XH).
В общем случае все примеры кода из книги вы можете использовать в своих программах и в документации. Вам не нужно обращаться в издательство за разрешением, если вы не собираетесь воспроизводить существенные части программного кода. Если вы разрабатываете программу и используете в ней несколько фрагментов кода из книги, вам не нужно обращаться за разрешением. Но для продажи или распространения примеров из книги вам потребуется разрешение от издательства O’Reilly. Вы можете отвечать на вопросы, цитируя данную книгу или примеры из нее, но для включения существенных объемов программного кода из книги в документацию вашего продукта потребуется разрешение.
Мы рекомендуем, но не требуем добавлять ссылку на первоисточник при цитировании. Под ссылкой на первоисточник мы подразумеваем указание авторов, издательства и ISBN.
За получением разрешения на использование значительных объемов программного кода из книги обращайтесь по адресу permissions@oreilly.com.
Благодарности
Хочу выразить благодарность старшему редактору по сбору контента Аманде Куинн, редакторам по разработке контента Рите Фернандо и Мишель Кронин и всем, кто приложил немало усилий для выхода этой книги, в том числе Майклу Шпачеку и Дэвиду Макки за всеобъемлющую техническую рецензию, Майклу Шпачеку — за помощь в выпуске книги, Элизабет Фаерм — за общее руководство, Бет Ричардс — за редактуру, Ким Кофер — за корректуру, Сью Клефстад — за создание указателя, Карен Монтгомери — за великолепную сахарную сумчатую летягу на обложке книги, Сьюзан Браун — за последний вариант обложки книги, моему главному редактору Энди Орам — за проверку первых пяти изданий, а также множеству других людей — их так много, что невозможно перечислить имена, — отправивших сообщения о замеченных ошибках и высказавших свои предложения относительно этого нового издания.
От издательства
Ваши замечания, предложения, вопросы отправляйте по адресу comp@sprintbook.kz (издательство SprintBook, компьютерная редакция).
Мы будем рады узнать ваше мнение!
Глава 1. Введение в динамическое содержимое веб-страницы
Всемирная паутина — это непрерывно развивающаяся сеть, ушедшая далеко вперед от своей концепции начала 1990-х, когда ее создание было обусловлено решением конкретных задач. Высокотехнологичные эксперименты в ЦЕРНе (Европейском центре физики высоких энергий, известном в наши дни в качестве обладателя Большого адронного коллайдера) выдавали невероятно большой объем данных, который был слишком велик для распространения среди участвующих в экспериментах ученых, разбросанных по всему миру.
К тому времени интернет уже существовал и к нему было подключено несколько сотен тысяч компьютеров, поэтому Тим Бернерс-Ли (специалист ЦЕРНа) придумал способ навигации между ними с использованием среды гиперссылок — так называемого протокола передачи гиперссылок (Hyper Text Transfer Protocol — HTTP). Он также создал специальный язык разметки, названный языком гипертекстовой разметки (Hyper Text Markup Language — HTML). Для того чтобы собрать все это воедино, он создал первый браузер и веб-сервер.
Появление Web 1.0
Название Web 1.0 появилось, только когда был придуман термин Web 2.0. В эпоху Web 1.0 большинство пользователей были потребителями контента. Конечно, существовали отдельные персональные веб-страницы, но социальных сетей в ту пору еще не было. Вместо разделов для комментариев использовались гостевые книги. Некоторые сайты уже использовали базы данных, но ресурсы сервера и пропускная способность были очень ограниченны. Навигация между страницами в Web 1.0 осуществлялась с помощью простых кнопок, компоновка содержимого — с помощью графики, и перечень доступных взаимодействий был весьма ограничен.
Теперь эти средства воспринимаются нами как данность, но в то время концепция их применения носила революционный характер. До этого основной объем соединений приходился на пользователей домашних модемов, дозванивавшихся и подключавшихся к электронным доскам объявлений, которые базировались на отдельном компьютере и позволяли общаться и обмениваться данными только с другими пользователями данной службы. Следовательно, для эффективного электронного общения с коллегами и друзьями нужно было становиться участником многих электронных досок объявлений.
Но Бернерс-Ли изменил все это одним махом, и к середине 1990-х годов уже существовали три основных конкурирующих друг с другом графических браузера, пользовавшихся вниманием 5 млн посетителей. Однако вскоре стало очевидно, что кое-что было упущено. Конечно, текстовые и графические страницы, имеющие гиперссылки для перехода на другие страницы, были блестящей концепцией, но результаты не отражали текущего потенциала компьютеров и интернета по удовлетворению насущных потребностей пользователей в динамическом изменении контекста. Всемирная паутина оставляла весьма невыразительное впечатление даже при наличии прокрутки текста и анимированных GIF-картинок.
Корзины покупателей, поисковые машины и социальные сети внесли существенные коррективы в порядок использования Всемирной паутины. В этой главе будет дан краткий обзор различных компонентов, формирующих ее облик, и программного обеспечения, способствующего обогащению и оживлению наших впечатлений от ее использования.
Пришло время воспользоваться аббревиатурами. Прежде чем делать это, я старался дать им четкое объяснение. Но если сразу не удастся разобраться, какое именно понятие они замещают или что означают, переживать не стоит, поскольку все подробности прояснятся по мере чтения книги.
HTTP и HTML: основы, заложенные Бернерсом-Ли
HTTP представляет собой стандарт взаимодействия, регулирующий порядок направления запросов и получения ответов — процесса, происходящего между браузером, запущенным на компьютере конечного пользователя, и веб-сервером. Задача сервера состоит в том, чтобы принять запрос от клиента и попытаться дать на него содержательный ответ, обычно передавая ему запрошенную веб-страницу. Именно поэтому и используется термин «сервер» («обслуживающий»). Партнером, взаимодействующим с сервером, является клиент, поэтому данное понятие применяется как к браузеру, так и к компьютеру, на котором он работает.
Между клиентом и сервером может располагаться ряд других устройств, например маршрутизаторы, прокси-серверы, шлюзы и т.д. Они выполняют различные задачи по обеспечению безошибочного перемещения запросов и ответов между клиентом и сервером. Как правило, для отправки этой информации используется интернет. Некоторые из этих промежуточных устройств могут также ускорить интернет путем локального сохранения страниц или информации в так называемом кэше, обслуживая затем данное содержимое для клиентов непосредственно из кэша, без извлечения его из сервера-источника.
Обычно веб-сервер может обрабатывать сразу несколько подключений, а при отсутствии связи с клиентом он находится в режиме ожидания входящего запроса. Когда он приходит, сервер отправляет ответ.
Процедура «запрос — ответ»
В наиболее общем виде процесс «запрос — ответ» состоит из просьбы браузера или другой платформы к веб-серверу отправить ему веб-страницу, а сервер отправляет страницу обратно. После этого браузер занимается отображением или рендерингом страницы (рис. 1.1).
Рис. 1.1. Основная последовательность процесса «запрос — ответ» между клиентом и сервером
При этом соблюдается такая последовательность действий.
1. Вы вводите в адресную строку браузера http://server.com.
2. Ваш браузер ищет IP-адрес, соответствующий доменному имени server.com.
3. Браузер посылает запрос на отправку главной страницы server.com.
4. Запрос проходит по интернету и поступает на веб-сервер server.com.
5. Веб-сервер, получив запрос, ищет веб-страницу на своем жестком диске.
6. Сервер извлекает веб-страницу и отправляет ее по обратному маршруту браузеру.
7. Браузер отображает веб-страницу.
При передаче типовой веб-страницы этот процесс также осуществляется для каждого имеющегося на ней объекта: элемента графики, встроенного видеоролика или шаблона CSS.
Обратите внимание на то, что на шаге 2 браузер ищет IP-адрес, принадлежащий доменному имени server.com. У каждой машины, подключенной к интернету, включая и ваш компьютер, есть свой IP-адрес. Но, как правило, доступ к веб-серверам осуществляется по именам, таким как google.com. Браузер обращается к вспомогательной интернет-службе, так называемой системе доменных имен (Domain Name System — DNS), чтобы найти связанный с сервером IP-адрес, а затем воспользоваться им для связи с компьютером.
При передаче динамических веб-страниц процедура состоит из большего количества действий, поскольку к ней могут привлекаться как PHP, так и MySQL. Например, можно щелкнуть кнопкой мыши на картинке с изображением плаща. После этого PHP составит запрос, используя стандартный язык базы данных, SQL — множество используемых для этого команд будет рассмотрено в данной книге, — и отправит запрос в адрес MySQL-сервера. Этот сервер вернет информацию о выбранном вами плаще, и PHP-код заключит ее в некий код HTML, который будет отправлен сервером в адрес вашего браузера (рис. 1.2).
Выполняется такая последовательность действий.
1. Вы вводите в адресную строку браузера http://server.com.
2. Браузер ищет IP-адрес, соответствующий доменному имени server.com.
3. Браузер посылает запрос на отправку главной страницы server.com.
4. Запрос проходит по интернету и поступает на веб-сервер server.com.
5. Веб-сервер, получив запрос, ищет веб-страницу на своем жестком диске.
6. Теперь, когда главная страница размещена в его памяти, веб-сервер замечает, что она представлена файлом, включающим в себя PHP-сценарии, и передает страницу интерпретатору PHP.
7. Интерпретатор PHP выполняет PHP-код.
8. Кое-какие фрагменты кода PHP содержат SQL-инструкции, которые интерпретатор PHP, в свою очередь, передает процессору базы данных MySQL.
9. База данных MySQL возвращает результаты выполнения инструкций интерпретатору PHP.
10. Интерпретатор PHP возвращает веб-серверу результаты выполнения кода PHP, а также данные, полученные из базы данных MySQL.
11. Веб-сервер возвращает страницу выдавшему запрос клиенту, который отображает эту страницу на экране.
Рис. 1.2. Динамическая последовательность процесса «запрос — ответ», выполняемого клиентом и сервером
Конечно, полезно знать этапы этого процесса и как работают вместе три элемента, но на практике эти подробности не понадобятся, поскольку все происходит автоматически.
В каждом из примеров возвращенные браузеру HTML-страницы могут содержать также код JavaScript, интерпретируемый локально на машине клиента, который, в свою очередь, может инициировать еще один запрос.
Преимущества использования PHP, MySQL, JavaScript, CSS и HTML
В начале этой главы был представлен мир технологии Web 1.0, но рывок к созданию технологии Web 1.1, вместе с которой были разработаны такие браузерные расширения, как Java, JavaScript, Flash и ActiveX, не заставил себя долго ждать. На серверной стороне прогресс был обеспечен за счет общего шлюзового интерфейса (Common Gateway Interface, CGI), использования таких языков сценариев, как Perl (альтернатива языку PHP), и выполнения сценариев на стороне сервера — динамической вставки содержимого одного файла (или выходных данных выполняемой локальной программы) в другой файл.
Когда ситуация окончательно прояснилась, на передовых позициях остались три основные технологии. Несмотря на то что язык сценариев Perl силами своих стойких приверженцев сохранил популярность, простота PHP и допустимость использования в нем встроенных ссылок на программу базы данных MySQL обеспечили этому языку более чем двойное превосходство по количеству пользователей. А JavaScript, ставший важнейшей составной частью уравнения, используемого для динамического манипулирования HTML, в настоящее время берет на себя наиболее трудоемкие задачи осуществления асинхронного обмена данными (осуществляемого между клиентом и сервером после загрузки веб-страницы). Используя асинхронный обмен данными, веб-страницы обрабатывают данные и отправляют запросы веб-серверу в фоновом режиме, не оповещая пользователя о происходящем.
Несомненно, своеобразный симбиоз PHP и MySQL способствует их продвижению, но что привлекает к ним разработчиков в первую очередь? Ответ прост: та легкость, с какой эти технологии можно использовать для быстрого создания на сайтах динамических элементов. MySQL является быстродействующей и мощной, но при этом простой в использовании системой баз данных, предлагающей сайту практически все необходимое для поиска и обработки данных, которые предназначены для браузеров.
И когда вы так же соедините вместе JavaScript и CSS, у вас появится рецепт для создания высокодинамичных и интерактивных сайтов, особенно в современных условиях, когда доступно множество сложных функциональных фреймворков JavaScript, способных ускорить веб-разработку. К ним относится широко известный jQuery, который до недавнего времени был для программистов одним из наиболее распространенных средств доступа к функциям асинхронного обмена данными.
Кроме того, быстро набирает популярность более свежая JavaScript-библиотека React. В настоящее время это один из наиболее широко загружаемых и используемых фреймворков. Он распространен настолько, что на момент написания этих строк на сайте с предложениями работы Indeed числится намного больше вакансий для разработчиков React, чем для разработчиков jQuery.
React предлагает самые современные функциональные возможности для реализации сложных взаимодействий пользовательского интерфейса с сервером в реальном времени с помощью сценариев JavaScript на веб-страницах. Она позволяет создавать компоненты, являющиеся строительными блоками приложений React.
Компонент React (https://oreil.ly/iyLLS) может быть чем угодно в веб-приложении: кнопкой, текстом, меткой, таблицей и даже чем-то более сложным, например виджетом регистрации в системе или всплывающим модальным окном с кнопками управления. React также имеет возможность подготовки на стороне сервера информации, отображаемой компонентами, поддерживая такие инструменты, как Next.js (https://nextjs.org). React даже можно использовать в существующих приложениях (библиотека предусматривает такую возможность). Вы можете попробовать изменить небольшую часть существующего приложения, задействовав React, и если это изменение даст положительный результат, то вы сможете начать переводить на React.js все свое приложение. Однако для такой итеративной реализации можно использовать и другие фреймворки, такие как Vue.js.
MariaDB: клон MySQL
После того Oracle (корпорация, занимающаяся разработкой систем управления базами данных) приобрела Sun Microsystems (владельца MySQL), возникли опасения, что она закроет исходный код MySQL. Поэтому от этой СУБД отпочковалась MariaDB, дабы код оставался открытым в соответствии с положениями лицензии GNU GPL, которая гарантирует пользователям свободу запускать, изучать, изменять программное обеспечение и делиться им. Разработка MariaDB шла под руководством ряда первоначальных создателей MySQL, и эта СУБД сохранила максимальную совместимость с MySQL. Поэтому вероятность встречи на некоторых серверах MariaDB вместо MySQL весьма высока, что не вызывает никаких опасений, поскольку все продемонстрированное в данной книге одинаково успешно работает и с MySQL, и с MariaDB. Для любых целей одна СУБД может заменяться другой, и вы при этом не заметите никакой разницы.
Впрочем, вышло так, что многие возникшие поначалу опасения были напрасны, поскольку код MySQL остался открытым, а Oracle просто сделала платными приобретение и поддержку тех выпусков, которые предоставляют дополнительные функциональные возможности, включающие георепликацию и автоматическое масштабирование. Тем не менее, в отличие от MariaDB, MySQL больше не поддерживается сообществом, но осознание того, что MariaDB никогда не лишится этой поддержки, позволит многим разработчикам спать спокойно и, вероятно, даст гарантии того, что код самой MySQL останется открытым.
PHP
Использование PHP существенно упрощает встраивание средств, придающих веб-страницам динамические свойства. Когда страницам присваивается расширение .php, у них появляется прямой доступ к языку сценариев. Разработчику нужно лишь написать код, похожий на этот:
<?php
echo " Сегодня " . date('T') . ". ";
?>
Последние новости.
Открывающий тег <?php дает веб-серверу разрешение на интерпретацию всего последующего кода вплоть до тега ?>. Все, что находится за пределами этой конструкции, отправляется клиенту в виде простого HTML. Поэтому текст Последние новости просто выводится в браузер. А внутри PHP-тегов встроенная функция date() отображает текущий день недели, соответствующий системному времени сервера.
В итоге на выходе из этих двух частей получается примерно следующее:
Сегодня Wednesday. Последние новости.
PHP — довольно гибкий язык, и некоторые разработчики предпочитают помещать PHP-конструкцию непосредственно рядом с кодом PHP, как в этом примере:
Сегодня <?php echo date("l"); ?>. Последние новости.
Существуют также другие способы форматирования и вывода информации, которые будут рассмотрены в главах, посвященных PHP. Важно усвоить, что, используя PHP, веб-разработчики получают язык сценариев, который хотя и не обладает быстротой скомпилированного кода на C или ему подобных языках, но все же работает невероятно быстро и к тому же очень хорошо вписывается в разметку HTML.
Если вы собираетесь набирать встречающиеся в этой книге примеры на PHP в программе-редакторе, чтобы работать параллельно с моим повествованием, не забывайте предварять их тегом <?php, а в конце ставить тег ?>, чтобы обеспечить их обработку интерпретатором PHP. Для упрощения этой задачи можно заранее подготовить файл example.php, содержащий эти теги.
Используя PHP, вы получаете средство управления своим веб-сервером с неограниченными возможностями. Если понадобится на лету внести изменения в HTML, обработать данные кредитной карты, добавить сведения о пользователе в базу данных или извлечь информацию из стороннего сайта, все это можно будет сделать из тех же самых PHP-файлов, в которых находится и сам код HTML.
MySQL
Разумеется, без средств отслеживания информации, предоставляемой пользователем в ходе работы с вашим сайтом, нельзя в полной мере говорить о возможностях динамического изменения выходного кода HTML. На заре создания Всемирной паутины многие сайты использовали неструктурированные текстовые файлы для хранения таких данных, как имена пользователей и пароли. Но такой подход мог вызвать ряд проблем, если файл не был надежно заблокирован от повреждений, возникающих при одновременном доступе к нему множества пользователей. К тому же неструктурированный файл мог разрастаться до таких размеров, что с ним непросто было работать, не говоря уже о трудностях, связанных с попытками объединения файлов и осуществления в них сложных поисковых операций за какое-нибудь мало-мальски приемлемое время.
Именно в таких случаях большое значение приобретает использование реляционных баз данных со структурированной системой запросов. И MySQL, будучи совершенно бесплатной и установленной на огромном количестве веб-серверов системой, оказывается как нельзя кстати. Она представляет собой надежную и исключительно быстродействующую систему управления базами данных, использующую команды, похожие на простые английские слова.
Высшим уровнем структуры MySQL является база данных, внутри которой можно иметь одну или несколько таблиц, содержащих ваши данные. Это похоже, скажем, на файл электронной таблицы Excel, состоящей из нескольких листов: файл электронной таблицы можно рассматривать как базу данных, а отдельные листы — как таблицы.
Предположим, вы работаете с таблицей с именем users (пользователи), внутри которой созданы графы для фамилий — surname, имен — firstname и адресов электронной почты — email, и теперь нужно добавить еще одного пользователя. Вот одна из команд, с помощью которой это можно сделать:
INSERT INTO users VALUES('Smith', 'John', 'jsmith@mysite.com');
Для создания базы данных и таблицы, а также настройки всех нужных полей понадобится сначала выдать и другие команды, но используемая здесь SQL-команда INSERT демонстрирует простоту добавления в базу данных новой информации.
Так же просто выполняется и поиск данных. Предположим, что имеется адрес электронной почты пользователя и нужно найти имя его владельца. Для этого можно ввести следующий SQL-запрос:
SELECT surname,firstname FROM users WHERE email='jsmith@mysite.com';
После этого MySQL вернет Smith, John и любые другие пары имен, которые могут быть связаны в базе данных с указанным адресом электронной почты.
Нетрудно предположить, что возможности MySQL простираются значительно дальше выполнения простых команд вставки и выбора — INSERT и SELECT. Например, можно скомбинировать родственные наборы данных, чтобы собрать вместе взаимосвязанные части информации, запросить результаты, выбрав порядок их выдачи из множества вариантов, найти частичные совпадения, если известна только часть искомой строки, вернуть конкретно заданное количество результатов и сделать многое другое.
При использовании PHP все эти вызовы можно направлять непосредственно к MySQL без использования ее интерфейса командной строки напрямую. То есть, чтобы докопаться до нужного элемента данных, вы можете сохранять результаты в массивах для их обработки и выполнять множество поисковых запросов, каждый из которых зависит от результатов, полученных ранее.
Далее будет показано, что для придания еще большей мощности прямо в MySQL встроено несколько дополнительных функций, которые позволяют эффективно выполнять наиболее часто встречающиеся в MySQL операции, не составляя их из нескольких PHP-вызовов к MySQL.
JavaScript
JavaScript был создан для получения доступа из сценариев ко всем элементам HTML-документа. Иными словами, он предоставляет средства для динамического взаимодействия с пользователем, например для проверки приемлемости адресов электронной почты в формах ввода данных, отображения подсказок наподобие «Вы действительно подразумевали именно это?» и т.д. (хотя с точки зрения безопасности, которая всегда должна реализовываться на веб-сервере, на эту технологию положиться нельзя).
В сочетании с CSS JavaScript закладывает основу мощности динамических веб-страниц, которые изменяются буквально на глазах, в отличие от новой страницы, возвращаемой сервером.
Однако ранее использование JavaScript вызывало сложности, обусловленные некоторыми существенными различиями в способах реализации этого языка, выбранных разными разработчиками браузеров. В основном эти различия возникали, когда некоторые производители пытались придать своим браузерам дополнительные функциональные возможности, не обращая внимания на совместимость с продуктами своих конкурентов.
К счастью, разработчики в большинстве своем уже взялись за ум, и теперь оптимизация вашего кода для различных браузеров утратила прежнюю актуальность.
А сейчас взглянем, как можно воспользоваться обычным JavaScript-кодом, воспринимаемым всеми браузерами:
<script>
document.write("Сегодня " + Date() );
</script>
Этот фрагмент кода предписывает браузеру интерпретировать все, что находится внутри тегов <script>, как код JavaScript, что браузер и сделает, записав в текущий документ текст "Сегодня", а также дату, полученную за счет использования JavaScript-функции Date(). В результате получится нечто подобное следующему:
Сегодня wed Jan 01 2025 01:23:45
Ходьба перед бегом
Функция document.write намеренно используется здесь так, как изначально предназначалось, ради простоты в очень маленьких фрагментах кода. Однако существуют другие, более удачные способы вывода информации на веб-страницы и сообщений для целей отладки. Все они будут рассматриваться далее в книге и сопровождаться объяснениями, когда и почему те или иные варианты лучше.
Ранее было упомянуто, что изначально JavaScript разрабатывался, чтобы получить возможность динамически управлять различными элементами внутри HTML-документа, и это его предназначение по-прежнему является основным. Но все чаще JavaScript применяется для Ajax — процесса доступа к веб-серверу в фоновом режиме.
Асинхронный обмен данными позволил веб-страницам стать похожими на автономные программы, поскольку для отображения нового содержимого его не нужно загружать целиком. Вместо этого с помощью асинхронного вызова можно извлекать и обновлять отдельно взятые элементы веб-страницы, например, изменить вашу фотографию на сайте социальной сети или заменить кнопку, на которой нужно щелкнуть, отвечая на вопрос. Полностью эта тема будет рассмотрена в главе 17.
CSS
CSS является ключевым дополнением к HTML, которое обеспечивает соответствующую разметку HTML-текста и встроенных изображений, сообразуясь с параметрами применяемого пользователем экрана. После появления третьего стандарта (CSS3) CSS предлагает уровень динамической интерактивности, которая прежде поддерживалась только с помощью JavaScript. Например, можно не только придать стиль любому элементу HTML, чтобы изменить его размеры, цвета, границы, интервалы, но и, используя всего лишь несколько строк CSS, добавить в свои веб-страницы анимированные переходы и преобразования.
Кстати, стандартная нумерация выпусков CSS (например, CSS2 или CSS3) теперь отменена, поэтому сегодня каскадные таблицы стилей называются просто CSS, но различные подмодули имеют свою нумерацию, например CSS Selectors Level 4 и CSS Images Level 3.
Чтобы использовать CSS, достаточно просто вставить правила между тегами <style> и </style> в заголовке веб-страницы:
<style>
р{
text-align:justify;
font-family:Helvetica;
}
</style>
Эти правила будут изменять исходное выравнивание текста в теге <p>, чтобы содержащиеся в нем абзацы были выровнены по левому и правому краям и для их отображения использовался шрифт Helvetica.
В дополнительной главе 1 «Введение в CSS» (https://oreil.ly/H9YTV) вы увидите, что существует множество различных способов задания правил CSS и их также можно включать непосредственно в теги или сохранять во внешнем файле, предназначенном для отдельной загрузки. Подобная гибкость позволяет не только точно настраивать стили HTML, но и использовать встроенные возможности, такие как воспроизведение анимационных эффектов при наведении указателя мыши. Вы также увидите, как получить доступ ко всем CSS-свойствам элементов из JavaScript и из HTML.
В основной части книги вы познакомитесь со всеми новыми функциями CSS, такими как оформление границ, отображение теней, применение текстовых эффектов, воспроизведение анимационных эффектов при переходах и преобразованиях, а также узнаете о широчайших возможностях технологий Flexbox и CSS Grid.
А теперь HTML5
Какими бы полезными ни были все эти дополнения к веб-стандартам, самым амбициозным разработчикам и их было мало. К примеру, так и не был придуман простой способ работы с графикой в браузере, не требующий обращения к таким плагинам, как Flash. То же самое происходило и в отношении аудио- и видеовставок в веб-страницы. Кроме того, можно отметить множество досадных несоответствий, вкравшихся в HTML в процессе его развития.
Итак, чтобы подчистить все эти шероховатости и перенести интернет за пределы технологии Web 2.0 в его следующую фазу развития, был создан новый стандарт HTML, устраняющий перечисленные недостатки: HTML5. Он начал разрабатываться в далеком 2004 году, когда Mozilla Foundation и Opera Software (разработчики двух популярных браузеров) составили его первый проект. В настоящее время стандарт HTML5 поддерживается рабочей группой по технологиям гипертекстовых веб-приложений WHATWG (Web Hypertext Application Technology Working Group) и официально называется HTML Living Standard.
Но цикл разработки никогда не заканчивается, и со временем, несомненно, будут встроены дополнительные функциональные возможности. К некоторым наиболее ярким свойствам HTML5, позволяющим управлять медиаресурсами, можно отнести элементы <audio>, <video> и <canvas>, с помощью которых происходит добавление звука, видео и усовершенствованной графики. Все, что нужно знать об этих и всех других аспектах HTML5, весьма подробно изложено в дополнительных главах, начиная с дополнительной главы 4 «Введение в HTML 5» (https://oreil.ly/kFP8K), доступной в репозитории книги на GitHub (https://github.com/RobinNixon/lpmj7).
Кроме всего прочего, мне в спецификации HTML5 нравится, что для самозакрывающихся элементов больше не нужен синтаксис XHTML. Раньше перевод на новую строку можно было изобразить с помощью элемента <br>. Затем для обеспечения совместимости в будущем с XHTML (так и не состоявшейся заменой HTML) элемент был изменен на <br /> с добавленным символом / (поскольку ожидалось, что характерной особенностью закрывающего тега всех элементов станет именно этот символ). Но теперь все вернулось на круги своя и можно использовать любую из версий таких элементов. Итак, для большей лаконичности и меньшего объема набираемого текста в данной книге я вернулся к прежнему стилю: <br>, <hr> и т.д. Но имейте в виду, что такие фреймворки, как React, используют для JavaScript расширение JSX, которое требует добавлять символ /, и там, где такие примеры приводятся в этой книге, вы увидите дополнительный символ /.
Веб-сервер Apache
В дополнение к PHP, MySQL, JavaScript, CSS и HTML в динамической веб-технологии фигурирует и шестой герой — веб-сервер. В нашей книге этим героем является веб-сервер Apache. Мы уже немного касались того, что делает веб-сервер в процессе обмена информацией между клиентом и сервером по протоколу HTTP, но на самом деле негласно он выполняет куда более масштабную работу.
Например, Apache обслуживает не только HTML-файлы — он работает с широким спектром файлов, начиная с файлов изображений и заканчивая аудиофайлами MP3, файлами RSS-потоков (Really Simple Syndication — простое распространение по подписке) и т.д. И эти объекты не должны быть статическими файлами, такими как GIF-изображения. Все они могут быть сгенерированы программами, такими как сценарии PHP. И это действительно возможно: на PHP можно создавать изображения и другие файлы, которые затем будут обслуживаться сервером либо на лету, либо заранее.
Для этого обычно имеются модули, либо встроенные в Apache или PHP, либо вызываемые во время выполнения программы. Один из таких модулей — библиотека GD (Graphics Draw — «рисование графики»), которую PHP использует для создания и обработки графических элементов.
Apache поддерживает также обширный арсенал собственных модулей. В дополнение к модулям PHP наиболее важными для вас как для веб-программиста будут модули, занимающиеся обеспечением безопасности. Другими примерами могут служить модуль Rewrite, позволяющий веб-серверу обрабатывать широкий диапазон типов URL-адресов и перезаписывать их в соответствии с его внутренними требованиями, и модуль Proxy, который можно использовать для обслуживания часто запрашиваемых страниц из кэша, чтобы снизить нагрузку на сервер.
Далее в книге будет показано практическое применение этих модулей для улучшения свойств, предоставляемых тремя основными технологиями.
Node.js: альтернатива Apache
В 2009 году разработчик Райан Даль, недовольный работой Apache и его неспособностью обрабатывать большое количество одновременных подключений, предложил решение с названием Node.js на основе движка JavaScript V8, разработанного в Google, чтобы дать другим разработчикам возможность писать серверные сценарии на JavaScript. Вскоре после этого был представлен диспетчер пакетов для Node.js под названием npm, упрощающий публикацию и распространение исходного кода пакетов для Node.js, а также установку, обновление и удаление пакетов.
В 2024 году платформа Node.js достигла версии 22.6.0 и стала весьма популярной альтернативой веб-серверу Apache, и было бы большим упущением в новом издании этой книги умолчать о ее преимуществах и не дать достаточно информации, чтобы вы могли начать ее использовать, если пожелаете. Ваш выбор может пасть на эту платформу по трем причинам.
В Node.js реализована неблокирующая модель ввода-вывода, управляемая событиями, что позволяет эффективно обрабатывать большое количество одновременных подключений. Неблокирующая природа обеспечивает масштабируемость и высокую производительность приложений, что делает платформу идеальной для создания, например, веб-приложений реального времени, чат-приложений и потоковых сервисов.
Node.js позволяет разработчикам использовать JavaScript как на стороне клиента, так и на стороне сервера, что обеспечивает единообразие среды разработки, устраняет когнитивные задержки из-за необходимости переключаться между различными языками программирования, позволяет повторно использовать код и упрощает процесс разработки. Да, это означает, что после перехода на эту платформу вам не потребуется следить за выходом обновлений для PHP, и, конечно же, Node.js не сможет запускать ваши сценарии на PHP. Однако для реализации сложного приложения все еще можно использовать и Node.js, и Apache с PHP.
Node.js, основанная на движке JavaScript V8, обладает исключительной производительностью, быстро и эффективно выполняя код JavaScript, что способствует уменьшению времени отклика и увеличению общей производительности приложения. Кроме того, Node.js потребляет мало памяти, что делает ее пригодной для развертывания на облачных платформах.
Есть и другие веские причины использовать Node.js, но и названные выглядят весьма убедительно. PHP остается очень важным языком для веб-разработки, активно развивается, имеет активное сообщество и часто используется вместе с другими языками и средами, такими как Node.js.
Несколько слов о программах с открытым исходным кодом
Технологии, рассматриваемые в данной книге, основаны на использовании открытого кода: чтение кода и внесение в него изменений носит общедоступный характер. Часто спорят, обусловлена или нет популярность этих технологий тем, что они представлены программами с открытым исходным кодом, но PHP, MySQL и Apache действительно являются наиболее востребованными инструментами в своих категориях. Вполне определенно можно сказать, что их принадлежность к продуктам с открытым кодом означает, что они были разработаны в сообществе команд программистов, которые придавали им свойства в соответствии со своими желаниями и потребностями и хранили исходный код доступным для всеобщего просмотра и изменения. Ошибки и бреши в системе безопасности могут быть быстро распознаны и предотвращены еще до их проявления.
Есть и еще одно преимущество: все эти программы могут использоваться бесплатно. Если вы наращиваете пропускную способность своего сайта и привлекаете к его обслуживанию различные серверы, не нужно задумываться о приобретении дополнительных лицензий. Не нужно также пересматривать свой бюджет перед тем, как принять решение об обновлении системы и установке самых последних версий этих продуктов.
Сочетаем все технологии
Истинная красота PHP, MySQL, JavaScript, CSS и HTML проявляется в том замечательном способе, благодаря которому они совместно работают над производством динамического веб-контента: PHP занят основной работой на веб-сервере, MySQL управляет данными, а CSS и JavaScript вместе заботятся о представлении веб-страницы. JavaScript может также взаимодействовать с PHP-кодом на веб-сервере, когда ему нужно что-нибудь обновить (как на сервере, так и на веб-странице). И с новыми, высокоэффективными свойствами HTML, такими как холсты, аудио, видео и геолокация, можно придать веб-страницам более высокую динамичность, интерактивность и мультимедийность.
Неплохо бы теперь подвести краткий итог всему, что изложено в данной главе, и, не пользуясь программным кодом, рассмотреть процесс, сочетающий в себе некоторые из этих технологий в повседневно использующейся многими сайтами функции асинхронного обмена данными: проверке в процессе регистрации новой учетной записи, не занято ли выбранное имя другим посетителем сайта. Хорошим примером подобного использования технологий может послужить почтовый сервер Gmail (рис. 1.3).
Рис. 1.3. Gmail применяет технологию асинхронного обмена данными для проверки допустимости пользовательских имен
Этот асинхронный процесс состоит из следующих шагов.
1. Сервер выдает код HTML для создания веб-формы, запрашивающей необходимые данные: имя пользователя, настоящее имя, настоящую фамилию и адрес электронной почты.
2. Одновременно с этим сервер вкладывает в разметку HTML код на JavaScript, наблюдающий за полем ввода имени пользователя и проверяющий два обстоятельства: введен ли в поле какой-нибудь текст и был ли фокус ввода перемещен в другое поле ввода.
3. Как только текст будет введен и фокус ввода переместится на другой элемент формы, код JavaScript в фоновом режиме отправит введенное имя пользователя PHP-сценарию на веб-сервере и будет ждать ответной реакции.
4. Веб-сервер проверит имя пользователя и вернет коду JavaScript ответ, в котором сообщит, занято это имя или нет.
5. Затем JavaScript выведет под полем ввода имени пользователя индикатор приемлемости имени пользователя (возможно, в виде зеленой галочки или красного крестика), сопровождая его текстом.
6. Если пользователь ввел неприемлемое имя, но все же попытается отправить форму, код JavaScript прервет отправку и повторно обратит внимание пользователя (возможно, выведя более крупный графический индикатор и (или) открыв окно предупреждения) на необходимость выбора другого имени.
7. Усовершенствованная версия этого процесса может даже изучить имя, запрошенное пользователем, и предложить альтернативное доступное на данный момент имя.
Все это для удобства пользователя и целостности восприятия происходящего делается без привлечения его внимания в фоновом режиме. Без использования асинхронного обмена данными на сервер будет отправлена вся форма, а он затем вернет код HTML с подсвеченными полями, в которых были допущены ошибки. Можно, конечно, сделать и так, но обработка поля на лету выглядит намного интереснее и приятнее.
Асинхронный обмен данными может использоваться для решения куда более широкого круга задач, чем простой контроль и обработка вводимой информации. Далее в этой книге будет рассмотрено много дополнительных приемов его использования.
В этой главе вашему вниманию было представлено довольно полное введение в основные технологии применения PHP, MySQL, JavaScript, CSS и HTML (а также Apache) и рассмотрен порядок их совместной работы. В главе 2 будут рассмотрены способы установки собственного сервера для веб-разработки, на котором вы сможете опробовать на практике весь изучаемый материал.
Вопросы
1. Какие четыре (как минимум) компонента необходимы для создания полностью динамических сайтов?
2. Что означает аббревиатура HTML?
3. Почему в названии MySQL присутствуют буквы SQL?
4. И PHP, и JavaScript являются языками программирования, генерирующими динамическое содержимое веб-страниц. В чем состоит их главное различие и почему вы будете использовать оба этих языка?
5. Что означает аббревиатура CSS?
6. Перечислите три важнейших новых элемента, появившихся в HTML5.
7. Если вам удастся обнаружить ошибку в одном из инструментов с открытым кодом (что случается довольно редко), то как, по-вашему, можно получить исправленную версию?
8. Почему такие фреймворки, как jQuery или React, играют столь важную роль в разработке современных веб-сайтов и веб-приложений?
9. Почему событийно-ориентированная модель Node.js обеспечивает этой платформе преимущество перед веб-сервером Apache?
Ответы на эти вопросы можно найти в разделе «Глава 1» приложения.
Глава 2. Установка сервера для разработки
Если у вас есть желание разрабатывать интернет-приложения, но нет собственного сервера для их разработки, то для тестирования каждого изменения в приложении вам придется выгрузить его на сервер, находящийся где-нибудь в интернете.
Даже при наличии высокоскоростного подключения это обстоятельство может существенно замедлить разработку. А на локальном компьютере для тестирования достаточно сохранить изменения (зачастую простым щелчком на значке) и затем нажать кнопку Refresh (Обновить) в браузере.
Еще одно преимущество наличия своего сервера разработки — при написании и тестировании программ не нужно волноваться об ошибках или проблемах безопасности, тогда как при опробовании приложения на публичном сайте приходится постоянно помнить о том, что люди могут увидеть или сделать с вашим приложением. Лучше решить все проблемы, пока вы работаете дома или в небольшом офисе, который, вероятнее всего, защищен межсетевыми экранами (брандмауэрами) и другими средствами безопасности.
Как только у вас появится сервер для разработки, вы удивитесь, как раньше могли обходиться без него, а также обрадуетесь легкости его настройки. Нужно лишь пройти все шаги, изложенные в следующих разделах, и выполнить соответствующие указания для обычных персональных компьютеров, macOS- или Linux-систем.
В этой главе будет рассмотрена только серверная сторона сетевого взаимодействия, о которой шла речь в главе 1. Но для тестирования результатов работы, особенно потом, когда мы приступим к использованию JavaScript, CSS и HTML, понадобятся также экземпляры всех основных браузеров, работающих в выбранной вами системе. В списке браузеров должны быть по крайней мере Mozilla Firefox, Safari и Google Chrome.
Несмотря на то что многие браузеры основаны на движке Google Chromium, в их реализациях могут быть небольшие отличия, что делает желательным тестирование вашего кода во всех возможных браузерах, прежде чем выпустить его в публичное обращение. Все это может вам понадобиться, как только ваш продукт будет готов к выпуску, чтобы гарантировать, что все работает должным образом во всех браузерах и на всех платформах.
Если вы хотите убедиться, что ваши приложения так же хорошо выглядят на мобильных устройствах, постарайтесь использовать для тестирования широкий диапазон устройств, работающих под управлением iOS и Android. В этом вам помогут такие сервисы, как BrowserStack. Инструменты разработчика в браузерах тоже поддерживают эмуляцию мобильных устройств и помогают проверить, является ли сайт адаптивным и удобным для просмотра на небольших экранах.
Что такое WAMP, MAMP и LAMP
WAMP, MAMP и LAMP — это сокращения от «Windows, Apache, MySQL и PHP», «Mac, Apache, MySQL и PHP» и «Linux, Apache, MySQL и PHP» соответственно. Данными сокращениями описываются программные комплекты для разработки динамических веб-страниц.
Комплекты WAMP, MAMP и LAMP поставляются в форме пакетов, связывающих упакованные программы так, чтобы их не нужно было устанавливать и настраивать по отдельности. Это означает, что достаточно загрузить и установить одну программу, следуя простым подсказкам, чтобы подготовить и запустить сервер разработки в кратчайшие сроки и с минимальными усилиями.
В процессе установки будут заданы настройки по умолчанию. Конфигурация безопасности при такой установке не будет столь же строгой, как на промышленном веб-сервере, поскольку она оптимизирована для использования на локальной машине. Поэтому не следует пользоваться такими настройками при установке промышленного сервера.
Но для разработки и тестирования сайтов и приложений подобная установка подойдет как нельзя лучше.
Если для создания своей системы разработки вы решили не использовать WAMP/MAMP/LAMP, то учтите, что загрузка и сборка среды разработки из составных частей займет очень много времени и может отнять много сил на исследования для создания полноценной конфигурации всей системы. Но если все компоненты у вас уже установлены и согласованы друг с другом, они смогут работать с примерами, приводимыми в этой книге.
Установка AMPPS в Windows
Существует несколько доступных пакетов WAMP, каждый из которых предлагает свою, немного отличающуюся от других конфигурацию. В разных изданиях этой книги рекомендовались разные пакеты WAMP, которые в свое время предлагали лучшие наборы функций и выглядели наиболее надежными. В настоящее время лучшим вариантом является AMPPS (впрочем, для опробования примеров в этой книге с не меньшим успехом можно использовать другие альтернативы). Его можно загрузить с главной страницы сайта http://ampps.com. (Доступны также версии для Mac и Linux; см. «Установка AMPPS в macOS» и «Установка LAMP в Linux».)
Я рекомендую всегда загружать последнюю стабильную версию (на момент написания этих строк это была версия с номером 4.4, установочный пакет имел объем около 46 Мбайт). На странице загрузки перечислены различные установочные пакеты для Windows, macOS и Linux.
Запустите установку после загрузки пакета, чтобы появилось окно, показанное на рис. 2.1. Если вы пользуетесь антивирусной программой или в Windows активировано управление учетными записями (Account Control), то, прежде чем вы перейдете к этому окну, вам может быть показано одно или несколько предупреждений и для продолжения установки придется нажать кнопки Yes (Да) и (или) OK.
Нажмите кнопку Next (Далее), после чего примите соглашения. Нажмите кнопку Next (Далее) еще раз, а затем еще раз, чтобы миновать диалоги с информационными сообщениями. После этого подтвердите место установки. Вероятнее всего, вам будет предложено выполнить установку в каталог, как показано ниже, в зависимости от буквы основного жесткого диска, но при желании в этот путь можно внести изменения:
C:\Program Files\Ampps
Когда это издание выйдет в свет, вид некоторых экранов и настройки, демонстрируемые далее, могут измениться. В таком случае просто руководствуйтесь здравым смыслом и постарайтесь выполнить все действия как можно ближе к описываемой последовательности.
Когда вы решите, куда устанавливать AMPPS, нажмите кнопку Next (Далее), определите, куда сохранить ярлыки (обычно можно оставить предложенное место по умолчанию), и снова нажмите кнопку Next (Далее), чтобы выбрать, какие ярлыки установить, как показано на рис. 2.2. Чтобы продолжить процесс установки, на следующем экране нажмите кнопку Install (Установить).
Рис. 2.1. Окно мастера установки
Рис. 2.2. Выбор устанавливаемых ярлыков
Установка займет несколько минут, после чего откроется окно завершения процесса, показанное на рис. 2.3, где нужно нажать кнопку Finish (Завершить).
Рис. 2.3. Пакет AMPPS установлен
В завершение нужно установить библиотеки Microsoft Visual C++ Redistributable, если этого не было сделано ранее. После запуска установки появится окно, показанное на рис. 2.4. Нажмите кнопку Install (Установить), чтобы продолжить установку, или кнопку Close (Закрыть), если уверены, что библиотеки уже установлены. В любом случае вы всегда можете продолжить, и вам сообщат, если библиотеку не нужно переустанавливать.
Решив продолжить установку, вы должны согласиться с условиями, описанными в окне, после чего нажать кнопку Install (Установить). Установка не займет много времени; по ее завершении нажмите кнопку Close (Закрыть).
После установки AMPPS в правом нижнем углу экрана должно появиться окно управления, показанное на рис. 2.5. Это окно можно также вызвать с помощью ярлыка приложения AMPPS в меню Пуск или на рабочем столе, если ранее давалось разрешение на их создание.
Рис. 2.4. Установите библиотеку Redistributable, если у вас ее еще нет
Рис. 2.5. Окно управления пакетом AMPPS
Если у вас еще остались какие-либо вопросы, то, прежде чем продолжить, ознакомьтесь с документацией AMPPS (https://ampps.com/docs). В противном случае можете продолжить работу, а если понадобится, то воспользуйтесь ссылкой Support (Поддержка) внизу окна управления. Щелкнув на ней, вы перейдете на сайт AMPPS, где можно сообщить о проблеме.
Нетрудно заметить, что по умолчанию в AMPPS используется версия PHP с номером 8.2. Если вы по какой-либо причине захотите попробовать другую версию, нажмите кнопку Options (Настройки) (в виде девяти белых квадратиков, образующих большой квадрат) в окне управления AMPPS, а затем выберите пункт изменения версии Change PHP Version. Появится новое меню, где вы сможете выбрать другую версию для установки.
Тестирование установки
Первым делом сразу после установки следует проверить, что все работает должным образом. Для этого введите такой URL в адресной строке браузера:
http://localhost
В результате будет вызван начальный экран, где вы сможете обезопасить среду AMPPS, задав пароль (рис. 2.6). Если компьютером пользуетесь только вы, то можете этого не делать. Но если могут возникнуть какие-либо проблемы с безопасностью, то желательно защитить среду паролем.
Рис. 2.6. Начальный экран настройки безопасности
Совершив это действие, вы попадете на главную страницу управления http://localhost/ampps/. На ней можно настраивать и управлять всеми аспектами стека AMPPS, поэтому запомните этот адрес или добавьте его в закладки в вашем браузере.
Далее, чтобы увидеть корневой каталог документов вашего нового веб-сервера Apache (рассматривается в следующем разделе), введите такой адрес:
http://localhost
На этот раз вместо перехода на начальный экран настройки безопасности на экране появится страница, похожая на ту, что показана на рис. 2.7.
Рис. 2.7. Просмотр корневого каталога документов
Доступ к корневому каталогу документов (Windows)
Корневой каталог документов — это каталог, где находятся основные веб-документы домена. Именно он используется сервером, когда в браузере набирается базовый URL без пути, например, http://yahoo.com или — на локальном сервере — http://localhost.
По умолчанию AMPPS использует для этой цели следующий каталог:
C:\Program Files\Ampps\www
Теперь, чтобы убедиться в том, что все сконфигурировано должным образом, напишем тестовую программу Hello World. Создайте HTML-файл со следующими строками, воспользовавшись текстовым редактором, таким как Блокнот (его будет достаточно, хотя есть более подходящие для этого редакторы, которые называются редакторами кода и обсуждаются далее в этой главе):
<!DOCTYPE html>
<html lang="en">
<head>
<title>Быстрый тест</title>
</head>
<body>
Hello World!
</body>
</html>
После набора сохраните файл с именем test.html в корневом каталоге документов.
Теперь эту страницу можно вызвать в браузере, введя в адресной строке следующий URL (рис. 2.8):
http://localhost/test.html
Рис. 2.8. Ваша первая веб-страница
Следует понимать, что переход на веб-страницу из корневого каталога документов (или из подкаталога в нем) отличается от загрузки этой же страницы из файловой системы компьютера. В первом случае будет гарантирован доступ к PHP, MySQL и ко всем возможностям веб-сервера, тогда как во втором файл будет просто загружен в браузер, который попытается создать его экранное представление, но не будет иметь возможности обработать код PHP или другие серверные инструкции. Поэтому примеры должны неизменно запускаться из адресной строки браузера с указанием пути localhost перед их именами, если только вы не уверены в том, что файл не зависит от использования функциональных возможностей веб-сервера.
Другие пакеты WAMP
После обновления программы иногда работают неожиданным образом и в них даже могут проявиться какие-нибудь ошибки. Поэтому, столкнувшись с непреодолимыми в AMPPS трудностями, вместо этого решения вы можете остановить свой выбор на одном из многих других решений, доступных в интернете.
Вы все так же сможете опробовать все примеры, что приводятся в книге, но при этом придется следовать инструкциям, которые прилагаются к каждому пакету WAMP и могут оказаться сложнее ранее упомянутого руководства.
Вот наиболее подходящие, на мой взгляд, альтернативы:
• EasyPHP (http://easyphp.org/);
• XAMPP (http://apachefriends.org/);
• WAMPServer (https://oreil.ly/CIrSe).
Вполне вероятно, что, пока данное издание будет самым последним, разработчики AMPPS могут внести в свой продукт ряд усовершенствований и изменить экраны и методы установки, а кроме того, изменениям могут подвергнуться и версии Apache, PHP или MySQL. Поэтому не подумайте, что что-то не в порядке, если экраны и операции будут выглядеть как-то иначе. Разработчики AMPPS прилагают все силы, чтобы их продукт оставался простым в использовании, поэтому следуйте любым выводимым на экран подсказкам и обращайтесь к документации на сайте http://ampps.com/.
Установка AMPPS в macOS
Пакет AMPPS доступен также для macOS, а загрузить его можно со страницы http://ampps.com/ (как уже говорилось, текущая версия имеет номер 4.3 и ее объем составляет приблизительно 38 Мбайт).
Если ваш браузер после загрузки не запустит установку автоматически, то дважды щелкните на файле с расширением .dmg, после чего перетащите вновь созданную папку AMPPS в папку Applications (Приложения) (рис. 2.9).
Теперь откройте папку Applications (Приложения) и дважды щелкните на значке AMPPS. Если ваши настройки безопасности помешают открыть файл, то нажмите и удерживайте клавишу Control, однократно щелкнув на значке. После этого появится окно с просьбой подтвердить открытие файла программы. Чтобы открыть файл, нажмите кнопку Open (Открыть). Возможно, после запуска приложения для продолжения работы придется ввести ваш пароль в macOS.
Рис. 2.9. Перетащите папку AMPPS в папку Applications (Приложения)
После того как среда AMPPS запустится, в левом нижнем углу рабочего стола появится окно управления, похожее на то, что изображено на рис. 2.5.
Нетрудно заметить, что по умолчанию в AMPPS используется версия PHP с номером 8.2. Если вы по какой-либо причине захотите попробовать другую версию, нажмите кнопку Options (Настройки) (в виде девяти белых квадратиков, образующих большой квадрат) в окне управления AMPPS, а затем выберите пункт изменения версии, Change PHP Version. Появится новое меню, где вы сможете выбрать другую версию для установки.
Доступ к корневому каталогу документов (macOS)
По умолчанию корневой каталог документов AMPPS будет размещаться в пути:
/Applications/Ampps/www
Теперь, чтобы убедиться в правильности всех настроек, создайте файл с тестовой программой «Hello World». Для этого создайте HTML-файл со следующими строками, воспользовавшись программой TextEdit (ее будет достаточно, хотя есть более подходящие для этого редакторы, которые называются редакторами кода и обсуждаются далее в этой главе):
<!DOCTYPE html>
<html lang="en">
<head>
<title>Быстрый тест</title>
</head>
<body>
Hello World!
</body>
</html>
После набора сохраните файл с именем test.html в корневом каталоге документов.
Теперь эту страницу можно вызвать в браузере, введя в адресной строке следующий URL (вы увидите тот же результат, который был показан на рис. 2.8):
http://localhost/test.html
Следует понимать, что переход на веб-страницу из корневого каталога документов (или из подкаталога в нем) отличается от загрузки этой же страницы из файловой системы компьютера. В первом случае будет гарантирован доступ к PHP, MySQL и ко всем возможностям веб-сервера, тогда как во втором файл будет просто загружен в браузер, который попытается создать его экранное представление, но не будет иметь возможности обработать код PHP или другие серверные инструкции. Поэтому примеры должны неизменно запускаться из адресной строки браузера с указанием пути localhost перед их именами, если только вы не уверены в том, что файл не зависит от использования функциональных возможностей веб-сервера.
Установка LAMP в Linux
Эта книга ориентирована в основном на пользователей PC и MAC, но примеры кода, представленные в ней, будут работать и на Linux-компьютере. Существуют десятки популярных разновидностей Linux, на каждую из которых LAMP может устанавливаться со своими особенностями, поэтому невозможно осветить их все в этой книге.
Но нужно упомянуть, что некоторые версии Linux поступают с предустановленным веб-сервером и MySQL, поэтому есть вероятность, что у вас уже все готово к работе. Чтобы проверить, так ли это, попробуйте ввести в браузер следующий адрес и посмотрите, получите ли вы веб-страницу по умолчанию из корневого каталога документов:
http://localhost
Если все заработает, то у вас, наверное, установлен сервер Apache, а также может быть установлена и запущена база данных MySQL, но, чтобы окончательно удостовериться в этом, проверьте факт их установки вместе со своим системным администратором.
Работа в удаленном режиме
Если есть доступ к веб-серверу, на котором уже имеются сконфигурированные PHP и MySQL, то вы всегда можете применить его для веб-разработки. Но это не самый лучший вариант, если только вы не пользуетесь высокоскоростным подключением. Разработка на локальной машине позволяет протестировать новые модификации практически без задержки или с небольшой задержкой на загрузку.
Может вызвать трудности и удаленный доступ к MySQL. Чтобы зарегистрироваться на сервере для создания баз данных вручную и установить права доступа из командной строки, нужно воспользоваться безопасным SSH-протоколом. Компания, предоставляющая веб-хостинг, посоветует, как это можно сделать наилучшим образом, и предоставит пароль для доступа к MySQL (а в первую очередь, разумеется, для доступа к самому серверу).
Вход в систему
Я рекомендую пользователям Windows как минимум установить программу PuTTY (http://putty.org/) для подключения к серверу по SSH (следует помнить, что уровень безопасности у SSH значительно выше, чем у Telnet). Современные версии Windows уже имеют встроенную поддержку SSH, однако интерфейс PuTTY немного проще в использовании, особенно для начинающих.
В Mac поддержка SSH доступна изначально. Нужно только выбрать папку Applications, перейти к папке Utilities, а затем запустить программу Terminal. В окне терминала нужно войти на сервер, используя SSH, как показано в следующей команде:
ssh mylogin@server.com
где server.com — это имя сервера, на который необходимо войти, а mylogin — имя пользователя, под которым нужно войти в систему. Затем система запросит у вас пароль для данного пользователя, и, если вы введете правильный пароль, вход состоится.
Передача файлов
Для передачи файлов на веб-сервер и обратно вам понадобится программа передачи файлов, реализующая протокол FTPS или SFTP. Начав поиск хорошего клиента в интернете, вы найдете их так много, что может потребоваться довольно много времени, чтобы выбрать тот, который соответствует всем вашим требованиям.
Не пользуйтесь FTP
FTP небезопасен и его не стоит использовать. Существуют гораздо более безопасные методы передачи файлов, чем FTP, такие как SFTP (протокол безопасной передачи файлов) на основе SSH и SCP (протокол безопасного копирования). Хорошие FTP-клиенты, однако, тоже поддерживают SFTP и FTPS (FTP-SSL). Часто используемые вами средства передачи файлов зависят от политики компании, в которой вы работаете, но для личного использования программы FTP, такие как FileZilla (обсуждается далее), обеспечат бо́льшую часть необходимой вам функциональности и безопасности, если не все.
Я предпочитаю пользоваться FTP/SFTP-программой FileZilla (https://oreil.ly/AKKQN) с открытым исходным кодом, доступной для Windows, Linux и macOS, версии 10.5 и выше (рис. 2.10). Подробные инструкции по работе с FileZilla доступны в FileZilla Wiki (https://oreil.ly/yVpXK).
Рис. 2.10. FileZilla — полнофункциональная SFTP-программа
Еще один популярный инструмент — WinSCP (https://winscp.net), который, несмотря на свое название, поддерживает также SFTP и FTP. Разумеется, если у вас уже есть программа FTPS или SFTP, тем лучше — используйте то, что вам хорошо знакомо.
Использование редактора кода
Хотя для редактирования HTML, PHP и JavaScript подходит любой текстовый редактор, существуют очень удобные приложения, специально предназначенные для редактирования кода. В них имеются весьма полезные возможности, например цветная подсветка синтаксиса. Современные редакторы настолько интеллектуальны, что могут оперативно показывать места, где допущены синтаксические ошибки. Попробовав пользоваться таким редактором, вы поразитесь тому, насколько он удобен для работы.
Есть множество хороших и доступных программ, но я остановил свой выбор на программе Visual Studio Code (VSC) от Microsoft, поскольку она мощная, доступна для всех Windows, Mac и Linux и распространяется бесплатно (рис. 2.11). К тому же это не только редактор, но и комплексная среда разработки, которая постепенно превращается в отраслевой стандарт.
Рис. 2.11. Программы-редакторы (наподобие Visual Studio Code) превосходят по своим возможностям обычные текстовые редакторы
VSC, как показано на рис. 2.11, выделяет синтаксис, используя соответствующие цвета, что очень удобно. Можно поместить курсор за квадратными или фигурными скобками, и программа подсветит соответствующую парную скобку, давая возможность определить лишние или недостающие скобки. В VSC предлагается также множество других возможностей, облегчающих работу с текстом программы. Вы можете скачать копию с веб-сайта Visual Studio (https://oreil.ly/QY2AS).
Опять же, если вы предпочитаете какую-нибудь другую программу-редактор, воспользуйтесь ею, поскольку всегда лучше работать с теми программами, с которыми вы уже знакомы. Однако вам будет трудно найти что-то лучше, чем программа VSC, которая уже стала отраслевым стандартом, и вы должны знать, как работать с этим продуктом, поскольку он используется во многих компаниях.
Добравшись до конца этой главы, вы должны иметь установленную и настроенную среду разработки и быть готовыми приступить к освоению различных технологий, описанных в книге, начиная со знакомства с PHP в следующей главе. Но прежде потратьте пару минут и ответьте на кое-какие вопросы, чтобы проверить вновь обретенные знания.
Вопросы
1. В чем разница между WAMP, MAMP и LAMP?
2. Для чего предназначена программа SFTP?
3. Назовите основной недостаток работы на удаленном веб-сервере.
4. Почему лучше пользоваться специализированным редактором кода вместо обычного текстового редактора?
Ответы на эти вопросы можно найти в разделе «Глава 2» приложения.
Глава 3. Введение в PHP
В главе 1 о PHP говорилось как о языке, заставляющем сервер генерировать динамическую, потенциально разную выходную информацию при каждом запросе браузером веб-страницы. В данной главе начнется изучение этого простого, но мощного языка, которое продолжится в следующих главах и завершится в главе 7.
Ваши готовые веб-страницы будут представлять собой комбинацию HTML, CSS, JavaScript, PHP и SQL. Кроме того, каждая страница может вести на другие страницы, предоставляя пользователям возможность щелкать на ссылках и заполнять формы.
Хотя при изучении этих языков можно обойтись и без таких сложностей. Давайте пока сконцентрируемся исключительно на написании PHP-кода и достижении предсказуемости выходной информации или по крайней мере на умении разбираться в характере этой информации.
Включение PHP в HTML
По умолчанию имена файлов с PHP-документами имеют расширение .php. Когда веб-сервер встречает в имени запрашиваемого файла это расширение, он автоматически передает файл PHP-процессору. Веб-серверы имеют довольно широкий диапазон настроек, и некоторые веб-разработчики выбирают такой режим работы, при котором для разбора PHP-процессору принудительно передаются также файлы с расширениями .htm или .html. Обычно это связано с тем, что разработчики хотят скрыть факт использования PHP.
Программа на PHP отвечает за возврат файла в чистом виде, пригодном для отображения в браузере. В простейшем случае на выходе документа PHP будет получаться только код HTML. Чтобы убедиться в этом, можно взять любой HTML-документ и сохранить его как PHP-документ (например, сохранить файл index.html с именем index.php), и он будет отображаться точно так же, как исходный файл.
Для запуска команд PHP нужно использовать новый тег. Его открывающая часть имеет следующий вид:
<?php
Первое, что может броситься в глаза, — незавершенность тега. Это обусловлено тем, что внутрь тега могут помещаться целые фрагменты кода PHP. Они заканчиваются, только когда встречается закрывающая часть тега такого вида:
?>
Небольшая PHP-программа Hello World может иметь вид, показанный в примере 3.1.
Пример 3.1. Вызов PHP
<?php
echo "Hello world";
?>
Это очень гибкий тег. Одни программисты открывают его в начале документа, а закрывают в самом конце и выводят любой код HTML путем непосредственного использования команды PHP. Другие предпочитают помещать в эти теги как можно меньшие фрагменты кода PHP и именно в тех местах, где нужно воспользоваться динамическими сценариями, а весь остальной документ составлять из стандартного кода HTML.
Сторонники последнего метода программирования зачастую аргументируют свой выбор тем, что такой код выполняется быстрее, а сторонники первого метода утверждают, что увеличение скорости настолько мизерное, что оно не может оправдать дополнительные сложности многочисленных вставок PHP в отдельно взятый документ.
По мере изучения языка вы, несомненно, выберете свой стиль разработки на PHP, но для упрощения примеров, приводимых в этой книге, я свел количество переходов между PHP и HTML к минимуму, в среднем к одному-двум переходам на один документ.
Кстати, существует и несколько иной вариант синтаксиса PHP. Если поискать примеры PHP-кода в интернете, то можно встретить код, где используется следующий синтаксис открывающего и закрывающего тегов:
<?
echo "Hello world";
?>
Несмотря на то что здесь неочевиден вызов PHP-парсера, это вполне приемлемый альтернативный синтаксис. Но я не советую его использовать, поскольку он несовместим с XML и в настоящее время его применение не приветствуется (это значит, что он больше не рекомендуется и его поддержка может быть удалена в будущих версиях).
Если в файле содержится только код PHP, то закрывающий тег ?> можно опустить. Именно так и нужно делать, чтобы гарантировать отсутствие в файлах PHP утечки избыточных пробельных символов. Это особенно важно при написании объектно-ориентированного кода, в противном случае завершающий символ перевода строки, добавленный после закрывающего тега, может быть отправлен браузеру, когда тот этого не ожидает.
Примеры в этой книге
Чтобы вы не тратили время на ввод вручную примеров, приводимых в книге, все их можно скачать на GitHub (https://github.com/RobinNixon/lpmj7).
Примеры хранятся в файлах с именами, соответствующими номерам глав и примеров, но в некоторых случаях требуется, чтобы примеры сохранялись в файлах с конкретными именами. В таких случаях копии примеров сохраняются также в файлах с требуемыми именами в той же папке, как в показанном далее примере 3.4, который нужно будет сохранить в файле test1.php.
Структура PHP
В этом разделе будет рассмотрено довольно много основных положений. Разобраться во всем этом несложно, но я рекомендую проработать материал как можно тщательнее, поскольку он служит основой для понимания остальных глав. Как всегда, в конце главы будут заданы вопросы, с помощью которых можно будет проверить, насколько глубоко усвоен материал.
Комментарии
Существует три способа добавления комментариев к коду PHP. Первый заключается в добавлении пары прямых слешей и превращении в комментарий следующей за ними части строки:
// Это комментарий
Он хорошо подходит для временного исключения из программы строки кода, генерирующей ошибку. Например, такой способ комментирования можно применить, чтобы скрыть строку кода до тех пор, пока в ней не возникнет необходимость:
// echo "X equals $x";
Такой комментарий можно также вставить в конец строки кода, чтобы описать ее действие:
$x += 10; // Отступить на 10 пикселей для визуального разделения
Однострочные комментарии #
Помимо // для обозначения начала комментария, простирающегося до конца строки, можно использовать символ #. Однако этот способ реже используется на практике, а с версии PHP 8 однострочные комментарии, начинающиеся с #[, имеют особое значение (они интерпретируются как атрибуты). Поэтому я предпочитаю стиль //.
Когда понадобится использовать многострочный комментарий, можно прибегнуть к третьему способу, который показан в примере 3.2.
Пример 3.2. Многострочный комментарий
<?php
/* Это область
многострочного комментария,
которая не будет
подвергаться интерпретации */
?>
Для открытия и закрытия комментария можно воспользоваться парами символов /* и */ практически в любом произвольно выбранном месте кода. Если не все, то большинство программистов используют эту конструкцию для временного превращения в комментарий целого неработоспособного раздела кода или такого раздела, который по тем или иным причинам нежелательно интерпретировать.
Типичная ошибка — применение пар символов /* и */, чтобы закомментировать большой фрагмент кода, уже содержащий закомментированную область, в которой используются эти же пары символов. Комментарии не могут быть вложенными друг в друга, поскольку PHP-интерпретатор не поймет, где заканчивается комментарий, и выведет на экран сообщение об ошибке. Но если вы используете редактор программ или интегрированную среду разработки с подсветкой синтаксиса, то ошибку такого рода нетрудно будет заметить.
Основной синтаксис
PHP — очень простой язык, уходящий своими корнями в языки C и Perl (надеюсь, вы когда-нибудь встречались с ними), но все же больше похожий на Java. Он очень гибок, но существует несколько правил, относящихся к его синтаксису и структуре, которые следует изучить.
Точки с запятыми
В предыдущих примерах можно было заметить, что команды PHP завершаются точкой с запятой:
$х += 10;
Одна из наиболее часто встречающихся причин ошибок, с которыми мы сталкиваемся в работе с PHP, — забывчивость. Если не поставить эту точку с запятой, PHP будет воспринимать сразу несколько инструкций как одну инструкцию и, не сумев разобраться, выдаст ошибку синтаксического разбора — Parse error.
Символ $
Символ $ используется в разных языках программирования в различных целях. Например, в языке BASIC символ $ применялся в конце имен переменных, чтобы показать, что они — строковые.
В PHP символ $ должен ставиться перед именами всех переменных. Это необходимо, чтобы PHP-парсер работал быстрее, сразу же понимая, что имеет дело с переменной. К какому бы типу ни относились переменные — к числам, строкам или массивам, все они должны выглядеть так, как показано в примере 3.3.
Пример 3.3. Присваивание переменным значений трех разных типов
$mycounter = 1;
$mystring = "Hello";
$myarray = array("One", "Two", "Three");
Вот, собственно, и весь синтаксис, который нужно усвоить. В отличие от языков, которые предъявляют строгие требования к оформлению отступов (например, Python), PHP дает вам полную свободу оформления (или игнорирования) отступов с использованием любого количества пробелов. В действительности же рекомендуется не пренебрегать использованием пустых строк и отступов (наряду с подробными комментариями), так как это поможет вам разобраться в собственном коде, когда вы вернетесь к нему по прошествии некоторого времени, а также другим программистам, которым придется поддерживать ваш код.
Переменные
Понять, что такое переменные PHP, поможет простая метафора. Думайте о них как о небольших (или больших) спичечных коробках! Именно как о спичечных коробках, которые вы раскрасили и на которых написали некие имена.
Строковые переменные
Представьте, что у вас есть коробок, на котором написано слово username (имя пользователя). Затем вы пишете на клочке бумаги Fred Smith и кладете эту бумажку в коробок (рис. 3.1). Этот процесс похож на присваивание переменной строкового значения:
$username = "Fred Smith";
Кавычки служат признаком того, что Fred Smith — это строка символов. Каждую строку нужно заключать либо в двойные, либо в одинарные кавычки (апострофы). Между этими двумя видами кавычек есть весьма существенное различие, которое будет рассмотрено далее.
Когда хочется посмотреть, что находится внутри коробка, вы его открываете, вынимаете бумажку и читаете, что на ней написано. В PHP подобное действие (выводящее содержимое переменной) выглядит следующим образом:
echo $username;
Рис. 3.1. Переменные можно представить в виде спичечного коробка, содержащего какие-то предметы
Можно также присвоить содержимое другой переменной (сделать ксерокопию бумажки и поместить ее в другой коробок):
$current_user = $username;
Рассмотрим пример типичного использования переменных в программе (пример 3.4).
Пример 3.4. Ваша первая PHP-программа
<?php // test1.php
$username = "Fred Smith";
echo $username;
echo "<br>";
$current_user = $username;
echo $current_user;
?>
Эту программу можно запустить, введя в адресную строку браузера следующий URL:
http://localhost/test1.php
Кто-то из вас вполне мог в ходе установки веб-сервера (рассмотренной в главе 2) изменить порт 80, назначаемый серверу по умолчанию, на какой-нибудь другой. В таком случае вы должны добавить номер порта в URL в этом и всех последующих примерах в книге. Например, если в настройках сервера вы выбрали номер порта 8080, то предыдущий URL должен вводиться:
http://localhost:8080/test1.php
Не забудьте об этом при тестировании других примеров или при написании собственного кода.
Результатом запуска этого кода будет двойное появление имени Fred Smith: первое — в результате выполнения команды echo $username, а второе — в результате выполнения команды echo $current_user.
Числовые переменные
Переменные могут хранить не только строки, но и числа. Если вернуться к аналогии со спичечным коробком, сохранение в переменной $count числа 17 будет эквивалентно помещению, скажем, 17 бусин в коробок, на котором написано слово count:
$count = 17;
Можно также использовать числа с плавающей точкой (содержащие десятичную точку). Синтаксис остается прежним:
$count = 17.5;
В PHP можно присвоить значение переменной $count другой переменной или вывести его с помощью браузера на экран, воспользовавшись командой echo. Оба варианта можно сравнить с открытием коробка и подсчетом бусин.
Массивы
Массивы можно представить в виде нескольких склеенных вместе спичечных коробков. Например нам нужно сохранить имена пяти футболистов одной команды в массиве $team. Для этого мы склеим вместе боковыми сторонами пять коробков, запишем имена всех игроков на отдельных клочках бумаги и положим каждый клочок в свой коробок.
Вдоль всей верхней стороны склеенных вместе коробков напишем слово team (рис. 3.2). В PHP эквивалентом этому действию будет следующий код:
$team = arrayCBill', 'Mary', 'Mike', 'Chris', 'Anne');
Этот синтаксис несколько сложнее рассмотренных ранее инструкций. Код создания массива представляет собой следующую конструкцию:
array();
с пятью строками внутри круглых скобок. Каждая строка заключена в одинарные или двойные кавычки, и строки должны быть отделены друг от друга запятыми.
Рис. 3.2. Массив похож на несколько склеенных вместе спичечных коробков
Сокращенный синтаксис объявления массивов
Альтернативный сокращенный синтаксис объявления массивов предполагает использование конструкции [...] вместо array(...). Например, предыдущий массив можно записать как:
$team = ['Bill', 'Mary', 'Mike', 'Chris', 'Anne'];
Когда потребуется узнать, кто является игроком номер 4, можно воспользоваться следующей командой:
echo $team[3]; // Эта команда выведет имя Chris
Использование в предыдущем примере числа 3, а не 4 обусловлено тем, что нумерация элементов массивов в PHP начинается с нуля, поэтому номера игроков распределяются в интервале от 0 до 4.
Двумерные массивы
Диапазон использования массивов очень широк. Например, массивы могут быть не только одномерными рядами коробков, но также двумерными матрицами и даже иметь большее число измерений.
Чтобы привести пример двумерного массива, представим, что нужно отслеживать ход игры в крестики-нолики, для чего требуется структура данных, состоящая из девяти клеток, сгруппированных в квадрат 3 × 3. Чтобы представить это в виде спичечных коробков, вообразите себе девять коробков, склеенных друг с другом в матрицу, состоящую из трех строк и трех столбцов (рис. 3.3).
Теперь для каждого хода можно класть в нужные коробки клочки бумаги с крестиком или ноликом. Чтобы сделать это в коде PHP, необходимо создать массив, содержащий три других массива, как в примере 3.5, в котором массив создается для отображения уже ведущейся игры.
Пример 3.5. Определение двумерного массива
<?php
$oxo = array(array('x', ' ', 'o'),
array('o', 'o', 'x'),
array('x', 'o', ' '));
?>
Мы сделали еще один шаг к усложнению, но смысл его нетрудно понять, если усвоен основной синтаксис массива. Здесь три конструкции array() вложены во внешнюю конструкцию array(). Мы заполнили каждую строку массивом, состоящим только из одного символа: x, o или пробела. (Мы воспользовались пробелом для того, чтобы все ячейки при отображении были одинаковой ширины.)
Рис. 3.3. Многомерный массив, смоделированный с помощью коробков
Чтобы вернуть третий элемент во второй строке этого массива, можно воспользоваться следующей PHP-командой, которая отобразит символ х:
echo $oxo[1][2];
Не забывайте, что счет индексов массива (указателей на элементы внутри массива) начинается с нуля, а не с единицы, поэтому в предыдущей команде индекс [1] ссылается на второй из трех массивов, а индекс [2] — на третью позицию внутри этого массива. Эта команда вернет содержимое третьего слева и второго сверху коробка.
Как уже упоминалось, поддерживаются даже массивы с большей размерностью, получаемые путем простого создания большего количества вложенных друг в друга массивов. Но в этой книге массивы с размерностью больше двух рассматриваться не будут.
И не волнуйтесь, если прямо сейчас массивы кажутся вам чем-то чересчур сложным, потому что мы еще вернемся к ним в главе 6.
Правила именования переменных
При создании PHP-переменных следует придерживаться четырех правил.
• Имена переменных после знака доллара должны начинаться с буквы или с символа _ (подчеркивания).
• Имена переменных могут содержать только латинские буквы a–z и A–Z, цифры 0–9 и _ (подчеркивание).
• Имена переменных не должны включать пробелы. Если имя переменной нужно составить более чем из одного слова, то в качестве разделителя рациональнее всего использовать символ подчеркивания (например, $user_name).
• Имена переменных чувствительны к регистру символов. Переменная $High_Score отличается от переменной $high_score.
Чтобы позволить использование ASCII-символов, включающих диакритические знаки, PHP также поддерживает в именах переменных байты со значениями от 127 и до 255. Но пока ваш код не будет поддерживаться только теми программистами, которые знакомы с такими символами, от их применения лучше отказаться, поскольку программисты, использующие английские раскладки клавиатуры, будут испытывать трудности при доступе к таким символа
