Также при подготовке статьи использовались материалы из www.webreview.com и www.devshed.com.
Некоторые пункты являются переводами из этих источников.
Что такое PHP?
PHP – это скрипт-язык (scripting language), встраиваемый в HTML, который
интерпретируется и выполняется на сервере. Проще всего это показать на
примере:
Example
?php
echo "Hi, I'm a PHP script!";
?>
После выполнения этого скрипта мы получим страничку, в которой будет
написано
Hi, I'm a PHP script!
Весьма просто и бесполезно.
Основное отличие от CGI-скриптов, написанных на других языках, типа Perl или
C – это то, что в CGI-программах вы сами пишете выводимый HTML-код, а, используя
PHP – вы встраиваете свою программу в готовую HTML-страницу, используя
открывающий и закрывающий теги (в примере ?php и ?).
Отличие PHP от JavaScript, состоит в том, что PHP-скрипт выполняется на
сервере, а клиенту передается результат работы, тогда как в JavaScript-код
полностью передается на клиентскую машину и только там
выполняется.
Любители Internet Information Server найдут, что PHP очень похож
на Active Server Pages (ASP), а
энтузиасты Java скажут, что PHP похож на Java Server Pages (JSP). Все три языка
позволяют размещать код, выполняемый на Web-сервере, внутри HTML
страниц.
Возможности PHP
В нескольких словах – на PHP можно сделать все, что можно сделать с помощью
CGI–программ. Например: обрабатывать данные из форм, генерировать динамические
страницы, получать и посылать куки (cookies).
Кроме этого в PHP включена поддержка многих баз данных (databases), что
делает написание Web-приложений с использованием БД до невозможности
простым.
Вот неполный перечень поддерживаемых БД:
Adabas D
InterBase
Solid
dBase
mSQL
Sybase
Empress
MySQL
Velocis
FilePro
Oracle
Unix dbm
Informix
PostgreSQL
Вдобавок ко всему PHP понимает протоколы IMAP, SNMP, NNTP, POP3 и даже HTTP,
а также имеет возможность работать с сокетами (sockets) и общаться по другим
протоколам.
Краткая история PHP
Началом PHP можно считать осень 1994 года, когда Rasmus Lerdorf решил
расширить возможности своей Home-page и написать небольшой движок для выполнения
простейших задач. Такой движок был готов к началу 1995 года и назывался Personal
Home Page Tools. Умел он не очень много – понимал простейший язык и всего
несколько макросов.
К середине 1995 года появилась вторая версия, которая называлась
PHP/FI Version 2. Приставка FI – присоединилась из другого пакета Rasmusa,
который умел обрабатывать формы (Form Interpritator). PHP/FI компилировался
внутрь Apache и использовал стандартный API Apache. PHP скрипты оказались
быстрее аналогичных CGI – скриптов, так как серверу не было необходимости
порождать новый процесс. Язык PHP по возможностям приблизился к Perl, самому
популярному языку для написания CGI-программ. Была добавлена поддержка множества
известных баз данных (например, MySQL и Oracle). Интерфейс к GD – библиотеке, позволял генерировать картинки на
лету. С этого момента началось широкое распространение PHP/FI.
В конце 1997 Zeev Suraski и Andi Gutmans решили переписать внутренний движок,
с целью исправить ошибки интерпретатора и повысить скорость выполнения скриптов.
Через полгода, 6 июня 1998 года вышла новая версия, которая была названа PHP 3.
К лету 1999 года PHP 3 был включен в несколько коммерческих продуктов. По
данным NetCraft на ноябрь 1999 PHP использовался в более чем 1 млн. доменах.
На сегодняшний день (декабрь 1999) готовится к выпуску новая версия PHP 4, в
которой внутренний движок будет снова переписан (он имеет название Zend).
Предполагается, что производительность новой версии будет в десятки раз выше чем
у существующей.
Почему нужно выбирать PHP
Разработчикам Web-приложений нет необходимости говорить, что
web-страницы - это не только текст и картинки. Достойный внимания сайт должен
поддерживать некоторый уровень интерактивности с пользователем : поиск
информации, продажа продуктов, конференции и т.п. Традиционно все это
реализовалось CGI-скриптами, написанными на Perl. Но CGI- скрипты очень плохо
масштабируемы. Каждый новый вызов CGI, требует от ядра порождения нового
процесса, а это занимает процессорное время и тратит оперативную память. PHP
предлагает другой вариант – он работает как часть Web-сервера, и этим самым
похож на ASP от
Microsoft.
Синтаксис PHP очень похож на синтаксис C или Perl. Люди, знакомые с
программированием, очень быстро смогут начать писать программы на PHP. В этом
языке нет строгой типизации данных и нет необходимости в действиях по
выделению/освобождению памяти.
Программы, написанные на PHP, достаточно легкочитаемы. Написанный PHP – код
легко зрительно прочитать и понять, в отличие от
Perl-программ.
Недостатки PHP
Основным недостатком PHP 3, есть то, что по свой идеологии
PHP изначально был ориентирован на написании небольших скриптов. Несмотря на
то, что движок несколько раз переписывался, PHP 3 не пригоден для
использования в сложных проектах – при обработке больших скриптов
производительность системы резко падает (предчувствуя возмущение сторонников
PHP 3, я скажу, что наличие такого недостатка подтверждает сам разработчик
Zeev Suraski). Однако этот недостаток будет ликвидирован в движке
PHP 4, который, по словам того же
разработчика, предназначен для работы в больших проектах.
PHP является интерпретируемым языком, и, вследствие этого, не может
сравниться по скорости с компилируемым С. Однако при написании небольших
программ, что, в общем-то, присуще проектам на PHP, когда весь проект состоит
из многих небольших страниц с кодом, вступают в силу накладные расходы на
загрузку в память и вызов CGI-программы, написанной на С.
Не такая большая база готовых модулей, как, например, СPAN у Perl. С этим
ничего нельзя поделать – это дело времени. В PHP 4 разработчики предусмотрели
специальный репозиторий, аналогичный CPAN, и я думаю, очень скоро будет
написано достаточное количество модулей для его наполнения.
Нет поддержки сессий (session), как, например, в ASP. В PHP 4 этот
недостаток будет устранен.
Что такое MySQL.
MySQL – компактный многопоточный сервер баз данных. MySQL характеризуется
большой скоростью, устойчивостью и легкостью в использовании.
MySQL был разработан компанией TcX для внутренних нужд, которые
заключались в быстрой обработке очень больших баз данных. Компания утверждает,
что использует MySQL с 1996 года
на сервере с более чем 40 БД, которые содержат 10,000 таблиц, из которых более
чем 500 имеют более 7 миллионов строк.
MySQL является идеальным решением для малых и средних приложений. Исходники
сервера компилируются на множестве платформ. Наиболее полно возможности сервера
проявляются на Unix-серверах, где есть поддержка многопоточности, что дает
значительный прирост производительности.
На текущий момент MySQL все еще в стадии разработки, хотя версии 3.22
полностью работоспособны.
MySQL-сервер является бесплатным для некоммерческого использования. Иначе
необходимо приобретение лицензии, стоимость которой составляет 190
EUR.
Возможности MySQL
MySQL поддерживает язык запросов SQL в стандарте ANSI 92, и кроме этого имеет
множество расширений к этому стандарту, которых нет ни в одной другой СУБД.
Краткий перечень возможностей MySQL.
Поддерживается неограниченное количество пользователей, одновременно
работающих с базой данных.
Количество строк в таблицах может достигать 50 млн.
Быстрое выполнение команд. Возможно MySQL самый быстрый сервер из
существующих.
Простая и эффективная система безопасности.
MySQL действительно очень быстрый сервер, но для достижения этого
разработчикам пришлось пожертвовать некоторыми требованиями к реляционным
СУБД. В MySQL отсутствуют:
Поддержка вложенных запросов, типа SELECT * FROM table1 WHERE id IN
(SELECT id FROM table2). Утверждается, что такая возможность будет в версии
3.23.
Не реализована поддержка транзакций. Взамен предлагается использовать
LOCK/UNLOCK TABLE.
Нет поддержки внешних (foreign) ключей.
Нет поддержки триггеров и хранимых процедур.
Нет поддержки представлений (VIEW). В версии 3.23 планируется
возможность создавать представления.
По словам создателей именно пункты 2-4 дали возможность достичь высокого быстродействия. Их реализация существенно снижает скорость сервера. Эти возможности не являются критичными при создании Web-приложений, что в сочетании с высоким быстродействием и малой ценой позволило серверу приобрести большую популярность.
Примеры использования PHP
Работа с формами
В этом примере показано как в PHP легко обрабатывать данные с HTML –
форм.Создадим простой HTML файл.
Запрос
информации
Хотите больше
знать о наших товарах?
Назовем этот файл request.html. В нем мы указали, что данные формы будут
обрабатываться файлом email.php3. Приведем его содержание:
? /* Этот скрипт получает переменные
из request.html */ PRINT "
"; PRINT "Привет,
$name."; PRINT "
"; PRINT "Спасибо за ваш
интерес.
"; PRINT "Вас интересуют $preference. Информацию
о них мы пошлем вам на email: $email."; PRINT
"
"; ?>
Теперь, если пользователь вызовет request.html и наберет в форме
имя “Вася”, email: vasya@pupkin.com и скажет, что
его интересуют “Яблоки”, а после этого нажмет "Отправить запрос!", то в ответ
вызовется email.php3, который выведет на экран примерно
следующее:
Привет, Вася
Спасибо за ваш интерес.
Вас интересуют Яблоки. Информацию о них мы пошлем
вам на email: vasya@pupkin.com
Теперь мы должны сдержать обещание и выслать email.
Для этого в PHP есть функция MAIL.
Синтаксис: void mail(string to, string subject, string message, string
add_headers);
to – email адрес получателя.
subject – тема письма.
message – собственно текст сообщения.
add_headers – другие параметры заголовка письма (необязательный
параметр).
Допишем в конец файла email.php3 следующий код:
? mail($email, "Запрос на
информацию", "$name
Спасибо за ваш интерес!
Вас интересуют
$preference
Мы их распространяем бесплатно. Обратитесь в ближайший филиал
нашей компании и получите ящик этого
продукта.
"); mail("administration@me.com", "Был запрос на
информацию.", "$name интересовали $preference
email-адрес: $email.
"); ?>
Вот теперь пользователь будет получать письмо с более подробной информацией о
наших товарах. Также письмо получит и администратор сайта.
Когда интересующихся нашими товарами станет очень много, мы
захотим их как-то упорядочить и хранить информацию о них в базе данных. Об этом
в следующем примере.
Работа с MySQL (сохранение данных в базе данных).
Для начала создаем базу данных и таблицу. Входим в MySQL, и выполняем
команды:
Для общения с MySQL из PHP понадобятся следующие функции.
int mysql_connect(string hostname, string username, string
password);
Создать соединение с MySQL.
Параметры:
Hostname – имя хоста, на котором находится база данных.
Username – имя пользователя.
Password – пароль пользователя.
Функция возвращает параметр типа int, который больше 0, если соединение
прошло успешно, и равен 0 в противном случае.
int mysql_select_db(string database_name, int
link_identifier);
Выбрать базу данных для работы.
Параметры:
Database_name – имя базы данных.
link_identifier – ID соединения, которое получено в функции mysql_connect.
(параметр необязательный, если он не указывается, то используется ID от
последнего вызова mysql_connect)
Функция возвращает значение true или false
int mysql_query(string query, int link_identifier);
Функция выполняет запрос к базе данных.
Параметры:
Query – строка, содержащая запрос
link_identifier – см. предыдущую функцию.
Функция возвращает ID результата или 0, если произошла
ошибка.
int mysql_close(int link_identifier);
Функция закрывает соединение с MySQL.
Параметры:
link_identifier – см. выше.
Функция возвращает значение true или false
Теперь наш файл email.php3 будет иметь след. вид:
? /* Этот скрипт получает переменные
из request.html */
/* создать соединение
*/ MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать
соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу
данных ");
PRINT "
"; PRINT "Привет, $name."; PRINT
"
"; PRINT "Спасибо за ваш
интерес.
"; PRINT "Вас интересуют $preference. Информацию
о них мы пошлем вам на email: $email."; PRINT "
";
/*
Отправляем email */ mail($email, "Запрос на информацию", "$namen
Спасибо
за ваш интерес!
Вас интересуют $preference
Мы их распространяем
бесплатно. Обратитесь в ближайший филиал нашей компании и получите ящик этого
продукта.
");
/* Вставить информацию о клиенте в таблицу */ $query = "INSERT
INTO $userstable VALUES('$name','$email', '$preference')";
$result =
MYSQL_QUERY($query);
PRINT "Информация о вас занесена в базу
данных.";
/* Закрыть соединение
*/ MYSQL_CLOSE(); ?>
Вот так легко можно работать с базой данных в PHP. Теперь кроме письменных
уведомлений, информация о клиенте и его интересах будет заносится в таблицу
MySQL.
Работа с MySQL (получение данных из базы данных).
После занесения данных, нас иногда будет интересовать вопрос так
кого же из наших клиентов интересует товар “Яблоки” (не путать с Apple
Macintosh, по поводу Apple Macintosh см. www.stealthcomp.com).
Напишем скрипт apple.php3
?/* Скрипт показывает клиентов, которые
яблоки любят больше чем апельсины */ $hostname = "localhost"; $username =
"myusername"; $password = "mypassword"; $dbName = "products";
/*
Таблица MySQL, в которой хранятся данные */ $userstable =
"clients";
/* создать соединение
*/ MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать
соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу
данных ");
/* Выбрать всех клиентов - яблочников */ $query = "SELECT
* FROM $userstable WHERE choice = 'Яблоки'";
$result =
MYSQL_QUERY($query);
/* Как много нашлось таких */ $number =
MYSQL_NUMROWS($result);