PHP Australia Conference 2015

Servidores Sun, iPlanet y Netscape en Microsoft Windows

Esta sección contiene anotaciones y consejos específicos de servidores Sun Java System Web Server, Sun ONE Web Server, iPlanet y Netscape en sistemas Windows.

Desde PHP 4.3.3 pueden usarse scripts PHP con el módulo NSAPI para generar listados de directorios y páginas de error personalizadas. También hay funciones adicionales para la compatibilidad con Apache. Para tener soporte con los servidores web actuales consulte las anotaciones sobre subpeticiones.

Instalación CGI en servidores Sun, iPlanet y Netscape

Para instalar PHP como un manejador CGI, haga lo siguiente:

  • Copie php4ts.dll al raíz del sistema (directorio en el que instaló Windows)
  • Realice la asociación de ficheros en la línea de comandos. Introduzca las siguientes líneas:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • En Netscape Enterprise Administration Server cree un directorio shellcgi temporal y bórrelo después (este paso añadirá 5 líneas importantes a obj.conf y permitirá que el servidor web maneje scripts shellcgi).
  • En Netscape Enterprise Administration Server cree un nuevo tipo mime (Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php).
  • Realícelo para cada instancia de servidor web en que desee ejecutar PHP

Se pueden encontrar más detalles sobre cómo configurar PHP como ejecutable CGI en » http://benoit.noss.free.fr/php/install-php.html

Configuración de NSAPI en servidores Sun, iPlanet y Netscape

