Volver al índice Configuración de Apache y PHP


Introducción

Esta explicación sobre la configuración de Apache y PHP está adaptada a XAMPP 1.7.0, pero supongo que gran parte de ella es válida para otras versiones de XAMPP y para otros paquetes WAMP.

Cada vez que se modifica alguno de los ficheros de configuración es necesario detener y reiniciar el servidor. En XAMPP se puede utilizar para ello el panel de control de XAMPP (Inicio > Programas > Apache Friends > XAMPP > XAMPP Control Panel).

Antes de modificar cualquier archivo de configuración, se recomienda hacer una copia de seguridad del archivo de configuración original.

Volver al principio


Configuración de Apache

El fichero de configuración de Apache es el archivo httpd.conf. En XAMPP el archivo se encuentra normalmente en el directorio C:\xampp\apache\conf\. El archivo httpd.conf es un archivo de texto sin formato. Las líneas comentadas empiezan por el carácter almohadilla (#).

En el archivo httpd.conf se establecen las directivas de configuración de Apache, algunas de las cuales se comentan a continuación. Antes de modificar cualquier archivo de configuración, se recomienda hacer una copia de seguridad del archivo de configuración original.

Al escribir una ruta de directorio en el archivo de configuración en Windows se puede utilizar tanto la barra como la contrabarra (es decir, se puede escribir tanto C:\xampp como C:/xampp).


Ubicación de las páginas web

Con la configuración inicial de XAMPP, al abrir en el navegador una página web cuya dirección empieza por http://localhost/ el comportamiento de Apache es el siguiente:

Esta configuración es adecuada para entornos de programación, pero en entornos de producción se suele modificar, por ejemplo, para no enviar el listado del directorio.

En el directorio raíz del servidor, XAMMP instala una serie de páginas que permiten administrar el servidor, por eso al abrir en el navegador la dirección http://localhost se abre una página de configuración propia de XAMPP.

A la hora de añadir otras páginas en el servidor, se puede hacer de varias formas:

En clase, dado que sólo hay un usuario de Windows, optaremos por la solución de crear alias.


DocumentRoot

La directiva DocumentRoot especifica el directorio donde se encuentran las páginas web. Cuando en la barra de dirección del navegador se escriba una dirección que comience por http://localhost/, el servidor buscará los archivos a partir de ese directorio.

En XAMPP el valor predeterminado de DocumentRoot es:

DocumentRoot "C:/xampp/htdocs"

Si se quiere utilizar, por ejemplo, el directorio C:\www habría que cambiarlo a:

DocumentRoot "C:/www"

Si se modifica esta directiva , debe también modificarse la directiva <Directory> correspondiente, que se encuentra a continuación de la directiva DocumentRoot y sirve para especificar qué servicios y características están permitidos o prohibidos en cada directorio.

En XAMPP la directiva corresponfdiente el valor predeterminado correspondiente a DocumentRoot es:

<Directory "C:/xampp/htdocs">

Si se quiere utilizar, por ejemplo, el directorio C:\www habría que cambiarlo a:

<Directory "C:/www">

Volver al principio


UserDir

Como en un ordenador con Windows XP puede haber varios usuarios, puede ser un problema que todos los usuarios utilicen el mismo directorio raíz. La directiva UserDir permite que cada usuario guarde sus páginas en su propio directorio Mis Documentos y que cada uno acceda a ellos escribiendo en el navegador la dirección http://localhost/~nombre-de-usuario.

Hay que tener en cuenta que aunque se definan directorios de usuarios, http://localhost sigue mostrando el directorio indicado por la directiva DocumentRoot.

Para que Apache pueda acceder a los directorios de los usuarios, en httpd.conf debe estar cargado el módulo userdir mediante la directiva:

LoadModule userdir_module modules/mod_userdir.so

En XAMPP esta directiva está comentada de forma predeterminada, por lo que es necesario borrar el carácter de almohadilla.


Si se carga el módulo userdir, entonces deben indicarse los módulos de usuario mediante la directiva UserDir. En XAMPP la configuración de los directorios de usuario se realiza en un archivo separado (aunque el contenido de este archivo podría incluirse en el archivo httpd.conf) que se encuentra referenciado mediante la directiva

Include conf/extra/httpd-userdir.conf

En XAMPP esta directiva no está comentada de forma predeterminada, aunque conviene verificarlo.


El archivo httpd-userdir.conf contiene las directivas UserDir y <Directory> que especifican la ubicación de los archivos de usuario y su modo de acceso. El archivo que instala XAMPP debe modificarse para definir el directorio de usuario concreto, como en el ejemplo siguiente, en el que Windows está instalado en C:/ y el usuario se llama "Barto":

<IfModule userdir_module>

   UserDir "Mis documentos/www"
   <Directory "C:/Documents and Settings/Barto/Mis documentos/www">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
   </Directory>

</IfModule>

Hay que tener cuidado con las erratas, ya que cualquier error impedirá que Apache se ponga en marcha.

Volver al principio


Alias

La directiva Alias permite que el servidor abra páginas que no estén dentro del directorio establecido mediante la directiva DocumentRoot.

Para que Apache pueda acceder a esos directorios, en el archivo httpd.conf debe estar cargado el módulo alias mediante la directiva:

LoadModule alias_module modules/mod_alias.so

En XAMPP esta directiva no está comentada de forma predeterminada, por lo que no es necesario borrar el carácter de almohadilla.

Además, hay que añadir en el archivo httpd.conf una directiva Alias dentro de la directiva <IfModule alias_module> (que ya existe en XAMPP).

Por ejemplo, si se quiere acceder a documentos situados en "C:\Documents and Settings\Barto\Mis documentos\php" escribiendo en el navegador http://localhost/php, hay que añadir en el archivo httipd.conf la siguiente directiva Alias dentro de la directiva <IfModule alias_module>. Si ya existe la directiva IfModule (como ocurre en XAMPP), sólo habría que añadir las líneas en negrita del ejemplo siguiente:

<IfModule alias_module>

   Alias /php "C:/Documents and Settings/Barto/Mis documentos/php"
   <Directory "C:/Documents and Settings/Barto/Mis documentos/php">
     Options Indexes FollowSymLinks Includes ExecCGI
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>

ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/" </IfModule>

Como en el caso de la directiva DocumentRoot, se debe incluir una directiva <Directory> para el directorio indicado en la directiva Alias (incluida en el ejemplo anterior)

Volver al principio


Configuración de PHP

El archivo de configuración de PHP es el archivo php.ini. El archivo php.ini es un archivo de texto sin formato en el que las líneas comentadas empiezan por el carácter punto y coma (;).

En el archivo php.ini se establecen las directivas de configuración de PHP, algunas de las cuales se comentan a continuación. Las principales directivas se comentan en el manual de PHP.

En XAMPP hay varios archivos php.ini, pero sólo se utiliza uno de ellos, normalmente el que se encuentra en C:\Archivos de programa\xampp\apache\bin. La ruta del archivo php.ini que se está utilizando se indica en el campo "Loaded Configuration File" de la primera tabla que muestra la función phpinfo(). En el menú de la página de administración de XAMPP hay una opción phpinfo() que muestra la configuración de PHP.

Antes de modificar cualquier archivo de configuración, se recomienda hacer una copia de seguridad del archivo de configuración original.


short_open_tag

En un archivo que contiene fragmentos de código PHP, estos se identifican mediante las etiquetas <?php .... ?>. La directiva short_open_tag especifica si también se admiten las etiqueta <? ... ?>.

short_open_tag = On Se admite el uso de <? ... ?>
short_open_tag = Off No se admite el uso de <? ... ?> (Valor recomendado)

Se recomienda que esta directiva tome el valor Off y que se utilice siempre la etiqueta <?php para empezar los fragmentos de código php.

Si en el servidor la directiva toma el valor On, las páginas XHTML que contengan una declaración XML (por ejemplo, <?xml version="1.0" encoding="iso-8859-1"?>) producirán un error. Este problema se resuelve utilizando un fragmento de código para generar la declaración XML.

<?xml version="1.0" encoding="iso-8859-1"?> Parse error: parse error, unexpected T_STRING in ejemplo.php on line 1
<?php print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"; ?>

En XAMPP esta directiva viene predeterminada con valor On, por lo que conviene modificarla a Off.

short_open_tag = Off No se admite el uso de <? ... ?> (Valor recomendado)

Volver al principio


register_globals

La directiva register_globals especifica si las variables EGPCS (Entorno, GET, POST, Cookies y Servidor) se registran automáticamente como variables globales.

register_globals = On Las variables EGPCS se registran como variables globales
register_globals = Off Las variables EGPCS no se registran como variables globales (Valor recomendado)

Por motivos de seguridad, se recomienda que esta directiva tome el valor Off.

En versiones antiguas de PHP (o si la directiva register_globals toma el valor On), las variables EGPCS eran variables globales, por lo que se podían llamar directamente.

Por ejemplo, si un formulario tiene un control con nombre "prueba" y se envía con el valor "Hola", el documento PHP que lo recibe puede utilizar la variable $prueba directamente.

<?php print "$prueba"; ?> Hola

Sin embargo, cuando la directiva register_globals toma el valor Off, se produce el aviso siguiente:

<?php print "$prueba"; ?> Notice: Undefined variable: prueba in ejemplo.phpon line 1

La forma correcta de acceder al dato recibido es a través de la matriz $_REQUEST (o $_POST o $_GET):

<?php print "$_REQUEST[prueba]"; ?> Hola

En XAMPP esta directiva viene predeterminada con valor Off, por lo que no es necesario modificarla.

register_globals = Off Las variables EGPCS no se registran como variables globales (Valor recomendado)

Volver al principio


error_reporting

La directiva error_reporting especifica el tipo de errores notificados por PHP.

error_reporting = E_ALL & ~E_NOTICE Se muestran todos los errores, menos los avisos.
error_reporting = E_ALL | E_STRICT Se muestran todos los errores (Valor recomendado)

Los posibles valores de esta directiva, que se pueden combinar con & (o con | en el caso de E_STRICT), son los siguientes:

Tipo de error Descripción
E_ALL Todos los errores y avisos
E_ERROR Errores fatales detectados en tiempo de ejecución
E_WARNING Advertencias (errores no fatales) detectados en tiempo de ejecución.
E_PARSE Errores de sintaxis detectados en tiempo de compilación.
E_NOTICE Avisos detectados en tiempo de ejecución (pueden deberse a errores involuntarios o a errores intencionados, por ejemplo, utilizar una variable no inicializada, pero utilizarla teniendo en cuenta que se inicializará automáticamente a una cadena vacía)
E_STRICT Avisos detectados en tiempo de ejecución, al activarlos PHP sugiere cambios en el código para que una mejor interoperabilidad y compatibilidad en el futuro.
E_CORE_ERROR Errores fatales detectados durante el arranque inicial de PHP.
E_CORE_WARNING Advertencias (errores no fatales) detectados durante el arranque inicial de PHP.
E_COMPILE_ERROR Erores fatales detectados en tiempo de compilación.
E_COMPILE_WARNING Advertencias (errores no fatales) detectados en tiempo de compilación.
E_USER_ERROR Mensajes de error generados por el usuario.
E_USER_WARNING Advertencias generadas por el usuario.
E_USER_NOTICE Avisos generados por el usuario.

Para detectar el mayor número posible de errores durante el desarrollo de las páginas PHP es conveniente que la directiva error_reporting tome el valor E_ALL, aunque muchos servidores no suelen mostrar los avisos ya que pueden deberse a errores intencionados. Además, conviene también mostrar los avisos E_STRICT, que informan de la utilización de características que pueden desaparecer en el futuro.

En XAMPP esta directiva viene predeterminada con el valor E_ALL & ~E_NOTICE, por lo que conviene modificarla a E_ALL | E_STRICT.

error_reporting = E_ALL | E_STRICT Se muestran todos los errores (Valor recomendado)

El problema de utilizar una configuración tan exigente es que algunos paquetes de terceros (blbliotecas, CMS, etc.) pueden dejar de funcionar y a veces no queda más remedio que volver a un valor menos estricto.

Volver al principio


extensión mysqli

Para acceder a la base de datos MySQL, existen varias extensiones. La extensión mysql es la versión más antigua, mientras que la extensión mysqli es una versión más moderna, especialmente diseñada para sacar partido de PHP 5.0 y MySQL 4.1 (o posteriores).

XAMPP tiene activada tanto la extensión mysql como la extensión mysqli, aunque conviene comprobar que la extensión mysqli no está comentada:

extension=php_mysqli.dll extensión mysqli activada (Valor recomendado)

Volver al principio


extensión pdo_mysql

Para acceder a la base de datos MySQL mediante la biblioteca PDO, debe estar activada la extensión PDO MySQL.

XAMPP tiene activada esta extensión, aunque conviene comprobar que la extensión pdo_mysql no está comentada:

extension=php_pdo_mysql.dll extensión PDO MySQL activada (Valor recomendado)

Volver al principio


extensión pdo_sqlite

Para acceder a la base de datos SQLite mediante la biblioteca PDO, debe estar activada la extensión PDO SQLite.

XAMPP tiene desactivada esta extensión, por lo que conviene activarla:

extension=php_pdo_sqlite.dll extensión PDO SQLite activada (Valor recomendado)

Volver al principio


session.save_handler

Para utilizar sesiones mediante el mecanismo propio de PHP (es decir, sin necesidad de crear funciones propias), la directiva session.save_handler debe tener el valor files.

En XAMPP esta directiva viene predeterminada con valor files, por lo que no es necesario modificarla.

session.save_handler = files utiliza el gestor de sesiones de PHP (Valor recomendado)

Algunos gestores de contenidos (CMS) tienen sus propias funciones de gestión de sesiones y requieren que esta directiva tome el valor user. Si en nuestra instalación de Apache el valor es user, para evitar conflictos nuestros programas pueden modificar esta directiva en tiempo de ejecución, mediante la función ini_set('session.save_handler', 'files'); (véase la lección sobre sesiones).

Volver al principio


magic quotes

Algunos caracteres deben "escaparse" (es decir, colocar una contrabarra \ antes del carácter) antes de poderse utilizar en consultas a bases de datos, ya que esos caracteres tienen significados especiales y provocarían resultados inesperados (o lo que es peor, provocados por usuarios maliciosos). El mecanismo de las comillas mágicas (magic quotes) se introdujo en PHP 3 para evitar ese problema y consiste en que si la directiva magic_quotes_gpc tiene el valor On, PHP escapa automáticamente todos los datos recibidos por los mecanismos GPC (Get/Post/Cookie).

magic_quotes_gpc = On comillas mágicas activadas
magic_quotes_gpc = Off comillas mágicas desactivadas (Valor recomendado)

El problema es que las comillas mágicas no resuelven todos los problemas y generan problemas en otras situaciones, por lo que actualmente se recomienda que esta directiva tome el valor Off (y tener en cuenta en los programas que la directiva puede tener el valor On).

En lugar de las comillas mágicas el programador debe utilizar las funciones específicas de cada base de datos para evitar ese problema (como mysqli_real_escape_string() en el caso de MySQL), o escapar explícitamente una cadena utilizando la función addslashes().

En XAMPP está directiva viene predeterminada con el valor On, por lo que conviene modificarla a Off.

magic_quotes_gpc = Off comillas mágicas desactivadas (Valor recomendado)

Volver al principio


post_max_size y upload_max_filesize

La directiva post_max_size especifica el tamaño máximo de los datos que pueden enviarse al servidor. La directiva upload_max_filesize especifica el tamaño máximo de un fichero que se envíe al servidor. Lógicamente, post_max_size debe ser superior a upload_max_filesize. Si el valor se expresa sin unidades, se interpreta como bytes. Se pueden utilizar las unidades K (kilobytes), M (megabytes) y G (Gigabytes).

Volver al principio

Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación: 14 de mayo de 2009

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.