Курс PHP для начинающих - с нуля до джуниора за 2 месяца. Жми!
base01 56

Обзор PHP и MySQL

Курс PHP для начинающих
Внимание! Данный урок устарел!
Переходите к новому уроку о том, как работает PHP.

В этой статье содержится вводное описание системы PHP и СУБД MySQL (система управления базами данных), а также описано взаимодействие этих программных продуктов. В ней приведены самые общие сведения об указанных инструментальных средствах, в частности, речь идет о том, для чего они предназначены и какое место занимают по сравнению с аналогичными программными средствами.

Кроме того, значительная часть этой статьи посвящена описанию весьма многочисленных преимуществ использования системы PHP и СУБД MySQL, взятых отдельно или применяемых в сочетании друг с другом. Приведенные здесь сведения позволяют подготовить предварительное обоснование выбора указанных программных продуктов в качестве основы для создания приложений.

Курс PHP для начинающих

Компоненты PHP-приложения

Для создания и развития динамических веб-страниц вам потребуется понимать и использовать различные технологии. Разработка динамических веб-страниц включает три основных компонента: веб-сервер, язык программирования сценариев, исполняемых на стороне сервера, и базу данных. Разрабатывая веб-приложения с применением PHP, надо понимать все три компонента. Мы начнем с элементарных сведений об истории и назначении Apache (веб-сервер), PHP (язык программирования сценариев, исполняемых на стороне сервера) и MySQL (база данных). Это поможет вам осознать, как они вписываются в общую картину разработки веб-приложений.

PHP

Язык PHP родился из потребности разрабатывать и поддерживать веб-сайты, обладающие динамической клиент-серверной функциональностью. В 1994 году Расмус Лердорф (Rasmus Lerdorf) разработал набор сценариев с открытым исходным кодом на языке Perl, которые впоследствии были переписаны на языке C и превратились в то, чем является современный язык PHP.

Язык PHP широко распространен и совместим со всеми основными операционными системами. Он прост в изучении, что делает его идеальным инструментом для начинающих веб-программистов.

Apache

Apache – это веб-сервер, который превращает запросы браузера в конечные веб-страницы и знает, как обрабатывать программный код PHP. PHP – это всего лишь язык программирования, и без поддержки веб-сервера, например Apache, у пользователей Сети нет никакой возможности получить страницы, содержащие программный код PHP.

Apache – не единственный доступный веб-сервер. Другой популярный веб-сервер – Internet Information Services (IIS) компании Microsoft, поставляемый с операционной системой Windows 2000 и ее последующими версиями. Различия между Apache и IIS сводятся, главным образом, к личным предпочтениям, хотя Apache имеет бесспорные преимущества, будучи свободно распространяемым с открытым исходным кодом и неограниченной лицензией.

Мы будем работать с текущей версией – Apache 2.x, хотя версия 1.3 тоже достаточно часто используется. Веб-сервер IIS проще интегрируется с Active Directory – новейшей системой аутентификации компании Microsoft, – но применяется, в основном, для организации внутренних веб-сайтов компаний.

Такие веб-серверы, как Apache и IIS, разрабатывались для поддержки HTML-файлов, поэтому для обработки PHP-кода им нужно знать, как это делается. Веб-сервер Apache использует систему управления модулями, которая позволяет наращивать функциональность путем подгружения расширений. Веб-сервер IIS использует аналогичную концепцию, которая называется ISAPI (Internet Server Application Program Interface – интерфейс прикладного программирования интернет-сервера). Обе они позволяют обрабатывать PHP-код быстрее, чем это делалось раньше, когда веб-сервер при каждом запросе страницы с PHP-кодом запускал отдельный процесс для обращения к PHP.

Сегодня используются две основные версии Apache: 1.3 и 2. Веб-сервер Apache 2 полностью переписан и поддерживает модель управления потоками исполнения. Потоки позволяют одновременно решать несколько задач в рамках одного процесса. Это повышает скорость работы и снижает потребность в ресурсах. К сожалению, PHP пока еще не полностью совместим с многопоточной моделью исполнения. Поскольку версия Apache 2 появилась достаточно давно, можно считать ее достаточно стабильной для использования в разработках и эксплуатации.

