Веб-серверы 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() - ЭКСПЕРИМЕНТАЛЬНАЯ!!!

add a note add a note

User Contributed Notes 8 notes

up
1
Lucius Rizzo
10 years ago
http://we.je/oracle-iplanet-web-server-running-on-arch-linux-with-php-fpm-hello-speed-meet-kettle/

If you are looking to setup Oracle iPlanet Web server using the much more effective option of using php-fpm, please follow the link above to learn how to accomplish this.

Lucius Rizzo
www.say.si
up
1
Brian
16 years ago
For me at least, this part of the second line in the magnus.conf is not optional:

Init fn="php5_init" LateInit="yes"

Without it, the web server crashes when trying to execute php files
up
1
jedokahn at yahoo dot com at
20 years ago
I noted and installed *all* pkgs required to compile PHP5 but kept getting an error on compile when it attempted to test the gcc compiler. The /usr/ccs/bin and all the $PATH requirements were ALL there....why the error? I tried running gcc from the command prompt and got a "gcc: fatal: libiconv.so.2: open failed: "....DUH I needed to install the libiconv pkg from sunfreeware.com for gcc compiler to work. Just a small bonehead maneuver, but I thought I would add it just in case someone else ran into the particular problem.
up
0
Lucius Rizzo Lucius dot Rizzo at Has dot Education
10 years ago
In case we.je (the originating domain) is dropped, I thought I'd add one that should last longer

The new URL is:

http://our.guru/oracle-iplanet-web-server-running-on-arch-linux-with-php-fpm-hello-speed-meet-kettle/

--
Lucius Rizzo
www.Lucius.Tel
up
0
mark at markround dot com
20 years ago
Quick note : By replacing "php4" with "php5", the above instructions work perfectly when building PHP5 for an iPlanet server. EG:-

Init fn="load-modules" funcs="php5_init,php5_execute,php5_auth_trans" etc.

Works fine here on 6.0SP2, Solaris 9 Sparc.

-Mark
[mark at markround dot com]
up
-1
ericbackstrom at hotmail dot com
18 years ago
Using gcc 3.3 I had problems compiling PHP for 64 bits, I had to replace mysql/64 bits with mysql/32 bits (Solaris cannot mix 32 bits and 64 bits libraries), so I specified the following compiler flag:

CFLAGS="-m32";export CFLAGS;

I also had problems with PHP 5.1.2 in sapi/nsapi/nsapi.c source code, It had incorrect comments and file paths :S

When trying to install PHP with mysql support I found I had these problems too: http://bugs.php.net/bug.php?id=34516... So don't mix sun ld and gcc ld because you will get into troubles. I built mysql libraries myself in a separated directory.

And don't forget to set your LD_LIBRARY_PATH to something like:

LD_LIBRARY_PATH="/usr/local/lib:/usr/lib"
up
-1
masochisthalo at yahoo dot com
20 years ago
Title: Barebones PHP Installation on Sun One Web Server 6.1 for JDS2
Author: Hijinio Reynoso Jr.
Last Updated: August 23, 2004
Summary: If you have installed Sun One Web Server 6.1 on the JDS (aka Java Desktop System from Sun), this will help you get PHP installed on it (without XML and MySQL support.)  In any case, this should get you started which is better than not having it installed at all.  These directions were based mainly on those available from PHP.net, but updated to meet the needs of this specific configuration.

Instructions
----------------------------
0. Make sure your web server isn't running and ensure that all JDS developer packages are installed; to be safe, I always ensure that all developer packages are available via Applications > System Tools > Administration > Software Installer

1. Download http://us3.php.net/get/php-5.0.1.tar.bz2/from/a/mirror and extract into the directory of your choice. (5.0.1 was the only version I could get to make install correctly)

2. CD into the extracted PHP directory and type:
> ./configure --with-nsapi=/opt/SUNWwbsvr --enable-libgcc --disable-libxml
(Your web server directory may vary from the above's default.)

3. Once it's done configuring (and it should be successful should you have all the proper packages), type:
> make

4. When its done compiling, it's time to install as root:
# make install

5. Now, configuration of your web server begins:
# cd /opt/SUNWwbsvr/https-[yourWebServer]/config

6. vi mime.types (or other editor) to add this line into it:
type=magnus-internal/x-httpd-php exts=php

7. vi magnus.conf to add the following 2 lines to end of it:  (NOTE: the 2nd line could be optional)
Init fn="load-modules" funcs="php5_init,php5_execute,php5_auth_trans" shlib="/opt/SUNWwbsvr/bin/libphp5.so"
Init fn="php5_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]

8. vi obj.conf to add the following line to <Object name="default">. Make sure this happens after all "ObjectType" entries and before any "AddLog" entries:  (NOTE: for virtual servers, edit vserver.obj.conf)
Service fn="php5_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]

9. Now, start up your web server.  Also, make sure to log into the admin server and click the "Apply" button in there.  You will also have set "index.php" as an index filename in your virtual server's Document Preferences.

10. Congrats!  Now, you have PHP installed!  Of course, there are other features you could enable (MySQL, XML, etc.), but I haven't tested against those.  Just consult the following page for hints: http://www.php.net/manual/en/install.unix.sun.php
up
-2
vijay
18 years ago
If I start my iPlanet (v6.0 SP2) webserver with PHP5.1.2 i get this message every 1/2 sec in my error log....

[12/Mar/2006:11:01:48] failure (15936): Failed to read kernel statistics structures (No such device or address)

This happens only if I start my server loading PHP module. FYI - When I configured my php I had it use oracle instant client libraries.

One fix I found was to comment out this line in my magnus.conf file.

#Init fn="stats-init" profiling="on"

But I don't think i can do this on my prodcution machine. Any ideas to come around this issue?

Thanks
Vijay
To Top