Веб-серверы 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.

  1. Установите следующие пакеты из »  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)

  2. Убедитесь, что переменная окружения PATH содержит необходимые директории PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin и они доступны в окружении - export PATH.
  3. gunzip php-x.x.x.tar.gz (если у вас дистрибутив .gz, иначе переходите к пункту 4).
  4. tar xvf php-x.x.x.tar
  5. Перейдите в директорию с распакованным дистрибутивом: cd ../php-x.x.x
  6. Перед выполнением следующего шага, убедитесь, что ваш netscape сервер установлен по пути /opt/netscape/suitespot/. Если это не так, то в следующей команде поменяйте его на нужный и запустите:

    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc

  7. Затем запустите make и, когда команда отработает, запустите make install.

После базовой установки и чтения соответствующих файлов readme, вам может потребоваться произвести некоторые дополнительные настройки.

Инструкции по конфигурации Sun/iPlanet/Netscape

Для начала вам потребуется добавить несколько новых путей в переменную окружения LD_LIBRARY_PATH, чтобы веб-сервер мог найти все необходимые разделяемые библиотеки. Лучше всего внести эти изменения в скрипте запуска веб-сервера. Обычно этот скрипт распологается по пути /path/to/server/https-servername/start. Также вам вероятно понадобится отредактировать конфигурационные файлы, расположенные тут: /path/to/server/https-servername/config/.

  1. Добавьте следующие строки в mime.types:

    type=magnus-internal/x-httpd-php exts=php
    

  2. Отредактируйте 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 >= 4.3.3) Параметр php_ini не обязателен, но с ним вы сможете разместить ваш php.ini в директории конфигурации вашего веб-сервера.

  3. Сконфигурируйте объекты по умолчанию в 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>
    
    (PHP >= 4.3.3) В качестве дополнительных параметров вы можете добавить специальные значения php.ini, к примеру, вы можете установить docroot="/path/to/docroot" специфичный для контекста, запущенного php4_execute. Для логических ключей используйте значения 0 и 1, а не "On","Off",... (иначе они не будут работать корректно), т.е. zlib.output_compression=1, а не zlib.output_compression="On"

  4. Это необходимо только если вы хотите установить директорию, которая содержит только скрипты 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>
    
    В последствии вы сможете сконфигурировать директорию в консоли Administration и назначить ей стиль x-httpd-php. Все файлы в ней будут запускаться с помощью PHP. Это можно использовать для сокрытия использования PHP, переименовав все файлы в .html.

  5. Настройка аутентификации: аутентификация PHP не может использоваться совместно с другими типами аутентификации. ВСЯ АУТЕНТИФИКАЦИЯ ПЕРЕДАЕТСЯ ВАШЕМУ PHP СКРИПТУ. Для настройки аутентификации PHP для всего сервера, добавьте следующую строку для вашего объекта по умолчанию:

    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>
    

  6. Для использования аутентификации 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...]
Для страниц с ошибками и для страниц со списками директорий, оригинальный URI и подмененный URI будут содержаться в переменных $_SERVER['PATH_INFO'] и $_SERVER['PATH_TRANSLATED'].

Замечание о nsapi_virtual() и подзапросах (PHP >= 4.3.3)

Модуль NSAPI поддерживает функцию nsapi_virtual() (псевдоним: virtual()) для создания подзапросов на веб-сервере и вставки результатов на страницу. Эта функция использует недокументированные возможности библиотеки NSAPI. На Unix модуль самостоятельно ищет необходимую функциональность и использует ее, если она доступна. Если же она недоступна, nsapi_virtual() будет запрещено.

Замечание:

Но будьте осторожны: поддержка nsapi_virtual() - ЭКСПЕРИМЕНТАЛЬНАЯ!!!