Преимущество Apache – и его способность работать в операционных системах, отличных от Windows, что подводит нас к разговору о совместимости. Но перед этим мы также вкратце рассмотрим реляционные базы данных и язык SQL.

SQL и реляционные базы данных

Язык структурированных запросов (Structured Query Language, SQL) – самый распространенный язык, предназначенный для записи, извлечения, обновления и удаления информации в системах управления реляционными базами данных. Реляционная означает, что база данных соответствует реляционной модели, и относится к схеме и принципам хранения данных. Схема описывает структуру хранимых данных.

Реляционная база данных представляет собой набор таблиц, однако достаточно часто в состав базы данных входят и другие элементы, позволяющие дополнительно влиять на организацию и структуру данных в соответствии с определенным набором требований.

MySQL – это полнофункциональная свободно распространяемая система управления реляционными базами данных. MySQL начали разрабатывать в 1990-х годах, поскольку потребность в разумном управлении компьютерной информацией постоянно росла. Разработчики ядра MySQL пытались решить эту проблему с помощью маленькой и простой базы данных mSQL. Когда выяснилось, что mSQL не справляется со всеми задачами, которые создателям хотелось на нее возложить, они создали более мощную базу данных, которая превратилась в MySQL.

MySQL поддерживает несколько различных механизмов базы данных (database engines). Механизмы базы данных определяют, как MySQL в данный момент обрабатывает хранение и извлечение данных. Как следствие, каждый механизм хранения обладает собственным набором возможностей и преимуществ. Со временем имеющиеся механизмы базы данных становятся все более мощными и быстрыми.

В таблице ниже указано, когда в MySQL добавлялись разные функциональные возможности:

Основные версии MySQL
Версия Возможности
3.23

В качестве механизма по умолчанию добавлен механизм базы данных MyISAM. Эффективно обрабатывает большие объемы данных. Дебютировал механизм базы данных InnoDB для безопасного выполнения транзакций и поддержки внешних ключей (foreign keys). Внешние ключи позволяют организовать однозначные взаимоотношения между таблицами базы данных

4.0

Появилась поддержка объединений (union) в запросах. Объединения позволяют совместить результаты двух запросов. Стало возможным изменять конфигурацию (настройки) без перезапуска базы данных

4.1

Появилась новая команда help для клиентов базы данных. Добавлена поддержка неименованных обзоров (unnamed views), также называемых подзапросами (subquery). Неименованные обзоры позволяют рассматривать запрос как отдельную таблицу внутри другого запроса. Появилась поддержка наборов символов Юникода

5.0

Добавлены триггеры (triggers), хранимые процедуры (stored procedures), механизмы обеспечения ссылочной целостности (constraints) и курсоры (cursors).

Триггер позволяет запускать выполнение некоторого кода в базе данных при определенном событии, например при вставке данных в таблицу. Хранимые процедуры – это способ определения и запуска программ внутри базы данных. Механизмы обеспечения ссылочной целостности дают возможность определять правила добавления и изменения записей в базе данных. Курсоры позволяют запускать выполнение некоторого кода в базе данных для каждой строки, соответствующей запросу

5.1

Добавлены механизмы секционирования (partitioning) и планирования (scheduling), интерфейс модулей расширения (Plug-in API) и механизм построчной репликации (row-based replication).

Механизм секционирования позволяет разбивать физические хранилища крупных таблиц на основе определенных правил. Обычно применяется для ускорения производительности при работе с такими крупными таблицами, как архивы. Механизм планирования дает возможность запускать программный код, находящийся в базе данных, в определенные моменты времени.

Интерфейс модулей расширения предоставляет возможность расширять или сужать функциональность сервера MySQL без его перезапуска. Механизм построчной репликации позволяет копировать данные между серверами с применением низкоуровневых операций.

Действующей версией MySQL считается последняя доступная версия 5.x. MySQL 5.x по производительности сопоставима с любой из гораздо более дорогих баз данных уровня предприятия, например Oracle, Informix, DB2 (IBM) или SQL Server (Microsoft). Такое повышение производительности стало возможным благодаря усилиям многих талантливых разработчиков открытого исходного кода, а также тестированию в сообществе. Механизм базы данных по умолчанию MyISAM прекрасно справляется с основными задачами баз данных, связанных с веб-приложениями.

