Configuración de Apache y PHPEsta explicación sobre la configuración de Apache y PHP está adaptada a XAMPP 1.5.5, 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 > apachefriends > xampp > CONTROL XAMPP SERVER PANEL).
El fichero de configuración de Apache es el archivo httpd.conf. En XAMPP el archivo se encuentra normalmente en C:\Archivos de programa\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.
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">
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.
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 queremos acceder a documentos situados en "D:\www\Mis ejercicios" escribiendo en el navegador http://localhost/ejercicios, hay que añadir en el archivo httipd.conf la siguiente directiva Alias dentro de la directiva<IfModule alias_module> (como esta directiva ya existe en XAMPP, no es necesario añadir ni la primera línea ni las dos últimas del ejemplo siguiente):
<IfModule alias_module>
Alias /ejercicios "D:/www/Mis ejercicios"
<Directory "D:/www/Mis ejercicios">
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.
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 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) |
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) |
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) |
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) |
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 es necesario activarla borrando el carácter ; (punto y coma) del principio de la línea.
| extension=php_pdo_sqlite.dll | extensión PDO SQLite activada (Valor recomendado) |
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) |
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).
Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Esta obra está bajo una licencia de Creative
Commons.