Этот раздел содержит заметки и полезные советы по установке 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/ или другого места:
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
После базовой установки и чтения соответствующих файлов readme, вам может потребоваться произвести некоторые дополнительные настройки.
Для начала вам потребуется добавить несколько новых путей в переменную окружения 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"]
Сконфигурируйте объекты по умолчанию в 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 (что-то типа директории 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>
Настройка аутентификации: аутентификация 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").
При написании скриптов 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 для создания страниц ошибок "404 Not Found" и похожих. Добавьте следующее для объекта в obj.conf для каждой страницы с ошибкой, которую вы хотите переопределить:
Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
Другая возможность - создание пользовательских списков содержимого директории. Просто создайте скрипт, который будет отображать список директории и замените соответствующую строку 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 поддерживает функцию nsapi_virtual() (псевдоним: virtual()) для создания подзапросов на веб-сервере и вставки результатов на страницу. Эта функция использует недокументированные возможности библиотеки NSAPI. На Unix модуль самостоятельно ищет необходимую функциональность и использует ее, если она доступна. Если же она недоступна, nsapi_virtual() будет запрещено.
Замечание:
Но будьте осторожны: поддержка nsapi_virtual() - ЭКСПЕРЕМЕНТАЛЬНАЯ!!!