Совместимость

Такие веб-браузеры, как Safari, Firefox, Opera, Google Chrome и Internet Explorer, предназначены для обработки документов в формате HTML, и им все равно, под управлением какой операционной системы работает веб-сервер.

Apache, PHP и MySQL рассчитаны на поддержку многих операционных систем, поэтому вы не ограничены выбором какой-то определенной операционной системы для сервера или клиента. От беспокойства по поводу совместимости программного обеспечения вы избавлены.

Курс PHP для начинающих

Запрос данных веб-страницы

Бывает непросто понять, как все эти составные части работают вместе. Если веб-сервер обнаруживает PHP-код, он пытается определить, не является ли данный файл файлом PHP-сценария. Если это так, файл передается для обработки интерпретатору PHP без какого-либо участия со стороны браузера. Но если в HTML-файле есть ссылка на внешний CSS-файл, то прежде чем отобразить страницу, браузер отдельно пошлет запрос, чтобы получить эту таблицу стилей.

Обработка PHP-кода сервером называется обработкой на стороне сервера. Запрашивая веб-страницу, вы запускаете целую цепь событий. Это взаимодействие между вашим локальным компьютером и веб-сервером (находящимся на веб-хосте в Интернете) иллюстрируется на рисунке:

Пользователь только вводит URL и нажимает клавишу Enter, а обработка запроса выполняется "за кадром" в несколько шагов

Описание шагов, приведенных на рисунке:

  1. Вы вводите в адресной строке браузера адрес веб-страницы.

  2. Браузер разбивает адрес на составляющие и отправляет имя страницы веб-серверу. Например, после ввода адреса /index.html серверу www.addphp.ru будет отправлен запрос на получение страницы index.html.

  3. Программа на веб-сервере, называемая процессом веб-сервера, принимает запрос на получение страницы index.html и находит требуемый файл.

  4. Веб-сервер читает файл index.html с жесткого диска.

  5. Веб-сервер возвращает браузеру содержимое файла index.html.

  6. Браузер формирует внешний вид страницы на экране вашего компьютера в соответствии с разметкой HTML, полученной от веб-сервера.

HTML-файл с именем index.html (который запрашивается на рисунке) называется статической веб-страницей, потому что любой, кто запросит страницу index.html, получит точно такую же страницу.

Если веб-сервер должен настроить возвращаемую страницу, к набору добавляются PHP и MySQL. На рисунке ниже показаны добавочные шаги в последовательности событий на веб-сервере:

Совместные действия интерпретатора PHP, MySQL и веб-сервера по созданию страницы

Описание всех шагов последовательности:

  1. Вы вводите адрес веб-страницы в адресной строке браузера.

  2. Браузер разбивает адрес на составляющие и отправляет имя страницы веб-серверу.

  3. Процесс веб-сервера на хосте принимает запрос на получение страницы index.php.

  4. Веб-сервер считывает файл index.php с жесткого диска хоста.

  5. Веб-сервер определяет, что это сценарий PHP, а не простой HTML-файл, и поэтому передает его на обработку другому процессу – интерпретатору PHP.

  6. Интерпретатор PHP исполняет PHP-код, который он обнаружил в тексте, полученном от процесса веб-сервера. Этот код включает в себя обращения к базе данных MySQL.

  7. Интерпретатор PHP запрашивает у процесса базы данных MySQL обработку обращений к базе данных.

  8. Процесс базы данных MySQL возвращает результаты запроса к базе данных.

  9. Интерпретатор PHP завершает исполнение PHP-кода, добавляя данные, полученные из базы данных, и возвращает результат процессу веб-сервера.

  10. Веб-сервер возвращает результат браузеру в виде HTML-текста.

  11. Веб-браузер формирует внешний вид веб-страницы на экране вашего компьютера в соответствии с полученным HTML-текстом.

Может показаться, что шагов многовато, тем не менее, все это автоматически выполняется всякий раз, когда запрашивается веб-страница, содержащая PHP-код. Фактически, описанный процесс может неоднократно повторяться для одной веб-страницы, если она содержит много изображений и определений CSS, поскольку каждое из них браузер получает посредством отдельного запроса к веб-серверу.

