МЕНЮ


ИНФО

 СТАТЬИ 

Домашняя установка Apache, Perl, PHP, MySql без проблем.

Данная статья предназначена начинающим (вероятно) web-мастерам (будь то дизайнеры, CGI или SQL программисты), желающим творить на домашнем компьютере без подключения к Интернету. И для максимального приближения условий к боевым им необходимо установить и настроить соответствующий набор программ и серверов.

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

Для программистов: нужен сервер и интерпретатор языка Perl или PHP ( зачем вам CGI? Естественно для динамического генерирования содержимого сайта. В ручную создавать сотни и тысячи страниц конечно можно ( с точки зрения индексации поисковиками это даже лучше, а шаблоны DW серьезно облегчат вам в этом жизнь ), но что если вы хотите сортировать материалы, или выдавать их на одной странице по разному, в зависимости от потребностей пользователя? ). Тем, у кого еще осталась возможность выбора я советую Perl.

Для программистов, работающих с MySql соответственно еще и MySql установить не плохо А это нужно уже тем, кого не устраивают текстовые или стандартные perl базы данных. Тем, кто хочет быстро и надежно работать с большим ( в основном количественно ) объемом данных, быстро осуществлять поиск и сортировку данных (по сравнению со стандартными базами Perl разница в скорости составляет несколько порядков, впрочем это зависит от многих параметров -- иногда Perl-базы бывают лучшим вариантом ). Всем вам я и советую изучить SQL. Если опасаетесь, что будет сложно, то сообщаю - говорить на уровне "SELECT то-то FROM оттуда-то WHERE как-то GROUP BY этак" вы сможете в первый же день.

Почему именно Апач?

  • Во первых он является одним из наиболее производительных и надежных серверов (вспомним недавние события с массовым прекращением многими серьезными компаниями использования IIS из-за дорогостоящих ошибок - с Апачем такого не бывало).
  • Во вторых он прост в установке и настройке и легко позволяет начать работу с CGI скриптами, будь они на Perl или PHP.
  • В третьих обеспечивает веб-мастерам минимальные отличия в работе под UNIX и WINDOWS системами.
  • В четвертых он наиболее распространен (у вашего хостера скорее всего web-сервер именно Apache под BSD системой).
  • Ну и в пятых он совершенно бесплатен.
Почему MySql?

Да все потому же - скорость, простота, надежность, бесплатность... Не скажу, что MySql является лидером по этим параметрам - это не так. Но все же рискну предположить, что для начинающих программистов SQL ( а также тех, кто размещает свои сайты на бесплатных хостингах ) и для не слишком требовательных проектов ( или наоборот - для требовательных например к высокой скорости потоковых INSERTов ) данная СУБД является оптимальной. Единственно, кому я категорически не советую начинать свое знакомство с СУРБД с MySQL, так это тем, чья цель изучить SQL как можно более полно. В MySQL этот самый SQL реализован (цитирую): "SQL92: Entry level only"... Причем особых улучшений в подобном положении дел похоже, что не предвидится, ибо разработчики MySQL осознанно пошли на увеличение производительности в ущерб функциональности... Для вас я советую установить PostgreeSQL, как наиболее полно ( из бесплатных СУРБД ) отвечающую стандарту ( декларируется даже совместимость с SQL98 ).

Что выбрать - Perl или PHP?

Довольно часто перед начинающими возникает такой вопрос. Правильным ответом на него (и аналогичные) является, конечно, -- попробовать и то и другое, дабы разобраться самому. Разобраться в частности, что Perl мультипарадигменный язык программирования с большими возможностями. Что тот же Perl создавался для быстрого написания программ (и программных комплексов), основной задачей которых является работа с текстом. И что Perl со своими обязанностями справляется великолепно. Изучая же PHP, программист понимает, что на звание языка программирования он не тянет. Что язык, создавался для облегчения внутристраничных web-разработок (то есть таких, что объем PHP-кода пренебрежимо мал по сравнению с HTML-кодом) и хотя с этой задачей вполне справляется, но программист редко когда ограничивает себя подобными рамками... Что есть "программирование для WEB"? Вот работа с текстом -- ясно что, а WEB? Работа со все тем же текстом, с БД и рисование картинок? Но все эти функции давно уже реализованы не то, что в Perl, но даже в shell! А сам PHP следовательно является по сути (по сути его предназначения) не языком, а лишь возможностью языка, для какого-то там частного случая...

