Что такое PHP?
PHP - это
скрипт-язык (scripting language), встраиваемый в HTML, который
интерпретируется и выполняется на сервере. Проще всего это
показать на примере:
<html> <head>
<title>Example</title> </head>
<body> <?php echo "Hi, I'm a PHP script!";
?> </body> </html>
После
выполнения этого скрипта мы получим страничку, в которой будет
написано
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 файл.
<HTML>
<HEAD> <TITLE>Запрос
информации</TITLE> <BODY> <CENTER>
Хотите больше знать о наших товарах? <P>
<TABLE WIDTH = 400><TR><TD align =
right> <FORM ACTION="email.php3" METHOD="POST">
Ваше имя:<BR> <INPUT TYPE="text" NAME="name"
SIZE=20 MAXLENGTH="30"> <P> Ваш
email:<BR> <INPUT TYPE="text" NAME="email"
SIZE=20 MAXLENGTH="30"> <P> Меня интересуют:
<SELECT NAME="preference"> <OPTION value =
"Яблоки">Яблоки <OPTION value =
"Апельсины">Апельсины </SELECT> <P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>
</BODY> </HTML>
Назовем этот файл
request.html. В нем мы указали, что данные формы будут
обрабатываться файлом email.php3. Приведем его содержание:
<? /* Этот скрипт получает переменные из
request.html */ PRINT "<CENTER>"; PRINT "Привет,
$name."; PRINT "<BR><BR>"; PRINT "Спасибо
за ваш интерес.<BR><BR>"; PRINT "Вас
интересуют $preference. Информацию о них мы пошлем вам на
email: $email."; PRINT "</CENTER>"; ?>
Теперь, если пользователь вызовет 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\n Спасибо за ваш интерес!\n
Вас интересуют $preference\n Мы их распространяем
бесплатно. Обратитесь в ближайший филиал нашей компании и
получите ящик этого продукта.\n ");
mail("administration@me.com", "Был запрос на
информацию.", "$name интересовали $preference\n
email-адрес: $email. \n"); ?>
Вот теперь
пользователь будет получать письмо с более подробной
информацией о наших товарах. Также письмо получит и
администратор сайта. Когда интересующихся нашими товарами
станет очень много, мы захотим их как-то упорядочить и хранить
информацию о них в базе данных. Об этом в следующем примере.
Работа с MySQL (сохранение данных в базе данных).
Для начала создаем базу данных и таблицу. Входим в
MySQL, и выполняем команды:
>CREATE DATABASE
products;
>CREATE TABLE clients (name VARCHAR(25),
email VARCHAR(25), choise VARCHAR(8));
Для общения с
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 */
/* Некоторые
переменные */
$hostname = "localhost"; $username =
"myusername"; $password = "mypassword"; $dbName =
"products";
/* Таблица MySQL, в которой хранятся
данные */ $userstable = "clients";
/* email
администратора */ $adminaddress = "administration@me.com";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не
могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать
базу данных ");
PRINT "<CENTER>"; PRINT
"Привет, $name."; PRINT "<BR><BR>"; PRINT
"Спасибо за ваш интерес.<BR><BR>"; PRINT "Вас
интересуют $preference. Информацию о них мы пошлем вам на
email: $email."; PRINT "</CENTER>";
/*
Отправляем email */ mail($email, "Запрос на информацию",
"$namen\n Спасибо за ваш интерес!\n Вас интересуют
$preference\n Мы их распространяем бесплатно. Обратитесь в
ближайший филиал нашей компании и получите ящик этого
продукта.\n ");
mail("administration@me.com",
"Был запрос на информацию.", "$name интересовали
$preference\n email-адрес: $email. \n");
/*
Вставить информацию о клиенте в таблицу */ $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);
/* Напечатать всех в красивом
виде*/ $i = 0;
IF ($number == 0) { PRINT
"<CENTER><P>Любителей яблок нет</CENTER>";
} ELSEIF ($number > 0) { PRINT
"<CENTER><P>Количество любителей яблок:
$number<BR><BR>"; WHILE ($i < $number){
$name = mysql_result($result,$i,"name"); $email =
mysql_result($result,$i,"email"); PRINT "Клиент $name
любит Яблоки.<BR>"; PRINT "Его Email: $email.";
PRINT "<BR><BR>"; $i++; } PRINT
"</CENTER>"; } ?>
Здесь мы
использовали две новых функции:
int mysql_num_rows(int
result);
Функция возвращает количество строк в
результате запроса.
Параметр result - содержит ID
результата запроса.
int mysql_result(int result, int
i, column);
Функция возвращает значение поля в столбце
column и в строке i.
Вот и все, коммерческий продукт
практически готов.
Комментарии
|