При разработке динамических веб-страниц вам придется работать с множеством переменных и компонентов сервера, играющих важную роль в создании привлекательного, удобного для навигации и сопровождения веб-сайта. В следующей статье мы покажем, как установить все три основных компонента, необходимых для этой работы: Apache, PHP и MySQL.

Курс PHP для начинающих

Преимущества использования PHP и СУБД MySQL

Количество различных базовых систем, на которых могут быть сформированы веб-приложения, довольно велико. В настоящем разделе приведено сравнение PHP с некоторыми другими базовыми системами и отмечены сильные стороны системы PHP и СУБД MySQL.

Стоимость

PHP — один из языков, обозначенных буквой "P" в аббревиатуре LAMP, которая представляет широко применяемый стек программ. В стек LAMP входят такие распространенные программные продукты, как Linux, Apache, MySQL и PHP/Perl/Python, которые эксплуатируются на многих веб-сайтах и поддерживают много веб-приложений.

Значительная часть компонентов стека LAMP предоставляется бесплатно, и система PHP не составляет исключения. Под бесплатным предоставлением системы PHP подразумевается, что не нужно платить за предоставляемую возможность проводить разработку на языке PHP и эксплуатировать программы, разработанные на этом языке.

Разумеется, лицензия на СУБД MySQL предоставляется на других условиях, которые не всегда допускают отсутствие платы, но в любом случае остается возможность получить выпуск Community Server бесплатно. Разработчики СУБД MySQL предлагают несколько уровней контрактов поддержки на свой сервер базы данных. Более подробные сведения можно получить по адресу www.mysql.com.

И система PHP, и СУБД MySQL могут эксплуатироваться на многих разновидностях базовых систем, включая различные варианты Linux, Microsoft Windows и др. Использование этого программного обеспечения в такой операционной системе, как Linux, позволяет получить в свое распоряжение полностью бесплатную базовую систему эксплуатации веб-приложений, для приобретения которой не требуется никаких предварительных расходов.

Безусловно, рассуждая о разработке программного обеспечения и прикладных платформах, следует учитывать, что предварительные расходы на лицензирование программного обеспечения в любом случае составляют лишь часть совокупной стоимости владения. Но долгие годы практического использования Linux, Apache, MySQL и PHP в производственной среде показали, что общая стоимость поддержки этих базовых систем является более низкой и во много раз ниже по сравнению с поддержкой инфраструктуры, основанной на коммерческом, платном программном обеспечении.

Удобство в использовании

Сравнение с многими другими языками программирования показывает, что язык PHP зачастую позволяет быстрее разрабатывать мощные веб-приложения (в этом состоит одновременно его благословение и проклятье). В языке PHP уже заранее определены многие из наиболее полезных специализированных функций (например, предназначенных для создания соединения с базой данных Oracle или выборки электронной почты с сервера IMAP). А изучение этого языка значительно упрощается благодаря наличию огромного количества готовых сценариев, с которыми можно ознакомиться, чтобы узнать, как проще всего составить ту или иную программу.

Язык PHP является легким для изучения, а программы на этом языке могут быть легко созданы, особенно теми разработчиками, которые имеют хотя бы небольшой опыт работы на языке программирования с синтаксисом, подобным языку C. В связи с этим язык PHP осваивать ненамного сложнее, чем язык HTML. Начинающие программисты получают возможность приступать к продуктивной работе, не пройдя достаточно полного обучения и не накопив опыта, поэтому иногда допускают ошибки, которые в дальнейшем вырастают в крупные проблемы защиты. В этом и состоит проклятие PHP.

А что касается СУБД MySQL, то для программистов, не имеющих опыта работы с реляционными базами данных или знакомых лишь с такой средой, как Microsoft Access, интерфейс командной строки этой СУБД, а также отсутствие готовых структурных решений могут на первый взгляд показаться довольно обескураживающими. В СУБД MySQL предусмотрено несколько инструментов с графическим интерфейсом пользователя, позволяющих упростить работу с базами данных. Однако какие бы то ни было графические инструментальные средства не заменят изучения теории и не подскажут, в чем заключаются методы качественного проектирования.

Использование кода PHP, встроенного в код HTML

