Web-сервер
Несмотря на то, что на сервере FreeBDS 5.1 установлены все последние версии портов, напрямую из порта установить PHP3 не получится:
# pwd ;make install
/usr/ports/www/mod_php3
===> mod_php3-3.0.18_4 is marked as broken: Conflicting dependencies (mysql 3.x and 4.x).
Как же обойти это ограничение на установку PHP3?
Для начала надо осознать, что PHP3 в принципе можно установить во FreeBSD тремя путями:
- Как интерплетатор команд, подобный sh, csh , tsch и т.д. Такая конфигурация предусмотрена в указанном выше пакете по умолчанию. Например известный скрипт для форума PHPBB требует именно такой вариант установки. Вызов PHP3 из командной строки в таком случае выглядит так.
- Как динамически загружаемый по LOADMODULE модуль DSO для Apache. В версиях FreeBSD и PHP3 в этом случае у меня возникала целая цепочка ошибок, первой из которых была такая, второй такая и т.д. После преодоления все этих проблем получается уже окончательная и непреодолимая ошибка.
В принципе этот DSO-вариант установки задается при конфигурировании PHP3 параметром --with-apxs и в других версиях системы и PHP - такая установка возможна:
[Wed Nov 17 14:12:15 2004] [notice] Apache/1.3.27 (Unix) PHP/3.0.18 mod_perl/1.27 PHP/4.3.1 configured -- resuming normal operations - Как статически прилинкованный к Apache модуль.
ШАГ1. Поскольку из порта PHP установить не получается, то с http://www.php.net/releases.php сгружаем PHP 3.0.18 Source Code. Затем распаковываем php-3.0.18.tar.gz в подходящую директорию, скажем в /usr/ports/www/.php-3.0.18.
Мы не будем касаться на этой страничке отдельного вопроса правильного конфигурирования PHP3, и всевозможных приблуд к нему типа PHPAccelerator, скажу лишь что файл PHP.INI формируется или параметрами, задаваемыми на следующем шаге или в диагоге:
ШАГ2. Для начала изготавливаем обьектный файл PHP3, пригодный для линковки с Apache. Для этого запускаем вот такой скрипт MY_CONFIG_STATIC:
#!/bin/sh
cd /usr/ports/www/.php-3.0.18
./configure --with-apache=../apache13/work/apache_1.3.33 --enable-track-vars
В результате работы которого получается вот такой журнал.
После этого в каталоге /usr/ports/www/.php-3.0.18 выдаем
make
make install
make должен выдать вот такой журнал, а make install - вот такой.
И наконец, главное, в результате этого этапа в каталоге /usr/ports/www/apache13/work/apache_1.3.33/src/modules появляется подкаталог php3 с вот таким содержимым:
# pwd; ls -l
/usr/ports/www/apache13/work/apache_1.3.33/src/modules/php3
total 5608
-rw-r--r-- | 1 root wheel | 252 | Dec 7 13:02 Makefile.libdir |
-rw-r--r-- | 1 root wheel | 2431 | Dec 7 13:02 Makefile.tmpl |
-rw-r--r-- | 1 root wheel | 5677576 | Dec 7 13:02 libmodphp3.a |
-rw-r--r-- | 1 root wheel | 207 | Dec 7 13:02 libphp3.module |
-rw-r--r-- | 1 root wheel | 22613 | Dec 7 13:02 mod_php3.c |
-rw-r--r-- | 1 root wheel | 12 | Dec 7 13:02 mod_php3.exp |
-rw-r--r-- | 1 root wheel | 3750 | Dec 7 13:02 mod_php3.h |
-rw-r--r-- | 1 root wheel | 29 | Dec 7 13:02 php_version.h |
ШАГ3. Теперь выполняем сборку Apache. Переходим в каталог /usr/ports/www/apache13/work/apache_1.3.33 и выполняем в нем скрипт MY_CONFIGURE:
#!/bin/sh
cd /usr/ports/www/apache13/work/apache_1.3.33
./configure --prefix=/usr/local --activate-module=src/modules/php3/libphp3.a --verbose \
--enable-module=vhost_alias \
--enable-module=so \
> MY_CONFIGURE.LOG
make > MY_MAKE.LOG
При этом журнал MY_CONFIGURE.LOG должен выглядеть вот так, а MY_MAKE.LOG - вот так.
Изготовленную конфигурацию Apache сохраняем командой config_status. Эта команда должна выдать вот такой журнал, который опять же подтверждает, что PHP3 прилинковалось нормально. Текущая конфигурация при этом будет записана в файл configuretion.apaci, который должен в нашем случае выглядеть вот так.
Обратите внимание как изменился каталог с PHP3 - в нем добавились долгожданные Makefile, mod_php3.o и libphp3.a:
# pwd;ll
/usr/ports/www/apache13/work/apache_1.3.33/src/modules/php3
total 11208
-rw-r--r-- 1 root wheel | 3973 | Dec 8 13:29 Makefile |
-rw-r--r-- 1 root wheel | 252 | Dec 8 13:10 Makefile.libdir |
-rw-r--r-- 1 root wheel | 2431 | Dec 8 13:10 Makefile.tmpl |
-rw-r--r-- 1 root wheel | 5677576 | Dec 8 13:10 libmodphp3.a |
-rw-r--r-- 1 root wheel | 5689130 | Dec 8 13:21 libphp3.a |
-rw-r--r-- 1 root wheel | 207 | Dec 8 13:10 libphp3.module |
-rw-r--r-- 1 root wheel | 22613 | Dec 8 13:10 mod_php3.c |
-rw-r--r-- 1 root wheel | 12 | Dec 8 13:10 mod_php3.exp |
-rw-r--r-- 1 root wheel | 3750 | Dec 8 13:10 mod_php3.h |
-rw-r--r-- 1 root wheel | 11196 | Dec 8 13:21 mod_php3.o |
-rw-r--r-- 1 root wheel | 29 | Dec 8 13:10 php_version.h |
ШАГ4. Переписываем собранный Apache в его рабочие директории командой
make install
При этом в журнале можно посмотреть - какие именно будут использованы рабочие каталоги и где именно находится HTTPD.CONF.
Дело в том, что если выполнить потом установку какого-нибудь порта типа www/mod_php4, то будет создана другая (затирающая данную) установка с другим httpd.conf.
Чтобы этого не происходило (и установка с прилинкованным PHP3 происходила в стандартные директории) надо подбирать префиксы в команде .configure, которых существует много:
# FreeBSD layout...
prefix: | /usr/local |
exec_prefix: | $prefix |
bindir: | $exec_prefix/bin |
sbindir: | $exec_prefix/sbin |
libexecdir: | $exec_prefix/libexec/apache |
mandir: | $prefix/man |
sysconfdir: | $prefix/etc/apache |
datadir: | $prefix/www |
iconsdir: | $datadir/icons |
htdocsdir: | $datadir/data |
manualdir: | $prefix/share/doc/apache |
cgidir: | $datadir/cgi-bin |
includedir: | $prefix/include/apache |
localstatedir: | /var |
runtimedir: | $localstatedir/run |
logfiledir: | $localstatedir/log |
proxycachedir: | $datadir/proxy |
Но поскольку в моих версиях PHP4 и PHP3 в одной конфигурации Apache не живут - поэтому меня устраило два разных Apache в разных каталогах - один с поддержкой PHP3, другой с поддержкой PHP4.
ШАГ5. Для нужного сайта добавляем в HTTPD.CONF строчки вызова PHP3:
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .php3s
ШАГ6. Наконец-то стартуем apache:
apachectl start
и наслаждаемся проделанной работой:
# httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_setenvif.c
mod_php3.c
suexec: disabled; invalid wrapper /usr/local/bin/suexec
ШАГ7. (необязательный) Я бы настоятельно рекомендовал установить модули mod_info и mod_status, особенно в той ситуации, когда Апачей существует несколько. Так очень удобно смотреть текущую действующую конфигурацию Apache а также конкретные, заданные каждому модулю директивы:
Кроме того так можно быстро, без анализа журналов, посмотреть какие сайты хостинга смотрят юзера в данный момент.
Дополнительные сведения.
- Help на configure PHP3-3.0.18_4.
- Help на install PHP3-3.0.18_4.
- Help на install PHP3-3.0.18_4 как модуль DSO.
- Help на configure Apache 1.3.33
- Help на install Apache 1.3.33
Comments (
)
Link to this page:
//www.vb-net.com/hosting/php3/index.html
<Return> <Return> <SITEMAP> <MVC> <ASP> <NET> <DATA> <KIOSK> <FLEX> <SQL> <NOTES> <LINUX> <MONO> <FREEWARE> <DOCS> <ENG> <CHAT ME> <ABOUT ME> < THANKS ME> |