Para instalar PHP con NSAPI, haga lo siguiente:

  • Copie php4ts.dll al raíz de su sistema (directorio en que instaló Windows)
  • Haga la asociación de ficheros en la línea de comandos. Introduzca las siguientes líneas:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • En Netscape Enterprise Administration Server cree un nuevo tipo mime (Category: type, Content-Type: magnus-internal/x-httpd-php, File Suffix: php).
  • Edite magnus.conf (para servidores >= 6) o obj.conf (para servidores < 6) e introduzca lo siguiente: Debe ubicar estas líneas tras mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_ini="c:/path/to/php.ini"]
    
    (PHP >= 4.3.3) El parámetro php_ini es opcional, pero usándolo se puede reubicar el fichero php.ini al directorio de configuración del servidor web.

  • Configure el objeto por omisión en obj.conf (para clases de servidores virtuales [Sun Web Server 6.0+] en su fichero vserver.obj.conf): En la sección <Object name="default">, añada esta línea tras los 'ObjectType' y antes de las líneas 'AddLog':

    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    
    (PHP >= 4.3.3) Se pueden añadir parámetros adicionales del tipo php.ini-values, por ejemplo, se puede especificar el docroot="/path/to/docroot" específico para el contexto en que se invoca a php4_execute. En las claves ini booleanas, debe usarse 0 o 1 como valor, y nunca "On","Off",... (no funcionará correctamente), p.ej. zlib.output_compression=1 en lugar de zlib.output_compression="On"

  • Esto sólo es necesario si se desea configurar un directorio que consista únicamente en scripts PHP (como en los directorios 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>
    
    Tras eso, se puede configurar un directorio en la administración del servidor para asignarle el estilo x-httpd-php. Todos los ficheros que contenga se ejecutarán con PHP. Es útil para ocultar el uso de PHP, renombrando los ficheros a .html.

  • Reinicie el servidor web y aplique los cambios
  • Realícelo para cada instancia del servidor web en que desee ejecutar PHP

Nota:

Puede consultar más detalles sobre cómo configurar PHP como filtro NSAPI aquí: » http://benoit.noss.free.fr/php/install-php4.html

Nota:

El tamaño de pila de PHP depende de la configuración del servidor web. Si la ejecución de scripts extensos de PHP se detiene, se recomienda que lo propague con Admin Server (en la sección "MAGNUS EDITOR").

entornos CGI y modificaciones recomendadas en php.ini

Al escribir scripts PHP es importante tener en cuenta que Sun JSWS/Sun ONE WS/iPlanet/Netscape es un servidor web multihebra, ya que todas las peticiones se ejecutan en el espacio del mismo proceso (el espacio del propio servidor web) y este espacio sólo contiene un entorno de ejecución. Si se desea conocer variables CGI como PATH_INFO, HTTP_HOST, etc. no se debe hacer de la forma convencional con getenv() o similares (register globals del entorno, $_ENV). Sólo se obtendrá el entorno del servidor web en ejecución sin ninguna variable CGI válida.

Nota:

¿Pero por qué hay variables CGI (inválidas) en el entorno?

Respuesta: Se debe a que se inició el proceso del servidor web desde el servidor de administración que lanza el script de inicio del servidor web como un script CGI (¡un script CGI dentro del servidor de administración!). Ésta es la razón por la que el entorno del servidor web contiene algunas variables de entorno CGI. Puede comprobarlo iniciando el servidor web de otra forma. Acceda al terminal como administrador y arránquelo a mano - verá que ya no hay variables de entorno CGI.

Deben actualizarse los scripts, para que consulten variables CGI de la forma correcta para PHP 4.X, usando la superglobal $_SERVER. Si se tuvieran scripts antiguos que usaran $HTTP_HOST, etc., debería habilitarse register_globals en php.ini, así como cambiar la variable de orden (importante: elimine la "E", ya que aquí no se necesitan variables de entorno):

variables_order = "GPCS"
register_globals = On

Uso especial de páginas de error y listados de directorios personalizados (PHP >= 4.3.3)

Se puede utilizar PHP para generar páginas de error para "404 Not Found" o similar. Debe añadirse la siguiente línea al objeto en obj.conf para cada página de error que se desee redefinir:

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
donde XXX es el código de error HTTP. Debe eliminarse todas las directivas Error que puedan colisionar con las nuevas. Si se desea crear una página genérica para todos los errores, debe omitirse el parámetro code. El script podrá consultar el código de estado HTTP en $_SERVER['ERROR_TYPE'].

Otra posibilidad es generar listados de directorios personalizados. Debe crearse un script PHP que liste el contenido de un directorio y reemplace la línea del servicio correspondiente para type="magnus-internal/directory" en obj.conf por lo siguiente:

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
Tanto para la página de error como de listado de directorios, la URI original y la traducida están disponibles en las variables $_SERVER['PATH_INFO'] y $_SERVER['PATH_TRANSLATED'].

Anotaciones sobre nsapi_virtual() y subpeticioness (PHP >= 4.3.3)

El módulo NSAPI ahora soporta la función nsapi_virtual() (alias: virtual()) para hacer subpeticiones al sevidor web e insertar el resultado en la página web. El problema es que esta función utiliza algunas funcionalidades no documentadas de la biblioteca NSAPI.

En Unix esto no es un problema, porque el módulo automáticamente busca las funciones necesarias y las usa si estuvieran disponibles. Si no, nsapi_virtual() queda deshabilitado.

En Windows, las limitaciones del manejo de DLL necesitan emplear detección automática del fichero ns-httpdXX.dll más reciente. Se ha probado hasta en servidores versión 6.1. Si se utiliza una versión más reciente del servidor Sun, la detección falla y nsapi_virtual() se deshabilita.

Si este fuera el caso, debe probarse lo siguiente: Añada el siguiente parámetro a php4_init en magnus.conf/obj.conf:

Init fn=php4_init ... server_lib="ns-httpdXX.dll"
donde XX es el número de versión correcto de la DLL. Para conocerlo, busca en el raíz del servidor el nombre correcto de la DLL. La DLL de mayor tamaño es la adecuada.

Puede comprobar el estado usando la función phpinfo().

Nota:

Pero tenga en cuenta: El soporte para nsapi_virtual() es EXPERIMENTAL.

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top