Код PHP может быть встроен в код HTML. Иными словами, сценарии формирования страниц, написанные на языке PHP, представляют собой обычные сценарии вывода страниц в коде HTML, в которых по мере необходимости осуществляется переход в режим обработки кода PHP. Ниже приведен пример подобного сценария:

Исходный код
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Простой документ</title>
</head>
<body>
<p>Привет, 
<?php
// В этом участке кода произошел переход в режим PHP. Вместо статических 
// переменных в следующих трех строках кода вполне можно было применить 
// вызовы запросов к базе данных или функции для работы с cookie-файлами;
// еще один вариант состоит в том, что значения переменных могут быть переданы из формы.
$firstname = 'Иван';
$lastname = 'Петров';
$shortname = 'И.';

echo "$shortname $lastname";
// Все прошло успешно, и теперь происходит возврат в режим HTML
?>
. Мы знаем кто вы! Вас зовут <?php echo $firstname; ?>.</p>

<p>Вы посетили эту страницу <?php echo date('Y-m-d H:i:s'); ?></p>
</body>
</html>

После того как клиент запрашивает эту страницу, веб-сервер выполняет ее предварительную обработку. Это означает, что сервер просматривает страницу от начала и до конца, отыскивает фрагменты кода PHP и предпринимает попытки обработать эти фрагменты.

Одной из важных составляющих обработки является то, что синтаксический анализатор запоминает все переменные (обозначенные префиксами в виде знака доллара) и присвоенные им значения, чтобы в конечном итоге подставить вместо параметров вызова функций PHP (в данном случае функции echo) значения этих переменных. Если все операции обработки завершаются успешно, то препроцессор языка PHP в конечном итоге передает в клиентский браузер обычную HTML-страницу, которая отображается, как показано на рисунке:

Результат вывода кода HTML, полученного после предварительной обработки кода PHP

Исходный код страницы, приведенной на рисунке, в клиентском браузере будет выглядеть, как показано ниже (для такого просмотра необходимо выбрать команду "Просмотр кода страницы" в контекстном меню браузера):

Исходный код страницы в браузере пользователя

Этот код полностью совпадает с тем, который бы отобразился в браузере, если бы эта страница была написан в коде HTML вручную. Поэтому все — очень просто!

Возможность внедрения кода PHP в код HTML влечет за собой целый ряд описанных ниже важных последствий:

  • Код PHP может быть быстро добавлен к коду, сформированному с помощью программы редактирования с интерфейсом непосредственного отображения (WYSIWYG).

  • Благодаря использованию языка PHP может быть обеспечено разделение труда между дизайнерами страниц и составителями сценариев.

  • Код HTML можно применять непосредственно, а не перезаписывать его для вывода с помощью какого-либо языка программирования.

  • Язык PHP позволяет сократить трудозатраты и повысить эффективность труда, поскольку способствует ускоренному обучению и является простым в использовании.

Межплатформенная совместимость

Система PHP и СУБД MySQL могут эксплуатироваться в непосредственном виде во всех широко применяемых разновидностях операционной системы Linux/Unix (включая Mac OS X) и Windows. Под управлением операционных систем этих двух классов функционирует подавляющее большинство серверов, работающих по протоколу HTTP (Hypertext Transfer Protocol - протокол передачи гипертекстовых файлов), которые применяются во всем мире.

Система PHP совместима с двумя ведущими веб-серверами: HTTP-сервер Apache для Linux/Unix и Windows, а также сервер IIS (Internet Information Server) корпорации Microsoft для Windows. Кроме того, система PHP применяется с несколькими менее известными серверами. Что же касается СУБД MySQL, то при ее эксплуатации не требуется обеспечивать совместимость с каким-то конкретным веб-сервером, поскольку всю необходимую для этого работу выполняет интерпретатор PHP.

Стабильность

В данном контексте под словом "стабильность" подразумеваются две описанные ниже особенности системы:

  • Отсутствует необходимость часто выполнять перезагрузку или перезапуск сервера.

  • Не происходят принципиальные изменения в программном обеспечении, и после перехода с одного выпуска на другой не возникают несовместимости.

К счастью, оба эти аспекта определения понятия стабильности относятся и к СУБД MySQL, и к системе PHP.

