Статьи,обзоры,справочники по PHP

       

Вступление в PHP и MySQL.


Вадим Ткаченко (vvtk@stealthcomp.com)

Студия StealthWeb (http://web.stealthcomp.com)

Источники информации.

Основные источники – это руководство по PHP (www.php.net) и MySQL (www.mysql.com).

Также при подготовке статьи использовались материалы из www.webreview.com и www.devshed.com.

Некоторые пункты являются переводами из этих источников.

Что такое 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





  1. Основным недостатком PHP 3, есть то, что по свой идеологии PHP изначально был ориентирован на написании небольших скриптов. Несмотря на то, что движок несколько раз переписывался, PHP 3 не пригоден для использования в сложных проектах – при обработке больших скриптов производительность системы резко падает (предчувствуя возмущение сторонников PHP 3, я скажу, что наличие такого недостатка подтверждает сам разработчик Zeev Suraski). Однако этот недостаток будет ликвидирован в движке PHP 4, который, по словам того же разработчика, предназначен для работы в больших проектах.
  2. PHP является интерпретируемым языком, и, вследствие этого, не может сравниться по скорости с компилируемым С. Однако при написании небольших программ, что, в общем-то, присуще проектам на PHP, когда весь проект состоит из многих небольших страниц с кодом, вступают в силу накладные расходы на загрузку в память и вызов CGI-программы, написанной на С.
  3. Не такая большая база готовых модулей, как, например, СPAN у Perl. С этим ничего нельзя поделать – это дело времени. В PHP 4 разработчики предусмотрели специальный репозиторий, аналогичный CPAN, и я думаю, очень скоро будет написано достаточное количество модулей для его наполнения.
  4. Нет поддержки сессий (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.



  1. Поддерживается неограниченное количество пользователей, одновременно работающих с базой данных.
  2. Количество строк в таблицах может достигать 50 млн.
  3. Быстрое выполнение команд. Возможно MySQL самый быстрый сервер из существующих.
  4. Простая и эффективная система безопасности.


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

  6. Поддержка вложенных запросов, типа SELECT * FROM table1 WHERE id IN (SELECT id FROM table2). Утверждается, что такая возможность будет в версии 3.23.
  7. Не реализована поддержка транзакций. Взамен предлагается использовать LOCK/UNLOCK TABLE.
  8. Нет поддержки внешних (foreign) ключей.
  9. Нет поддержки триггеров и хранимых процедур.
  10. Нет поддержки представлений (VIEW). В версии 3.23 планируется возможность создавать представления.




  11. По словам создателей именно пункты 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.

    Вот и все, коммерческий продукт практически готов.

    Все вопросы и замечания по данной статье присылайте на E-mail: vvtk@stealthcomp.com


    Содержание раздела