Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Самоучитель PHP 4 - Котеров Д. В

..pdf
Скачиваний:
92
Добавлен:
24.05.2014
Размер:
4.38 Mб
Скачать

98 Часть II. Выбор и настройка инструментария. Web-сервер Apache

extension_dir=C:\Program Files\PHP4\extensions

Здесь мы уведомляем PHP, что модули он должен искать в каталоге

C:\Program Files\PHP4\extensions, т. е. как раз там, где нужно. Обратите внимание на то, что по умолчанию в этом параметре стоит значение ./, т. е. поиск будет производиться в том же самом каталоге, где установлен PHP. Это, конечно же, неудобно.

5.Найдите "закомментированные" строки, которые начинаются с ;extension=. Вам предстоит раскрыть те из них, которые соответствуют нужным нам модулям. В этой книге описывается библиотека GD для работы с изображениями, поэтому нам обязательно понадобится модуль php_gd.dll. Поддержка MySQL и календарных функций уже встроена в PHP.

6.Не забудьте сохранить изменения в файле php.ini. Чтобы изменения вступили в силу, перезапускать Apache не нужно, ведь мы установили PHP не как модуль сервера, а как отдельную программу.

Установка MySQL

Сначала определимся: зачем же вообще нужны базы данных Web-программисту? Неужели не проще использовать обычный обмен с файлами? Ведь обычно объем данных не очень велик (если вы только не пишите поисковую систему). Наш личный опыт таков: оказывается, стоит затратить какое-то время на изучение MySQL — это удивительно мощный инструмент, который сэкономит в будущем немало часов, потраченных на отладку "вышедшего из-под контроля" сценария.

Итак, вы решили установить у себя на локальном хосте поддержку MySQL. Это довольно несложно. Что ж, приступим.