Впрочем, если вас еще гложут сомнения (или вы наслушались высказываний знакомых программеров (знающих из скриптовых языков только PHP и считающих это нормальным) о его чудесных возможностях), то укажу основные на первый взгляд преимущества Perl перед PHP:

  • Он распространеннее и старше (кстати, PHP/FI был написан на Perl) - следовательно содержит меньше ошибок (пример: PHP3 содержал ошибку в сборщике мусора в следствии чего оного считай, что не было и любой сценарий, работающий с памятью достаточно долго мог занять ее всю), да и попросту лучше ( конечно - это мое мнение, но в этом я далеко не одинок ). Кроме того сообщения об ошибках в Perl куда как прозрачнее -- чего только стоит следующий пример: пишу (на PHP) $ref=&functionname - ессно ошибка. Какая? Parse error, expecting `T_PAAMAYIM_NEKUDOTAYIM'!. И что же, интересно узнать, делает ивритский транслит (!) в общих сообщениях?
  • Он быстрее (по сравнению с PHP3 примерно на порядок). Впрочем, если PHP не перегружен модулями, то вполне сравним с mod_perl по скорости обработки среднего размера скриптов (на малых даже обгоняет, но на больших безнадежно отстает -- на это он и не рассчитан).
  • На бесплатных хостингах чаше встречается возможность работы с Perl, чем с PHP.
  • Для Perl`а написано больше (гораздо больше) модулей и библиотек на все случаи жизни (другое дело, что (мне, например) зачастую проще самому написать программу с нуля ( если, конечно, хорошо разбираюсь в этой теме ), чем разбираться в чужом творчестве). Причем, заметьте, большинство Perl-модулей являются Perl же кодом, либо допускают их установку в каталог, отличный от системных. То есть вы можете использовать их в своих проектах без специального согласования с хостером, тогда как для PHP многие модули представляют собой бинарные библиотеки, для установки которых администратору потребуется установить модуль, поправить единый настроечный файл PHP.INI и перезагрузить apache...
  • Сев за практически любой UNIX вы там найдете Perl (а вот PHP там надо (а лучше не надо :) устанавливать). Соответственно уменьшается привязка к конкретной вашей машине.
  • Perl это универсальный язык работы с текстом ( так уж он задумывался ), с его помощью вы легко сумеете реализовать практически что угодно для этой цели. PHP же предназначен именно для работы в WEB (точнее с тем, что под оной работой обычно понимается) и ни на что другое не годен.
  • Я производил опрос на эту тему в FIDOконференциях ru.php и ru.cgi.perl... Так вот в поддержку Perl мне был предоставлен довольно большой список ( выжимку из которого вы наблюдаете выше ), а вот в поддержку PHP ничего более внятного, чем "я начал пробовать с ПХП, попробовал, убедился что работает на "5" и оставил." я не услышал... Не согласны? Пишите - обсудим.

Пожалуй PHP имеет смысл использовать только в случае уже указанных границ (незначительность размеров PHP-кода по сравнению с HTML-кодом) для выполнения мелких прикладных задач непрофессиональными программистами (например, студентами).

Установка TCP/IP

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

Если все еще есть проблемы с сетью, то RTFM NET-3-HOWTO до просветления.

Пользователей же ОС Windows читать FM увы не пошлешь, посему расскажу подробнее.

Если вы счастливый (конечно же в кавычках, но не в данном контексте) обладатель Окон семейства девяностых, то протокол устанавливается просто: Панель управления->Сеть->Протокол->Установить->TCP->OK. Все.

Для пользователей же NT будет чуть сложнее (не забываем, что сетевой карты вроде как нет - с ней и в NT проблем не будет).

