Веб-серверы Sun, iPlanet и Netscape на ОС Sun Solaris
Этот раздел содержит заметки и полезные советы по установке PHP для веб-серверов Sun Java System Web Server, Sun ONE Web Server, iPlanet и Netscape на ОС Sun Solaris.
Начиная с PHP 4.3.3 вы можете использовать PHP-скрипты с модулем NSAPI для генерации пользовательских списков директорий и страниц ошибок. Также доступны дополнительные функции для обеспечения совместимости с Apache. Для получения поддержки современных веб-серверов читайте заметки о подзапросах.
Более подробную информацию об использовании PHP в Netscape Enterprise Server (NES) читайте по ссылке: » http://benoit.noss.free.fr/php/install-php4.html
Для сборки PHP с веб-серверами Sun JSWS/Sun ONE WS/iPlanet/Netscape, введите корректную директорию установки в опции --with-nsapi=[DIR]. Обычно используется директория по умолчанию /opt/netscape/suitespot/. Также, пожалуйста, прочитайте /php-xxx-version/sapi/nsapi/nsapi-readme.txt.
-
Установите следующие пакеты из » http://www.sunfreeware.com/ или другого места:
- autoconf-2.13
- automake-1.4
- bison-1_25-sol26-sparc-local
- flex-2_5_4a-sol26-sparc-local
- gcc-2_95_2-sol26-sparc-local
- gzip-1.2.4-sol26-sparc-local
- m4-1_4-sol26-sparc-local
- make-3_76_1-sol26-sparc-local
- mysql-3.23.24-beta (если нужна поддержка mysql)
- perl-5_005_03-sol26-sparc-local
- tar-1.13 (GNU tar)
-
Убедитесь, что переменная окружения PATH содержит необходимые директории
PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin
и они доступны в окружении -export PATH
. -
gunzip php-x.x.x.tar.gz
(если у вас дистрибутив .gz, иначе переходите к пункту 4). -
tar xvf php-x.x.x.tar
-
Перейдите в директорию с распакованным дистрибутивом:
cd ../php-x.x.x
-
Перед выполнением следующего шага, убедитесь, что ваш netscape сервер установлен по пути /opt/netscape/suitespot/. Если это не так, то в следующей команде поменяйте его на нужный и запустите:
./configure --with-mysql=/usr/local/mysql \ --with-nsapi=/opt/netscape/suitespot/ \ --enable-libgcc
- Затем запустите make и, когда команда отработает, запустите make install.
После базовой установки и чтения соответствующих файлов readme, вам может потребоваться произвести некоторые дополнительные настройки.
Инструкции по конфигурации Sun/iPlanet/Netscape
Для начала вам потребуется добавить несколько новых путей в переменную окружения LD_LIBRARY_PATH, чтобы веб-сервер мог найти все необходимые разделяемые библиотеки. Лучше всего внести эти изменения в скрипте запуска веб-сервера. Обычно этот скрипт распологается по пути /path/to/server/https-servername/start. Также вам вероятно понадобится отредактировать конфигурационные файлы, расположенные тут: /path/to/server/https-servername/config/.
-
Добавьте следующие строки в mime.types:
type=magnus-internal/x-httpd-php exts=php
-
Отредактируйте magnus.conf (для серверов >= 6) или obj.conf (для серверов < 6) и добавьте следующие строки. Путь shlib может отличаться для разных систем, но в общем случае будет что-то типа /opt/netscape/suitespot/bin/libphp4.so. Добавьте следующие строки после
mime types init
.Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so" Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
php_ini
не обязателен, но с ним вы сможете разместить ваш php.ini в директории конфигурации вашего веб-сервера. -
Сконфигурируйте объекты по умолчанию в obj.conf (для классов виртуального сервера [версия 6.0+] в его vserver.obj.conf):
<Object name="default"> . . . .#Обратите внимание, что следующая строка должны быть после всех строк 'ObjectType' .#и до всех строк 'AddLog' Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...] . . </Object>
docroot="/path/to/docroot"
специфичный для контекста, запущенногоphp4_execute
. Для логических ключей используйте значения 0 и 1, а не"On","Off",...
(иначе они не будут работать корректно), т.е.zlib.output_compression=1
, а неzlib.output_compression="On"
-
Это необходимо только если вы хотите установить директорию, которая содержит только скрипты PHP (что-то типа директории cgi-bin):
<Object name="x-httpd-php"> ObjectType fn="force-type" type="magnus-internal/x-httpd-php" Service fn=php4_execute [inikey=value inikey=value ...] </Object>
x-httpd-php
. Все файлы в ней будут запускаться с помощью PHP. Это можно использовать для сокрытия использования PHP, переименовав все файлы в .html. -
Настройка аутентификации: аутентификация PHP не может использоваться совместно с другими типами аутентификации. ВСЯ АУТЕНТИФИКАЦИЯ ПЕРЕДАЕТСЯ ВАШЕМУ PHP СКРИПТУ. Для настройки аутентификации PHP для всего сервера, добавьте следующую строку для вашего объекта по умолчанию:
<Object name="default"> AuthTrans fn=php4_auth_trans . . . </Object>
-
Для использования аутентификации PHP для единичной директории, добавьте следующее:
<Object ppath="d:\path\to\authenticated\dir\*"> AuthTrans fn=php4_auth_trans </Object>
Замечание:
Размер стека, который сможет использовать PHP, зависит от настроек вашего веб-сервера. Если очень большие скрипты вызывают падения, то рекомендуется увеличить его через Admin Server (в разделе "MAGNUS EDITOR").
Окружение CGI и рекомендованные изменения в php.ini
При написании скриптов PHP для Sun JSWS/Sun ONE WS/iPlanet/Netscape важно помнить,
что это многопоточный веб-сервер. В связи с тем, что все запросы обрабатываются в одном
процессе (процесс самого веб-сервера) и у этого процесса одно окружение для всех.
Если вы хотите получить переменную CGI, например, PATH_INFO
или HTTP_HOST
, то использование старых методов типа
getenv() или подобных (регистрация глобальных переменных
в окружении, $_ENV) будет работать некорректно. Вы можете
получить только переменные окружения самого веб-сервера, но не какие-либо корректные
переменные CGI.
Замечание:
Почему же в окружении существуют переменные (некорректные) CGI?
Ответ: Это потому, что вы запускаете процесс веб-сервера из "admin server", который запускает стартовый скрипт веб-сервера, который вы хотите запустить, как CGI скрипт (скрипт CGI внутри "admin server"!). Это объясняет почему окружение вообще содержит какие-либо переменные CGI. Вы можете протестировать это запустив веб-сервер не из "administration server". Используйте командную строку под пользователем root для запуска веб-сервера и вы не найдете никаких переменных CGI в окружении.
Просто измените ваш скрипт, чтобы он получал переменные CGI правильным образом
для PHP 4.x, используя суперглобальный массив $_SERVER.
Если вы работаете со старым скриптом, использующим
$HTTP_HOST и т.д, вам необходимо включить
register_globals
в php.ini и изменить порядок переменных
(важно: удалите из него "E"
, так как тут вам не нужны
переменные окружения):
variables_order = "GPCS" register_globals = On
Использование для создания пользовательских списков директории и страниц ошибок (PHP >= 4.3.3)
Вы можете использовать PHP для создания страниц ошибок
"404 Not Found"
и похожих. Добавьте следующее для объекта в
obj.conf для каждой страницы с ошибкой, которую вы хотите
переопределить:
Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
XXX
- код ошибки HTTP. Пожалуйста, удалите все прочие
директивы Error
, которые могут пересекаться с вашими.
Если вы хотите сделать общую страницу для всех ошибок, оставьте параметр
code
пустым. Ваш скрипт получит код статуса HTTP
в $_SERVER['ERROR_TYPE'].
Другая возможность - создание пользовательских списков содержимого директории.
Просто создайте скрипт, который будет отображать список директории и
замените соответствующую строку Service
для
type="magnus-internal/directory"
в obj.conf на следующее:
Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
Замечание о nsapi_virtual() и подзапросах (PHP >= 4.3.3)
Модуль NSAPI поддерживает функцию nsapi_virtual() (псевдоним: virtual()) для создания подзапросов на веб-сервере и вставки результатов на страницу. Эта функция использует недокументированные возможности библиотеки NSAPI. На Unix модуль самостоятельно ищет необходимую функциональность и использует ее, если она доступна. Если же она недоступна, nsapi_virtual() будет запрещено.
Замечание:
Но будьте осторожны: поддержка nsapi_virtual() - ЭКСПЕРИМЕНТАЛЬНАЯ!!!