1.Для начала загрузите с официального сайта MySQL (http://www.mysql.com, раздел Downloads) дистрибутив MySQL. Рекомендую выбрать самую последнюю версию для Windows. Дистрибутив представляет собой zip-архив, который нужно развернуть в любой удобный вам каталог.

2.Запустите setup.exe из только что разархивированного дистрибутива. Нажмите кнопку Next (рис. 5.4).

3.В появившемся информационном окне снова нажмите Next. Откроется диалог с запросом о выборе каталога для MySQL. По умолчанию предлагается C:\mysql, но, мне кажется, будет удобнее использовать C:\Program Files\MySQL (рис. 5.5). Задайте этот каталог и нажмите Next.

Глава 5. Установка PHP и MySQL

99

Рис. 5.4. Установка MySQL

4.Выберите тип установки Typical. Начнется копирование файлов MySQL. Дождитесь его окончания. MySQL установлена.

Рис. 5.5. Выбор каталога для MySQL

5.Для того чтобы активизировать MySQL-сервер, запустите исполняемый файл

C:\Program Files\MySQL\bin\mysqld.exe. Можете создать для него ярлык,

однако, поскольку обычно MySQL работает "в связке" с Apache, будет логично создать командный файл, который будет стартовать и Apache, и MySQL. Назовем его server.bat и расположим в корневом каталоге диска z:. Вот содержание этого файла:

100

Часть II. Выбор и настройка инструментария. Web-сервер Apache

Листинг 5.2. Файл server.bat

@echo off

"C:\Program Files\MySQL\bin\mysqld"

start /m "C:\Program Files\Apache Group\Apache\Apache"

Для операционных систем Windows NT и Widows 2000, однако, будет удобнее использовать несколько другие команды (иначе в этих системах окно процесса MySQL будет постоянно видно на экране, что нежелательно):

@echo off

start C:\Progra~1\MySQL\bin\mysqld-nt --standalone C:\Progra~1\Apache~1\Apache\Apache -k start

Именно для приведенного командного файла лучше всего и создать ярлык, назначив ему "горячую" клавишу <Ctrl>+<Alt>+<A> (только если вы до этого связали ту же комбинацию с ярлыком Apache, не забудьте ее там отключить).

6.Перед выключением или перезагрузкой компьютера нужно завершать работу Apache и MySQL. Для этого удобнее всего создать следующий bat-файл с именем, например, shutdown.bat, расположив его в корневом каталоге диска z:.

Листинг 5.3. Файл shutdown.bat

@echo off

"C:\Program Files\Apache Group\Apache\Apache" -k shutdown "C:\Program Files\MySQL\bin\mysqladmin" -u root shutdown

Удобно также определить для этого файла ярлык и назначить ему комбинацию клавиш <Ctrl>+<Alt>+<S>.

Тестирование MySQL

Давайте теперь проверим, все ли работает. Для начала запустите наш файл server.bat, чтобы активизировать сервер. Создайте следующий PHP-сценарий с именем mysql.php в каталоге z:\home\localhost\www.

Листинг 5.4. Файл mysql.php

<?

define("DBName","test");

define("HostName","localhost");

define("UserName","root");

define("Password",""); if(!mysql_connect(HostName,UserName,Password))

Глава 5. Установка PHP и MySQL

101

{echo "Не могу соединиться с базой ".DBName."!<br>"; echo mysql_error();

exit;

}

mysql_select_db(DBName);

//Создаем таблицу t. Если такая таблица уже есть,

//сообщение об ошибке будет подавлено, т. к.

//используется "@"

@mysql_query("create table t(id int, a text)");

//Вставляем в таблицу 10 записей for($i=0; $i<10; $i++)

{ $id=time();

mysql_query("insert into t(id, a) values($id, 'Ñòð$i!')");

}

//Выводим все записи

$r=mysql_query("select * from t"); for($i=0; $i<mysql_num_rows($r); $i++)

{$f=mysql_fetch_array($r); echo "$f[id] -> $f[a]<br>\n";

}

?>

Теперь наберите в браузере:

http://localhost/mysql.php

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

Обращаю ваше внимание на константы DBName, HostName, UserName и Password. DBName должен содержать имя базы данных (в нашем случае это test — база данных, которая создается MySQL по умолчанию). HostName — всегда localhost, ведь мы работаем на локальном компьютере. В макросе UserName проще всего подставлять root, который является владельцем всех таблиц. При установке MySQL пользователю root не назначается пароль, так что константа Password равна пустой строке.

ЧАСТЬ III.

ОСНОВЫ ЯЗЫКА PHP

Глава 6

Характеристика языка PHP

Дочитав до этого места, вы уже должны проникнуться мыслью, что писать сценарии на Си, мягко говоря, неудобно. (Если подобного ощущения у вас нет, значит, я плохо написал первую часть и ее придется переделывать…).

Так на чем же писать? Многие тут же ответят: "Конечно, на том, на чем обычно пишут сценарии — на Perl!". Да, это распространенная точка зрения. Однако у Perl, наряду с его неоспоримыми достоинствами, существуют и недостатки. Причем недостатки весьма серьезные. Вот один из них: Perl не приспособлен непосредственно для программирования сценариев. Это в некотором роде универсальный язык, поэтому он не поддерживает напрямую того, чего бы нам хотелось. А вот и второй: у Perl синтаксис не способствует читабельности программы. Он не похож ни на Си, ни на Паскаль (а эти языки замечательно зарекомендовали себя как самодокументирующиеся). Вообще, я сам принадлежу к той категории людей, которые очень болезненно воспринимают непродуманный синтаксис языка программирования, отсюда и мое отноше-

ние к Perl...

PHP — язык, специально нацеленный на работу в Интернете, язык с универсальным (правда, за некоторыми оговорками) и ясным синтаксисом, удивительно похожим на Си, сочетающий достоинства Perl и Си. И хотя этот язык еще довольно молодой, он (точнее, его интерпретатор) установлен уже на порядка миллиона серверов по всему миру, и цифра продолжает расти. Новое поколение PHP — четвертое — должно вообще стереть все преимущества Perl перед PHP, как с точки зрения быстродействия обработки программ (а третья версия PHP сильно отставала от Perl при обработке больших циклов), так и с точки зрения синтаксиса. Наконец, большинство PHPсценариев (особенно не очень больших размеров) работают быстрее аналогичных им программ, написанных на Perl (конечно, если сравнивать с обычными Perlсценариями, а не программами, запускаемыми под управлением mod_perl).

Думаю, у PHP есть лишь один серьезный недостаток, который менее выражен у Perl: это — его медлительность при работе с большими и сложными сценариями. Однако работы по преодолению этой трудности давно ведутся и, если верить разработчикам PHP, версия 4 является уже компилятором, построенным примерно на том же принципе, что и компилятор Perl. Давайте поговорим на последнюю тему чуть подробнее.

106

Часть III. Основы языка PHP

Интерпретатор или компилятор?

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

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

Давайте посмотрим, как работает PHP версии 4. Получая на свой вход исходный код программы, он в первую очередь анализирует его (в частности, проверяет синтаксис)

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

Итак, мы видим, что PHP составлен из двух почти независимых блоков — транслятора и интерпретатора. Зачем же понадобилось так делать? Конечно, из соображений быстродействия. Посудите сами: синтаксический разбор осуществляется всего один раз на этапе трансляции, а исполняется уже "полуфабрикат" — байт-код, который гораздо более удобен для этих целей.

Пусть, например, в программе есть цикл с большим числом итераций. PHP версии 3, в котором отсутствует фаза трансляции, вынужден перед исполнением очередной итерации заново анализировать ее код, проводить строковый разбор, проверку синтаксиса и т. д. В то же время PHP версии 4 делает это только один раз (при трансляции кода программы), и на каждой итерации цикла занимается лишь исполнением готового байт-кода. Выигрыш очевиден, не правда ли?

Язык Perl, который практически всегда называют компилятором, работает точ- но по такой же схеме он транслирует текст программы во внутреннее пред- ставление, а затем использует результирующий код при исполнении. Так что,

Глава 6. Характеристика языка PHP

107

можно сказать, PHP версии 4 представляет собой компилятор ровно настоль- ко, насколько им является Perl.

Впрочем, описанная только что схема работы PHP не совсем соответствует действительности. Дело в том, что в языке можно создавать конструкции, которые просто физически невозможно перевести во внутреннее представление во время фазы трансляции (к таковым, например, относится инструкция включения в программу кода внешнего файла, имя которого выясняется только на этапе исполнения программы — к примеру, вводится пользователем). В этом случае PHP просто пропускает их, "откладывая на потом", и транслирует, как только до них дойдет управление. Конечно, это несколько замедляет выполнение программы, но если подобных конструкций в ней немного (и они не вставлены в цикл с большим количеством итераций), замедление не так уж и существенно.

Как вы видите, PHP версии 4 коренным образом отличается от своего предшественника — PHP версии 3. Фактически, весь код программы в очередной раз был переписан заново. При этом возникла серьезная проблема с переносимостью программ: не так-то легко обеспечить совместимость классического интерпретатора с новым транслирующим блоком (вообще, трансляторы по своей природе ограничивают свободу действий, зато привносят быстродействие). Тем не менее, разработчики PHP блестяще справились с проблемой: практически любая программа, работающая на PHP версии 3 и не использующая недокументированных возможностей языка, будет работать и на четвертой версии.

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

Я уже предвижу, что множество читателей не согласятся с такой формулиров- кой. Конечно, слово "компилятор" звучит солиднее, чем какой-то там "интер- претирующий транслятор". Но все дело в том, что английское слово compiler переводится не только как "компилятор", но также и как "транслятор". Заду- майтесь над этим, если окончательно решили для себя считать PHP и Perl компиляторами.