Сейчас я сообщу наиболее простой (но не наиболее оптимальный, или правильный) на мой взгляд (знаете лучше - пишите) способ:

Панель управления->Службы - запоминаем все службы, что в столбце запуск имеют "Автомат".

Панель управления->Сеть->Отказываемся установить ее, если предложат->Службы-> Добавить->Служба RAS->Добавляем устройство X25->Например первое в списке-> Смотрим на вкладке протоколы появился ли TCP/IP и установлена ли на него привязка. Если нет - удаляем устройство X25 и устанавливаем другое.

Панель управления->Службы - вспоминаем все службы, что в столбце запуск имели "Автомат". Те, что только что появились изменяем на "Вручную", или вовсе "Запретить".

Протокол установлен.

Установка Apache

Загружаем дистрибутив например с http://www.apache.org/, или apache.lexa.ru. Запускаем apache_1_3_12_win32.exe (или какой там у вас), если устанавливаем в NT, то после установки инсталлируем его как сервис ( команда Apache.exe -i ).

Открываем файл conf/httpd.conf (основной файл конфигурации Апача, если я дальше буду говорить "пропишем то-то в конфиге", то я имею в виду именно этот файл).

Знакомы с Ангельским - читаем, понимаем, исправляем по себе. Иначе же прописываем путь к корневому каталогу документов (DocumentRoot "Диск:\путь\") - именно данный каталог будет вызываться по адресу http://localhost (или как вы захотите). Настройки по умолчанию задаются так:

<Directory />
Options Indexes FollowSymLinks MultiViews ExecCGI Includes
AllowOverride All
Order allow,deny
Allow from all
     </Directory>

Поясняю:
Options Indexes FollowSymLinks MultiViews ExecCGI Includes - разрешили авто индексацию каталога (выдается при отсутствии файла по умолчанию, которые определяются параметром DirectoryIndex), разрешен переход по символическим ссылкам, разрешено разное представление одного и того же документа (например на разных языках), разрешено выполнение CGI-скриптов, разрешены вставки SSI. AllowOverride All - нет ограничений на изменение настроек файлом .htaccess.

Совершенно аналогично вам необходимо настроить параметры DocumentRoot каталога, например:

DocumentRoot "I:/WEBSite" <Directory I:/WEBSite/> как вы хотите </Directory> Дописываем (если еще нет) строки: Для поддержки SSI в файлах с расширением shtml:

AddType text/html .shtml
AddHandler server-parsed .shtml

Для поддержки скриптов:

AddHandler cgi-script .cgi

Теперь оттестируем. А так как лучше всего учится на реальных примерах, то вот:

Исходные данные - есть копия сайтика www.citforum.ru (около сотни мегабайт), лежит по адресу I:\www.citforum.ru.

Хочется, чтобы сайт запускался с локального винта при вводе в броузер строки www.citforum.ru.

Правим файл /etc/hosts (это в Юнихах, в НТ же он лежит у меня в E:\WINNT\system32\drivers\etc\HOSTS, в девяностых и вовсе в C:\WINDOWS\hosts), изменяем строку
127.0.0.1 localhost
на
127.0.0.1 localhost www.citforum.ru

Это мы зарегистрировали еще одно имя для локальной машины, теперь надо чтобы сервер это понял.

Дописываем в конец конфига строки:

<VirtualHost www.citforum.ru>
DocumentRoot I:/www.citforum.ru/
</VirtualHost>

Проверяем наличие строки
NameVirtualHost 127.0.0.1

Перезапускаем Апач (возможно после перезагрузки). Открываем броузер, набираем www.citforum.ru, и...

Невозможно отобразить страницу
http://www.linkexchange.ru/cgi-bin/erle.cgi?12739?2511238

Увы - закачан был только сайт, а не реклама, а [censored] броузер MSIE поспешил обрадовать меня сообщением, что ему не удается загрузить баннер (связи с интернетом нет), без которого мы (по мнению фирмы MicroSoft) счастья в этой жизни не увидим.

Открываем FAR->S&R Plugin->Поиск c регулярными выражениями строки "<iframe.*?</iframe>" и замена ее на "" по всем HTML файлам CitForum`а.

Набираем www.citforum.ru опять и вот наконец то все в порядке...

Установка интерпретатора языка Perl

В UNIX системах Perl установлен изначально теперь практически всегда.

Для Windows же пользователей я советую загрузить последнюю версию ActiveState Perl с сайта http://www.activestate.com/. Оттуда же (а не со CPAN) загружайте и дополнительные модули (например, если вы собираетесь работать с MySQL, то я настоятельно рекомендую загрузить и установить (командой ppm имя_пакета) модуль DBI и DBD::MySql)

Распаковываем ActivePerl.zip (если вы загрузили в ZIP-архиве а не в MSI) куда желаете, запускаем install.bat (соглашаемся на все для начала).

Тестируем:
Набираем файл test.pl
#!perl.exe
print "Goodbye, cruel world!";
Запускаем его командой perl test.pl, получаем строку Goodbye, cruel world!. Радуемся.

Теперь надо заставить Апач обрабатывать CGI сценарии на этом (великолепном) языке.

Набираем файл test.cgi
#!perl.exe
print "Content-type: text/html\n\n";
print "Goodbye, cruel world!";

Кладем его в доступный серверу каталог (для которого в опциях есть атрибут ExecCGI), набираем в броузере его адрес (например mybestsite.com/test.cgi), и наблюдаем строку Goodbye, cruel world!.

Обращаю внимание на первую строку файла (#!perl.exe). Она срабатывает, если в переменной окружения PATCH прописан путь к программе perl.exe, тогда можно в общем писать даже #!perl.

Если путь не прописан, то придется писать что-то вроде
#!E:\Program Files\ActivePerl\bin\perl.exe.

Все это не особо интересно, пока вы не отправляете скрипты вашему хостеру. А у того вероятно UNIX. А в UNIX путь к интерпретатору обычно что-то типа /usr/local/bin/perl.

Что ж, каждый раз перед отправкой изменять? Конечно, и этому горю можно помочь.

Дописываем ( или просто снимаем с нее комментарий - она там есть ) в конфиг Апачу строку ScriptInterpreterSource registry

Она приказывает серверу искать путь к интерпретатору не в первой строке файла, а по ассоциации на расширение файла в реестре.

Осталось только эту ассоциацию произвести:

Проще всего было бы напрямую поправить реестр, ну да ладно -
Проводник->Вид->Параметры->Типы Файлов->Добавить->Расширение cgi, метод по умолчанию open программа где:\там она у вас\perl.exe->Оки.

Теперь первой строкой скрипта можете писать то, на чем настаивает хостер (в моем случае это #!/usr/bin/perl).

Заодно протестируем и SSI:

Создаем файл test.shtml в каталоге, где есть уже test.cgi в нем пишем <!--#include virtual="test.cgi"--> и смотрим через сервер и броузер.

Таким незамысловатым образом вы сможете вставлять в свои страницы результаты работы скриптов.

Если же указанный в параметре virtual скрипт не будет найден (или не отработается без ошибок) вам будет выдано грозное:
[an error occurred while processing this directive] потенциальное наличие чего на своем сайте мало кому может понравится. Это не сложно исправить добавив в начале страницы строку

<!--#config errmsg ="<p align-'center'>Нуу блин опять! - если не в лом <a href='mailto:мое@мыло.тут'>напишите мне</a> о том где вы это увидели</p>"--> или же можно просто <!--#config errmsg =""-->.

При вызове скрипта без SSI вы по началу будете нередко любоваться ужасным Internal Server Error 500... Я, лично, одно время успел горячо "полюбить" эту надпись. Исправить эту ошибку как правило довольно просто. Во первых нужно добиться нормального функционирования скрипта локально ( то есть без сервера ), затем ( если ошибки нас все еще тревожат ) взглянуть в логи сервера ( они, напоминаю, лежат в logs/error.log ). Если вы хотите, что бы сообщения об ошибках были более подробны, то используйте модуль CGI::Carp. Этот модуль, кстати, позволяет сохранять сообщения об ошибках в любой файл, а также отображать их прямо в окно броузера ( для этого используйте use CGI::Carp qw(fatalsToBrowser); ).

Установка интерпретатора языка PHP4

Вы все-таки меня не послушали и захотели работать с PHP? Жаль. Ну не говорите потом, что вас не предупреждали...

Загружаем (например с http://ru.php.net/). Распаковываем php-4.0.4pl1-Win32.zip (или устанавливаем php404pl1-installer.exe - или какие там у вас). Как наиболее интересный рассмотрю процесс установки из архива (в приложении к вышеуказанной версии, хотя должно работать и для последующих - читайте файл install.txt):

Копируем файл php4ts.dll в системный каталог. Дописываем к конфигу Апача строки

LoadModule php4_module E:/Program Files/php/sapi/php4apache.dll

AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php

ScriptAlias /php4/ "E:/program files/php/"
Action application/x-httpd-php4 "/php4/php.exe"

Конечно путь пишите ваш.

Копируем из каталога с PHP файл php.ini-dist (или для большей производительности php.ini-optimized) в WIN[NT/DOWS]/php.ini, и запускаем Апач консольно (сразу узнаете - есть ошибки (заносятся в файл apache/logs/error.log) или обошлось).

Набираем файл test.php:

<? print "Goodbye, cruel world!"; ?>

Запускаем - наблюдаем...
Все.

Загружаем дистрибутив базы с сервера http://www.mysql.com/.

К сожалению, windows версия mysql распространяется как SHAREWARE. Разработчики объясняют это тем, что и сама OS Windows не бесплатна (типа привыкайте платить за софт начиная с установки системы), не бесплатны и средства разработки, да и вообще писать под нее гораздо сложнее ( и соответственно дороже ), чем под *NIXы.

НО. Единственная разница между платной и бесплатной (кстати для студентов или для личного использования бесплатны все версии) версией состоит в ее несколько более медленной работе из-за включенного отладочного режима, что в домашних условиях заметить практически невозможно ( поначалу; я вот держу под mod_perl+MySQL FIDO-архив на несколько сотен тысяч сообщений, так вот эта разница в производительности практически не дает мне пользоваться базой под OS Windows ).

Устанавливаем его в C:\MySql, иначе придется создать файл c:\my.cnf со строкой [mysqld]
basedir=E:/installation-path/

Для регистрации MySql сервера аки сервис наберите bin\mysqld-shareware --install

Все.

Для теста запустим bin/mysql.exe

Наберем show databases; для просмотра доступных баз. Должны быть хотя бы MySql и test

Для доступа к базе из PERL программ лучше всего использовать модуль DBI. Для примера перепишем файл test.cgi следующим образом:

#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
print "Content-type: text/html\n\n";

my $dbh = DBI->connect("DBI:mysql:test",,)
or die "Ошибка подключения: $DBI::errstr\n";

$dbh->do("DROP TABLE IF EXISTS test");
($dbh->do("\
CREATE TABLE test (
str CHAR(11)
)
")) or die $DBI::errstr;

my $HelloWorld = $dbh->quote("Goodbye, cruel world!");
$dbh->do("INSERT INTO test (str) VALUES ($HelloWorld)")
or die $DBI::errstr;
my $sth = $dbh->prepare("SELECT * FROM test") or die $dbh->errstr;
$sth->execute() or die $sth->errstr;

print $sth->fetchrow_array;

$dbh->do("DROP TABLE test");
$sth->finish;
$dbh->disconnect;

Теперь вызываем страницу test.shtml и одним махом проверяем работу MySql,Perl,SSI и Apache.


АВТОР:  Николай Панов
E-MAIL:  author@niksite.ru
САЙТ:  http://www.niksite.ru






НОВОСТИ



РЕКЛАМА
Hosted by uCoz