Zend Server, 500 Internal Error Server
Instalé Zend Server en mi computadora ya que estoy probando y comparando XDebug y Zend Server. (Ver Instalación de XDebug)
La instalación realmente fue sencilla y me quedo funcionando de maravilla. Lo único que noté es que Zend Server no instala a PHP como un módulo sino como CGI.
Esto hace que si creo un archivo de configuracion .htaccess con valores de configuracion específicos de PHP en el archivo, me de un error “Internal Server Error”.
Mi archivo .htaccess para la aplicación específica, tenía una serie de configuraciones para PHP específicas que funcionaban bien cuando PHP corria como un módulo:
php_value display_errors "On" php_value log_errors "On" php_value session.auto_start 0 php_value error_log "D:/webserver/logs/php_app_error.log"
Solución
Revisando en al documentación de PHP, encontré que uno puede hacer configuraciones específicas por directorio en Windows, utilizando el registro de la máquina.
En vez de poner las configuraciones específicas de PHP en el archivo .htaccess, las puse en el registro de windows y funcionó muy bien.
Espero que le sirva aquellos que estan teniendo problemas con esto.
Asumiendo que el Webserver inicia en “D:\webserver\www” hice este archivo .reg, para crear las entradas necesarias en el registro de Windows:
Webserver.reg
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\D\webserver\www] "display_errors"="On" "log_errors"="On" "session.auto_start"="0" "error_log"="D:/webserver/logs/php_app_error.log"
Changing PHP configuration via the Windows registry
When running PHP on Windows, the configuration values can be modified on a per-directory basis using the Windows registry. The configuration values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory Values, in the sub-keys corresponding to the path names. For example, configuration values for the directory c:\inetpub\wwwroot would be stored in the key HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot. The settings for the directory would be active for any script running from this directory or any subdirectory of it. The values under the key should have the name of the PHP configuration directive and the string value. PHP constants in the values are not parsed. However, only configuration values changeable in PHP_INI_USER can be set this way, PHP_INI_PERDIR values can not.
Referencia:
Comments
Comment from alejandro
Time December 12, 2009 at 11:19 am
hola pablo,
has encontrado una solucion a esto? yo tengo el mismo problema ( zendserver => php como CGI=>.htaccess php_flag directivas no funcionan)
he probado con ponerlas en php.ini en el directorio, pero nada. Lo de ponerlas en el registro voy a probar aunque ya con lo que dices de que es como php_admin_value y no deja cambiar los valores en tiempo de ejecusion y gual no me valen.
Buen Blog ! (siempre compartir ideas es bueno) salu2
Comment from Pablo Viquez
Time December 12, 2009 at 3:53 pm
Hola Alejandro,
Si es posible cambiar la configuracion siempre pero no usando .htaccess. La manera de hacerlo seria con código (tiempo de ejecución) con la función “ini_set” o si querés cambiar la ruta de inclusion de archivos por ejemplo podes usar tambien “set_include_path”.
Las funciones para cambiar la configuracion serían:
http://php.net/manual/function.ini-set.php
ini_set – Asigna un valor a las opciones de configuración.
Para ver la lista de configuraciones que podés usar:
http://php.net/manual/function.ini-set.php
Otra útil es set_include_path que asigna el valor de “include_path” y retorna el valor anterior si el cambio fue exitoso ó falso (false) en caso que no lo cambio.
http://php.net/manual/function.set-include-path.php
Otras funciones útiles:
ini_restore() – http://php.net/manual/function.ini-restore.php
ini_get() – http://php.net/manual/function.ini-get.php
Espero que te ayude
Comment from Luigi
Time June 2, 2010 at 5:51 am
Hola excelente explicación respecto a cuando PHP esta como CGI. Pero incluso sigo estando perdido de como puedo realizar esta acción con el registro.
en el .htacces en otros servidores (sin zend server) manejo esto.
ForceType application/x-httpd-php
php_value auto_prepend_file gzip-js.php
El gzip-js.php Contiene lo siguiente.
<?php
// $Id: gzip-js.php $
// initialize ob_gzhandler function to send and compress data
ob_start ("ob_gzhandler");
// send the requisite header information and character set
header ("Content-Type: application/javascript; charset: UTF-8");
// check cached credentials and reprocess accordingly
header ("Cache-Control: must-revalidate");
// set variable for duration of cached content
$offset = 60 * 60;
// set variable specifying format of expiration header
$expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";
// send cache expiration header to the client broswer
header ($expire);
Alguna solución para este acción de comprimir los .js a gzip encode?
Comment from Pablo Viquez
Time June 2, 2010 at 2:40 pm
Hola Luigi,
Lo que no funciona con PHP en CGI, son las instrucciones en el archivo .htaccess php_value.
En el caso anterior, la instruccion “ForceType application/x-httpd-php” si se puede hacer en el archivo .htaccess ya que es una instruccion de apache no de PHP. Lo que fallaria son las instrucciones php_value, que en este caso es posible poner en el registro de windows.
Quedaria algo asi:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\C\public_html]
“auto_prepend_file”=”gzip-js.php”
Por cierto, esta muy bonita la manera de comprimir archivos JS.
Saludos
Pablo

Follow me on Twitter
RSS
Pingback from Pablo Viquez Blog » php set_include_path() function returns false
Time June 14, 2009 at 7:22 pm
[...] que cuando se usa el registro de windows (windows registry) para modificar la configuracion de PHP (Ver: Registro de windows y la configuracion de PHP), es como utilizar php_admin_value la cual no deja que se modifiquen en tiempo de [...]