Сервер Apache в целом рассматривается как наиболее стабильный из всех основных веб-серверов и обладает надежной репутацией сервера, имеющего самое завидное соотношение времени безотказной работы к времени простоя. К тому же чаще всего перезагрузка сервера не требуется и при каждом изменении параметров настройки. Система PHP обладает такой же надежностью, кроме того, реализация данной системы, хотя и не требует для своей работы большого объема ресурсов, является очень устойчивой.

Система PHP и СУБД MySQL соответствуют также той части определения понятия стабильности, которая касается постоянства состава средств. Группы разработчиков, взявших на себя ответственность за дальнейшее развитие этих систем, уже давно достигли абсолютно четкого понимания дальнейших перспектив развития своих проектов и не поддаются соблазнам, из-за которых им пришлось бы отвлекаться на реализацию каждого нового модного течения и каждого неправильно понятого требования пользователей, которое может быстро появиться и столь же быстро исчезнуть.

Основная часть усилий разработчиков PHP направлена на постепенное наращивание производительности, обеспечение взаимодействия со все более крупными базами данных и введение лучших средств поддержки сеансов. А что касается MySQL, то разработчики этой СУБД в последнее время дополнительно ввели хорошо продуманные и долгожданные новые средства, достигнув существенного расширения возможностей указанного программного продукта. Но все эти усовершенствования применительно и к системе PHP, и к СУБД MySQL практически никогда не приводят к нарушению их совместимости.

Большое количество расширений

Система PHP позволяет легко решить задачу обеспечения взаимодействия с другими программами и протоколами. Создается впечатление, что группа разработчиков PHP добровольно взяла на себя обязанности предоставить максимальные возможности наибольшему количеству пользователей.

Особенно впечатляющими являются средства доступа к базам данных, поскольку в системе PHP предусмотрена поддержка на уровне собственных драйверов примерно для пятнадцати наиболее широко применяемых баз данных, не считая поддержки на основе интерфейса ODBC (Open DataBase Connectivity - открытый интерфейс взаимодействия с базами данных).

Кроме того, система PHP обеспечивает взаимодействие с помощью большого количества таких важных протоколов, как POP3, IMAP и LDAP. В выпущенных ранее версиях PHP введена поддержка для Java и распределенных объектных архитектур, таких как COM (Component Object Model — модель компонентных объектов Microsoft) и CORBA (Common Object Request Broker Architecture — общая архитектура брокера запросов к объектам), благодаря чему впервые появилась возможность разработки n-уровневых систем; включена полная графическая библиотека GD и обновлена поддержка XML (Extensible Markup Language — расширяемый язык разметки) наряду с технологиями DOM и simpleXML.

Быстрая реализация новых средств

Пользователи технологий разработки для веб, основанных на использовании программного обеспечения, принадлежащего частным компаниям, иногда испытывают разочарование из-за того, насколько медленно новые средства реализуются в официальном стандарте на данный программный продукт для поддержки развивающихся технологии. Но применительно к системе PHP такая проблема не возникает. В рамках этого проекта есть все, что требуется для ввода в действие нового важного функционального средства — разработчики, компиляторы языка C и горячий энтузиазм.

Это не означает, что группа разработчиков PHP принимает в состав официального дистрибутива любой случайный вклад, сделанный отдельным разработчиком, без согласования с сообществом пользователей, но независимых разработчиков никто не лишает права распространять собственные расширения, чем они с успехом и занимаются, для того чтобы в дальнейшем такое расширение могло войти в основной пакет PHP, приобретя более или менее унифицированную форму.

Например, изящное расширение xmlrpc-epi, предложенное Дэном Либби (Dan Libby), было принято в состав дистрибутива PHP в версии 4.1 через несколько месяцев после того, как было впервые выпущено в виде независимого пакета.

Кроме того, разработка системы PHP ведется постоянно и непрерывно. Безусловно, в ходе этой разработки возникают важные переходные моменты, такие как замена версии PHP4 версией PHP5, но крупные модификации главным образом касаются внутреннего устройства синтаксического анализатора, а работа над главными расширениями продолжается без каких-либо существенных проблем фактически даже на протяжении всего подобного переходного периода.

Установка сервера для разработки

Комментарии (0)

Результаты поиска по запросу

Система Orphus