www.mundodivx.com - www.mundodivx.org - www.forosdelweb.com - www.maestrosdelweb.com
Instalación de Apache + PHP + MySQL + phpMyAdmin + SMTP,
como módulo de Apache bajo Windows
1 - Instalación de Apache
1.1 - Caso A: Instalación de Apache 1.3.X
1.2 - Caso B: Instalación de Apache 2.0.X
1.3 - Caso C: Instalación de Apache 2.2.X
2 - Instalación de PHP
2.1 - Copia de archivos
2.1.1 - Caso A: Instalación de PHP4
2.1.2 - Caso B: Instalación de PHP5
2.2 - Configuración del archivo php.ini
2.2.1 - ¿Qué hacer con register_globals? ¿On u Off?
2.2.2 - Caso A: Instalación de PHP4
2.2.3 - Caso B: Instalación de PHP5
2.3 - Configuración del archivo httpd.conf de Apache
2.3.1 - Caso A: httpd.conf para Apache 1.3.X
2.3.2 - Caso B: httpd.conf para Apache 2.0.X
2.3.3 - Caso C: httpd.conf para Apache 2.2.X
2.4 - Ejemplo de activación de un módulo: mod rewrite
2.5 - Probando nuestro servidor Apache
3 - Instalación de MySQL
4 - Instalación de phpMyAdmin
5 - Configurando los usuarios del servidor MySQL
5.1 - Creación de nuestro usuario para MySQL
5.2 - Borrado de usuarios no deseados
5.3 - Recarga de privilegios
5.4 - Configurar los scripts para el nuevo usuario
6 - Instalación de ArGoSoft Mail Server
6 - Cómo realizar las actualizaciones a versiones superiores
7.1 - Cómo actualizar Apache
7.2 - Cómo actualizar PHP
7.3 - Cómo actualizar MySQL
7.4 - Cómo actualizar phpMyAdmin
7.5 - Cómo actualizar ArGoSoft Mail Server
8 - Manejo de más de un sitio web: VirtualHosts
8.1 - VirtualHosts en Apache 1.3.X y 2.0.X
8.2 - VirtualHosts en Apache 2.2.X
8.3 - Uso de cara a Internet
9 - Notas finales
ATENCIÓN: esta guía de instalación deja la configuración por defecto de todo el software de servidor mencionado en la misma. No se centra en el afinamiento de la configuración ni detalles sobre seguridad. El objetivo es crear un servidor en el PC para desarrollo y ayuda de los programadores, no para instalar un servidor de cara a su uso en la red, aunque se abordará el tema hacia el final de la guía. Quien use esta guía de instalación para lo segundo, corre bajo su responsabilidad, nosotros sólo podemos sugerirle que haga los ajustes de seguridad que crea convenientes. En este manual no abordaremos tal tema.
1 - Instalación de Apache - Web oficial: http://www.apache.org
En primer lugar vamos a distinguir 3 tipos de Apache, que se corresponderán con las versiones 1.3.X, 2.0.X y 2.2.X de este programa. El motivo de la distinción es que se usan bastante estas tres series de versiones, dependiendo del sistema operativo, y la configuración es ligeramente distinta. A pesar de que la 2.2.X es la más actual, aún muchas empresas de hosting usan la 1.3.X, por lo que puede sernos útil trabajar tanto en casa como en el servidor real con una misma versión. Por ejemplo, las 3 versiones son estables en sistemas Windows XP, pero la 2.0.X puede ser inestable bajo Windows 98. Por tanto, se explicará la forma de configuración para todas y así poder elegir con cual quedarnos. Así, si una falla, siempre se podrá utilizar otra.
Para descargar el Apache en su versión para Windows, podemos acceder por la siguiente URL: http://www.apache.org/mirrors/ En ella encontraremos una lista de servidores de descarga, de la cual debemos elegir uno, preferiblemente del país en el que vivamos para que la descarga sea un poco más rápida. Podemos encontrar los archivos de instalación de Apache para Windows en el directorio /httpd/binaries/win32 del servidor que elijamos. Hay que destacar que debemos bajar los binarios (binaries) para Windows (Win32), no los códigos fuente (sources) ya que éstos son para sistemas Linux.
Antes de iniciar la instalación, nos creamos una carpeta en el sitio donde queramos instalar los archivos del servidor (Apache, PHP, MySQL...), por ejemplo nos creamos una carpeta en la raíz del disco duro y que quede así: C:\Servidor\ (este paso no es estrictamente necesario, pero nos ayudará a tener todos los programas fácilmente localizables).
1.1 - Caso A: Instalación de Apache 1.3.X
IMPORTANTE: cabe decir que no es recomendable utilizar esta versión por estar ya obsoleta, en su lugar es mejor instalar Apache 2.2.X que es la serie en desarrollo ahora mismo. Los propios desarrolladores sugieren instalar esta versión sólo si tenemos algún módulo de Apache hecho por terceros que no tenga compatibilidad con las series 2.0.X o 2.2.X. Como es muy raro que eso ocurra, convendría seguir el consejo y optar por Apache 2.2.X (mejor que por el 2.0.X).
Si decidimos usar la versión 1.3.X, debemos buscar la última versión de esta serie. En la fecha de actualización de este manual era la 1.3.41, y el archivo a descargar es el llamado apache_1.3.41-win32-x86-no_src.msi Al ser una versión obsoleta, es muy posible que este archivo no se encuentre en ninguno de los servidores de descarga mencionados anteriormente, pero sí se podrá encontrar en la dirección http://archive.apache.org/dist/httpd/binaries/win32/ que es donde van guardando las versiones antiguas. Cuando esté descargado, ejecutamos el instalador y vamos recorriendo las pantallas hasta que salga una donde nos piden unos datos, en cuyo caso pondremos:

La dirección IP 127.0.0.1 es aquélla asociada a nuestra máquina, es decir el host local o vulgarmente conocido como Localhost. Es importante decir que a la hora de probar los scripts en local, da igual usar 127.0.0.1 o localhost. Finalmente, podemos optar por instalar Apache en la ruta que viene por defecto (dentro de Archivos de Programa), o bien cambiar ésta y ponerle el directorio donde instalaremos todos los programas del servidor:
C:\Servidor\Apache 1.3.X\
Bien, ahora vamos a instalar el PHP. Nos aseguramos ahora de tener cerrado el Apache.
1.2 - Caso B: Instalación de Apache 2.0.X
Para las versiones de esta serie, en la fecha de actualización del manual la última disponible era la 2.0.63, por lo que el archivo que tenemos que bajar tiene como nombre apache_2.0.63-win32-x86-no_ssl.msi Una vez que lo tengamos, abrimos el instalador y vamos recorriendo las pantallas hasta que salga una donde nos piden unos datos, en cuyo caso pondremos:

La dirección IP 127.0.0.1 es aquélla asociada a nuestra máquina, es decir el host local o vulgarmente conocido como Localhost. Es importante decir que a la hora de probar los scripts en local, da igual usar 127.0.0.1 o localhost. Finalmente, podemos optar por instalar Apache en la ruta que viene por defecto (dentro de Archivos de Programa), o bien cambiar ésta y ponerle el directorio donde instalaremos todos los programas del servidor:
C:\Servidor\Apache 2.0.X\
Bien, ahora vamos a instalar el PHP. Nos aseguramos ahora de tener cerrado el Apache.
1.3 - Caso C: Instalación de Apache 2.2.X
En la fecha de actualización del manual la última versión disponible era la 2.2.11, por lo que el archivo que tenemos que bajar se llama apache_2.2.11-win32-x86-no_ssl.msi Cuando lo descarguemos, lo ejecutamos y vamos recorriendo las pantallas hasta que salga la que nos solicita unos datos, y ponemos:

La dirección IP 127.0.0.1 es aquélla asociada a nuestra máquina, es decir el host local o vulgarmente conocido como Localhost. Es importante decir que a la hora de probar los scripts en local, da igual usar 127.0.0.1 o localhost. Finalmente, podemos optar por instalar Apache en la ruta que viene por defecto (dentro de Archivos de Programa), o bien cambiar ésta y ponerle el directorio donde instalaremos todos los programas del servidor:
C:\Servidor\Apache 2.2.X\
Bien, ahora vamos a instalar el PHP. Nos aseguramos ahora de tener cerrado el Apache.
2 - Instalación de PHP - Web oficial: http://www.php.net
2.1 - Copia de archivos
Dependiendo de si estamos instalando una versión 4 de PHP o una versión 5, seguiremos una parte o la otra. En caso de haber instalado Apache 2.2.X, tendremos que utilizar PHP 5.2 o superior, que son las versiones compatibles bajo Windows.
Antes de seguir, conviene realizar los siguientes pasos: ir a Mi PC -> Herramientas -> Opciones de Carpeta -> Ver, y revisando por abajo, que esté desactivada la casilla Ocultar las extensiones de archivo para tipo de archivo conocidos. Así se podrán ver las extensiones de los archivos y cambiarlas fácimente cuando sea necesario.
2.1.1 - Instalación de PHP4
IMPORTANTE: las serie de versiones 4.X de PHP están ya obsoletas, en su lugar se recomienda encarecidamente instalar PHP 5.X.
Procedemos a descargar el PHP4 para Windows. Dado que es una versión ya obsoleta, puede resultar un poco difícil encontrarlo en la web oficial. El archivo está localizado en la sección de releases y es el zip package. Para la versión 4.4.9, que es la última versión disponible a fecha de actualización de este manual, el enlace directo es: PHP 4.4.9 zip package [8,170Kb].
Una vez descargado, extraemos el contenido del ZIP en del directorio C:\Servidor\ En este caso se crea a su vez otra carpeta en C:\Servidor\php-4.4.9-Win32\ con todos los archivos de PHP dentro, y que procedemos a renombrar a C:\Servidor\PHP\
Y ahora hay que coger el php4ts.dll (localizado en C:\Servidor\PHP\php4ts.dll) y copiarlo al directorio System (en Windows 9x) o System32 (NT, 2000, XP, 2003) de la carpeta de Windows. Si ya existe el archivo, entonces lo sobreescribimos. Igualmente coger los archivos que están en la carpeta C:\Servidor\PHP\dlls\ y copiarlos a la carpeta System o System32 como hicimos con el archivo php4ts.dll (esto es para que los DLL queden en un directorio reconocido por el PATH de Windows).
2.1.2 - Instalación de PHP5
Procedemos a descargar el PHP5 para Windows. El archivo está localizado en la sección Downloads en el apartado Windows Binaries, en el cual hay un enlace que nos lleva a la sección de PHP para Windows donde se encuentran las descargas para este sistema (enlace directo). Dentro de la sección aparecen varias versiones:
Por tanto, para la versión 5.3.0, que es la versión disponible a fecha de actualización de este manual, el enlace directo es: VC6 x86 Thread Safe - Zip [12.86MB]. Según vayan saliendo nuevas versiones podremos irlas encontrando en esta sección.
Una vez descargado, nos creamos una carpeta en el sitio donde queramos instalar los archivos del servidor, por ejemplo C:\Servidor\PHP\ y extraemos los archivos del ZIP dendro de esa carpeta, tal que los contenidos del ZIP quedarán dentro de la ruta C:\Servidor\PHP\
Y ahora hay que coger todos los archivos DLL localizados en el directorio principal C:\Servidor\PHP\ y copiarlos al directorio System (en Windows 9x) o System32 (NT, 2000, XP, 2003) de la carpeta de Windows (esto es para que los DLL queden en un directorio reconocido por el PATH de Windows). Si ya existe algún archivo, lo sobreescribimos. Los archivos DLL contenidos en la carpeta C:\Servidor\PHP\ext\ no hace falta copiarlos.
2.2 - Configuración del archivo php.ini
IMPORTANTE: durante toda la configuración de directorios, conviene utilizar la barra "/" y no la barra "\", además de poner la ruta entre comillas (necesario si la ruta contiene espacios). También debemos activar la opción de ver las extensiones de archivos para poder renombrar el php.ini; para ello, en la carpeta donde están los archivos de PHP vamos a Herramientas -> Opciones de carpeta -> Ver -> Ocultar las extensiones de archivo para tipos de archivo conocidos, y desmarcamos la opción. Una vez acabemos la configuración, volveremos a activar la opción si lo deseamos.
Igual que el paso anterior, hay pequeñas diferencias dependiendo de si estamos instalando PHP4 o PHP5, así que elegimos nuestro caso. Pero antes de empezar, una aclaración muy importante sobre las variables globales que es válida para ambas versiones de PHP.
2.2.1 - ¿Qué hacer con register_globals? ¿On u Off?
Activar esta directiva nos permite asumir que las variables son globales y pueden llegar por cualquier método (POST, GET, COOKIE, SERVER, etc). Así, por ejemplo, si utilizamos una variable global de sesión o cookie se puede suplantar fácilmente mediante una variable por url, con lo cual nuestro script no es seguro. Un buen programador de PHP tendría la directiva en Off y usaría los arrays globales $HTTP_X_VARS o los superglobales $_POST, $_GET, etc., que están disponibles a partir de la versión 4.1.X de PHP. ¿Y por qué? Pues por esos temas de seguridad y porque para ser un buen programador debemos acostumbrarnos a no manejar variables globales. Sin embargo, por temas de compatibilidad con scripts antiguos o que hagan uso de variables globales, podría interesarnos activar esta característica, pero lo deseable sería tenerla en Off y hacer uso de los arrays globales o superglobales.
2.2.2 - Instalación de PHP4
El siguiente paso es configurar el php.ini Renombramos o copiamos
el archivo C:\Servidor\PHP\php.ini-dist y le ponemos como nombre
php.ini Ahora lo editamos con cualquier editor de texto, por ejemplo
el bloc de notas de Windows. Si lo necesitáramos (lee antes la explicación del
punto 2.2.1), buscamos y editamos la línea register_globals = Off y
le colocamos el valor: register_globals = On
A continuación vamos a indicar a PHP dónde se guardan las extensiones. Dentro del
php.ini buscamos extension_dir y le ponemos la carpeta
que contiene los archivos php_xxx.dll, que por defecto es la carpeta
C:/Servidor/PHP/extensions/
; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:/Servidor/PHP/extensions/"
Además podemos activar las extensiones que queramos o necesitemos, para lo cual
buscamos Windows Extensions y para cargar las extensiones les quitamos
el ; de delante. Por ejemplo, si quisiéramos cargar la extensión
php_gd2.dll (para manejar las funciones PHP relativas a imágenes)
entonces deberíamos cambiar ;extension=php_gd2.dll por
extension=php_gd2.dll Puedes ver para qué sirve cada extensión en el
Manual oficial de PHP.
Luego instalaremos phpMyAdmin, y éste necesita las extensiones php_mbstring.dll y php_mcrypt.dll, así que nos aseguraremos de activarlas. Además, cabe resaltar que algunas extensiones requieren de bibliotecas extra que no vienen en el paquete completo de PHP, y para hacerlas funcionar tendremos que buscarlas. No activemos todas porque luego saldrán errores de que no se encuentra tal archivo; antes de activar una extensión, comprobamos que en la carpeta de extensiones están los archivos DLL correspondientes.
Ahora, si vamos a hacer pruebas con upload de archivos via HTTP, debemos
indicar el directorio donde los archivos se almacenarán temporalmente. Para ello
buscamos upload_tmp_dir y le ponemos el valor de una carpeta que exista.
Por ejemplo, creamos una carpeta en C:\Servidor\PHP\Uploads\, por lo
que quedará algo así:
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "C:/Servidor/PHP/Uploads/"
Si queremos cambiar el tamaño máximo de los archivo que pueden subirse a través de
HTTP, buscamos upload_max_filesize y cambiamos el valor por defecto que
trae, 2M (2 MB), por el que queramos. No se recomienda poner un valor alto.
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
Pero además, como los archivos los subiremos con un formulario y método POST, debemos
indicar cuál es la cantidad máxima de datos que puede admitir por este método. Para
ello buscamos post_max_size y le cambiamos el valor, igual que hicimos
con upload_max_filesize.
; Maximum size of POST data that PHP will accept.
post_max_size = 10M
Por tanto, upload_max_filesize nos da el tamaño máximo que puede tener un
fichero al ser subido por HTTP, y post_max_size nos da el tamaño máximo que
admite al enviar un formulario. Por ejemplo, si la primera vale 2M y la segunda 10M,
eso quiere decir que podemos enviar hasta 5 archivos de tamaño máximo 2 MB (total 10
MB máximo).
Para trabajar con sesiones, debemos especificar un directorio donde se guarden los
archivos temporales. Al igual que unos pasos antes, buscamos session.save_path
y le damos el valor de un directorio que exista o lo creamos. En este caso, creamos
antes una carpeta en C:\Servidor\PHP\Sessions\ y ponemos:
session.save_path = "C:/Servidor/PHP/Sessions/"
A continuación copiamos el php.ini a la carpeta C:\Windows\ o C:\WinNT\ según nuestra versión de Windows.
¡Ahora vamos a decirle al Apache que tenemos el PHP!
2.2.3 - Instalación de PHP5
El siguiente paso es configurar el php.ini Renombramos o copiamos
el archivo C:\Servidor\PHP\php.ini-production (si usamos una versión
de PHP de la serie 5.X pero anterior a la 5.3.0, el archivo a renombrar será el
C:\Servidor\PHP\php.ini-dist) y le ponemos como nombre php.ini
Ahora lo editamos con cualquier editor de texto, por ejemplo el bloc de notas de
Windows. Si lo necesitáramos (lee antes la explicación del punto 2.2.1), buscamos
y editamos la línea register_globals = Off y le colocamos el valor:
register_globals = On
A continuación vamos a indicar a PHP dónde se guardan las extensiones. Dentro del
php.ini buscamos extension_dir y le ponemos la carpeta
que contiene los archivos php_xxx.dll, que por defecto es la carpeta
C:/Servidor/PHP/ext/
; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:/Servidor/PHP/ext/"
Además podemos activar las extensiones que queramos o necesitemos, para lo cual
buscamos Windows Extensions y para cargar las extensiones les quitamos
el ; de delante. Por ejemplo, si quisiéramos cargar la extensión
php_gd2.dll (para manejar las funciones PHP relativas a imágenes)
entonces deberíamos cambiar ;extension=php_gd2.dll por
extension=php_gd2.dll Puedes ver para qué sirve cada extensión en el
Manual oficial de PHP.
Luego instalaremos phpMyAdmin, y éste necesita la extensión php_mbstring.dll, así que nos aseguraremos de activarla (si usamos una versión de PHP de la serie 5.X pero anterior a la 5.3.0, también hay que activar php_mcrypt.dll). Cabe resaltar que algunas extensiones requieren de bibliotecas extra que no vienen en el paquete completo de PHP, y para hacerlas funcionar tendremos que buscarlas. No activemos todas porque luego saldrán errores de que no se encuentra tal archivo; antes de activar una extensión, comprobamos que en la carpeta de extensiones están los archivos DLL correspondientes.
La extensión php_mysql.dll es la que permite manejar las funciones relacionadas
con MySQL, y por defecto en PHP5 viene desactivada, por tanto vamos a activarla de la
forma que indicamos antes: buscamos ;extension=php_mysql.dll y quitamos
el ; de delante. Si no hacemos esto, no nos funcionará MySQL.
Ahora, si vamos a hacer pruebas con upload de archivos via HTTP, debemos
indicar el directorio donde los archivos se almacenarán temporalmente. Para ello
buscamos upload_tmp_dir y le ponemos el valor de una carpeta que exista.
Por ejemplo, creamos una carpeta en C:\Servidor\PHP\Uploads\, por lo
que quedará algo así:
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "C:/Servidor/PHP/Uploads/"
Si queremos cambiar el tamaño máximo de los archivo que pueden subirse a través de
HTTP, buscamos upload_max_filesize y cambiamos el valor por defecto que
trae, 2M (2 MB), por el que queramos. No se recomienda poner un valor alto.
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
Pero además, como los archivos los subiremos con un formulario y método POST, debemos
indicar cuál es la cantidad máxima de datos que puede admitir por este método. Para
ello buscamos post_max_size y le cambiamos el valor, igual que hicimos
con upload_max_filesize.
; Maximum size of POST data that PHP will accept.
post_max_size = 10M
Por tanto, upload_max_filesize nos da el tamaño máximo que puede tener un
fichero al ser subido por HTTP, y post_max_size nos da el tamaño máximo que
admite al enviar un formulario. Por ejemplo, si la primera vale 2M y la segunda 10M,
eso quiere decir que podemos enviar hasta 5 archivos de tamaño máximo 2 MB (total 10
MB máximo).
Para trabajar con sesiones, debemos especificar un directorio donde se guarden los
archivos temporales. Al igual que unos pasos antes, buscamos session.save_path
y le damos el valor de un directorio que exista o lo creamos. En este caso, creamos
antes una carpeta en C:\Servidor\PHP\Sessions\ y ponemos:
session.save_path = "C:/Servidor/PHP/Sessions/"
A continuación copiamos el php.ini a la carpeta C:\Windows\ o C:\WinNT\ según nuestra versión de Windows.
¡Ahora vamos a decirle al Apache que tenemos el PHP!
2.3 - Configuración del archivo httpd.conf de Apache
Este apartado es distinto según la versión de Apache instalada. El motivo es que la gestión de los módulos es distinta según la versión, por lo que la configuración no es idéntica aunque sí parecida. Asimismo cambia algo la configuración si se trata de PHP4 o PHP5, asi que tenemos 6 casos posibles combinando las 3 versiones de Apache y las 2 de PHP (aunque veremos que realmente son 5, ya que Apache 2.2.X sólo soporta PHP a partir de la versión 5.2). Hay que editar el archivo httpd.conf que encontramos en la carpeta Conf dentro del directorio del Apache.
2.3.1 - Caso A: httpd.conf para Apache 1.3.X
Buscamos Dynamic Shared Object (DSO) Support que es donde se cargan
los módulos. Ahí vamos a cargar el módulo de PHP para Apache, dando la dirección
del archivo php4apache.dll (PHP4) o php5apache.dll
(PHP5) que lo contiene. Encontramos hasta un ejemplo:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Y ahora añadimos justo debajo (suponiendo que las rutas de los archivos son las que venimos siguiendo en este tutorial):
LoadModule php4_module "C:/Servidor/PHP/sapi/php4apache.dll"LoadModule php5_module "C:/Servidor/PHP/php5apache.dll"De tal manera que para PHP4 tiene que quedar así:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php4_module "C:/Servidor/PHP/sapi/php4apache.dll"
Y para PHP5 tiene que quedar así:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php5_module "C:/Servidor/PHP/php5apache.dll"
Ahora bajamos un poco por el httpd.conf y buscamos ClearModuleList.
Justo después llamamos al módulo mod_php4.c (PHP4) o mod_php5.c (PHP5), de
tal manera que para PHP4 quede así:
ClearModuleList
AddModule mod_php4.c
#AddModule mod_vhost_alias.c
Y para PHP5 debe quedar así:
ClearModuleList
AddModule mod_php5.c
#AddModule mod_vhost_alias.c
Ahora buscamos el módulo mod_dir.c y nos sale esto:
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
Modificamos la línea central para que si entramos en un directorio a través de http://127.0.0.1/directorio/ nos autoejecute el archivo índice predeterminado (si existe) y no nos salga un mensaje de error. Se pueden usar más nombres si lo preferimos. Se ejecutarán por orden: si no encuentra el primero, pasa al segundo; si no está el segundo, pasa al tercero, y así sucesivamente hasta que si no encuentra ninguno entonces da error. Por ejemplo, con la siguiente línea si en nuestro directorio tenemos un index.htm y un index.php, por defecto se ejecutará el index.htm ya que está antes.
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5 index.phtml
Ahora le añadimos debajo estas líneas:
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
La primera indica las extensiones que serán interpretadas por Apache. Por ejemplo podemos añadir la extensión .htm o .html para que Apache interprete código PHP contenido en esas páginas (es decir, el uso de código PHP no está limitado sólo a archivos de extensión .php). La extensión .php5 la borraremos en caso de instalar una versión de PHP4 ya que no tiene sentido utilizarla. La segunda línea sirve para que si entramos en una página http://127.0.0.1/loquesea.phps entonces se muestre el código PHP a color, muy útil para mostrar fácilmente el código fuente de una página. De tal forma que al final, después de estos comentarios, todo queda así:
<IfModule mod_dir.c>
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5 index.phtml
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
</IfModule>
El directorio predeterminado para guardar nuestras páginas es el htdocs del Apache:
C:\Archivos de programa\Apache Group\Apache\htdocs\
Pero podemos cambiarlo fácilmente. Buscamos DocumentRoot y nos sale esto:
DocumentRoot "C:/Archivos de programa/Apache Group/Apache/htdocs"
Sustituimos la carpeta del Apache por la que queramos. Todos los archivos que vayamos a probar deberán estar localizados en esta carpeta. Por ejemplo nos creamos una carpeta dentro del directorio del servidor en C:\Servidor\Web\
DocumentRoot "C:/Servidor/Web/"
Por lo que construiremos toda nuestra página dentro de ese directorio, que equivale al directorio raíz de nuestro host local.
Y ya podemos guardar el archivo httpd.conf
2.3.2 - Caso B: httpd.conf para Apache 2.0.X
Buscamos Dynamic Shared Object (DSO) Support que es donde se cargan
los módulos. Ahí vamos a cargar el módulo de PHP para Apache, dando la dirección
del archivo php4apache2.dll (PHP4) o php5apache2.dll
(PHP5) que lo contiene. Encontramos hasta un ejemplo:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Y ahora añadimos justo debajo (suponiendo que las rutas de los archivos son las que venimos siguiendo en este tutorial):
LoadModule php4_module "C:/Servidor/PHP/sapi/php2apache2.dll"LoadModule php5_module "C:/Servidor/PHP/php5apache2.dll"De tal manera que para PHP4 tiene que quedar así:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php4_module "C:/Servidor/PHP/sapi/php4apache2.dll"
Y para PHP5 tiene que quedar así:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php5_module "C:/Servidor/PHP/php5apache2.dll"
El directorio predeterminado para guardar nuestras páginas es el htdocs del Apache:
C:\Archivos de programa\Apache Group\Apache\htdocs\
Pero podemos cambiarlo fácilmente. Buscamos DocumentRoot y nos sale esto:
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Archivos de programa/Apache Group/Apache/htdocs"
Sustituimos la carpeta del Apache por la que queramos. Todos los archivos que vayamos a probar deberán estar localizados en esta carpeta. Por ejemplo nos creamos una carpeta dentro del directorio del servidor en C:\Servidor\Web\
DocumentRoot "C:/Servidor/Web/"
Por lo que construiremos toda nuestra página dentro de ese directorio, que equivale al directorio raíz de nuestro host local.
Ahora buscamos DirectoryIndex y nos sale algo como esto:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.html.var
Modificamos la última línea para que si entramos en un directorio a través de http://127.0.0.1/directorio/ nos autoejecute el archivo índice predeterminado (si existe) y no nos salga un mensaje de error. Se pueden usar más nombres si lo preferimos. Se ejecutarán por orden: si no encuentra el primero, pasa al segundo; si no está el segundo, pasa al tercero, y así sucesivamente hasta que si no encuentra ninguno entonces da error. Por ejemplo, con la siguiente línea si en nuestro directorio tenemos un index.htm y un index.php, por defecto se ejecutará el index.htm ya que está antes.
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5 index.phtml
Ahora le añadimos debajo estas líneas:
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
La primera indica las extensiones que serán interpretadas por Apache. Por ejemplo podemos añadir la extensión .htm o .html para que Apache interprete código PHP contenido en esas páginas (es decir, el uso de código PHP no está limitado sólo a archivos de extensión .php). La extensión .php5 la borraremos en caso de instalar una versión de PHP4 ya que no tiene sentido utilizarla. La segunda línea sirve para que si entramos en una página http://127.0.0.1/loquesea.phps entonces se muestre el código PHP a color, muy útil para mostrar fácilmente el código fuente de una página. De tal forma que al final, después de estos comentarios, todo queda así:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
# The index.html.var file (a type-map) is used to deliver content-
# negotiated documents. The MultiViews Option can be used for the
# same purpose, but it is much slower.
#
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5 index.phtml
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
Y ya podemos guardar el archivo httpd.conf
2.3.3 - Caso C: httpd.conf para Apache 2.2.X
Antes de nada, comentar que esta serie de Apache bajo Windows sólo soporta versiones de PHP5 a partir de la 5.2, por lo que si estamos tratando de instalar otra versión anterior, no nos funcionará.
Buscamos Dynamic Shared Object (DSO) Support que es donde se cargan
los módulos. Ahí vamos a cargar el módulo de PHP5 para Apache, dando la dirección
del archivo php5apache2_2.dll que, como hemos dicho, viene a partir de
la versión 5.2 de PHP. Encontramos hasta un ejemplo:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Y ahora añadimos justo debajo (suponiendo que las rutas de los archivos son las que venimos siguiendo en este tutorial):
LoadModule php5_module "C:/Servidor/PHP/php5apache2_2.dll"
De tal manera que tiene que quedar así:
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php5_module "C:/Servidor/PHP/php5apache2_2.dll"
El directorio predeterminado para guardar nuestras páginas es el htdocs del Apache:
C:\Archivos de programa\Apache Group\Apache\htdocs\
Pero podemos cambiarlo fácilmente. Buscamos DocumentRoot y nos sale esto:
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "C:/Archivos de programa/Apache Group/Apache/htdocs"
Sustituimos la carpeta del Apache por la que queramos. Todos los archivos que vayamos a probar deberán estar localizados en esta carpeta. Por ejemplo nos creamos una carpeta dentro del directorio del servidor en C:\Servidor\Web\
DocumentRoot "C:/Servidor/Web/"
Por lo que construiremos toda nuestra página dentro de ese directorio, que equivale al directorio raíz de nuestro host local.
En las versiones anteriores de Apache, por defecto deja a cualquier usuario utilizar cualquier directorio del servidor, con lo cual no tenemos que cambiar nada, pero en esta versión 2.2 viene configurado por defecto con un conjunto de características muy restrictivas, con lo cual si instalamos nuestro servidor y lo ponemos a funcionar, resulta que nos da un error de acceso prohibido cuando queremos ver alguna página. Para solucionarlo, buscamos esto en el httpd.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
Y lo dejamos así:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
Ahora buscamos DirectoryIndex y nos sale algo como esto:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Modificamos la línea central para que si entramos en un directorio a través de http://127.0.0.1/directorio/ nos autoejecute el archivo índice predeterminado (si existe) y no nos salga un mensaje de error. Se pueden usar más nombres si lo preferimos. Se ejecutarán por orden: si no encuentra el primero, pasa al segundo; si no está el segundo, pasa al tercero, y así sucesivamente hasta que si no encuentra ninguno entonces da error. Por ejemplo, con la siguiente línea si en nuestro directorio tenemos un index.htm y un index.php, por defecto se ejecutará el index.htm ya que está antes.
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5 index.phtml
Ahora le añadimos debajo estas líneas:
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
La primera indica las extensiones que serán interpretadas por Apache. Por ejemplo podemos añadir la extensión .htm o .html para que Apache interprete código PHP contenido en esas páginas (es decir, el uso de código PHP no está limitado sólo a archivos de extensión .php). La segunda línea sirve para que si entramos en una página http://127.0.0.1/loquesea.phps entonces se muestre el código PHP a color, muy útil para mostrar fácilmente el código fuente de una página. De tal forma que al final, después de estos comentarios, todo queda así:
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.php5 index.phtml
AddType application/x-httpd-php .php .php3 .php4 .phtml
AddType application/x-httpd-php-source .phps
</IfModule>
Y ya podemos guardar el archivo httpd.conf
2.4 - Ejemplo de activación de un módulo: mod rewrite
Es interesante estudiar cómo activar módulos del Apache para activarle funciones que por defecto vienen desactivadas, como es el caso del famoso mod rewrite. Vamos a ver cómo activar este utilísimo módulo.
En primer lugar dentro del httpd.conf debemos buscar la línea donde está nombrado el módulo mod_rewrite.so:
#LoadModule rewrite_module modules/mod_rewrite.so
Y le quitamos el símbolo # de delante para activarlo:
LoadModule rewrite_module modules/mod_rewrite.so
En caso de instalar Apache 1.3.X, también hay que buscar la siguiente línea y quitarle
el # de delante:
#AddModule mod_rewrite.c
Con eso ya tendremos el módulo activo, pero Apache no podrá leer aún los .htaccess, así que para que los lea debemos buscar lo siguiente (Apache 1.3.X y 2.0.X):
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Y dejarlo como sigue:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
En caso de usar Apache 2.2.X, aparecerá esto:
<Directory />
Options FollowSymLinks
AllowOverride none
Order deny,allow
Allow from all
Satisfy all
</Directory>
Y lo dejaremos así:
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
Satisfy all
</Directory>
Tras reiniciar el servidor Apache ya debería tomarnos las reglas indicadas en el .htaccess
2.5 - Probando nuestro servidor Apache
Ahora vamos a probar el Apache y PHP. Con la configuración que elegimos al instalarlo, Apache estará corriendo como servicio del sistema, es decir, estará activo aunque no veamos ningún icono por ninguna parte. Tenemos que reiniciar ese servicio para que tome los cambios que acabamos de hacer en el httpd.conf La forma de reiniciarlo es distinta según la versión, siendo más cómodo en las versiones 2.0.X y 2.2.X:
Si todo ha ido bien, podemos crear un archivo llamado por ejemplo info.php dentro de la carpeta de nuestra web cuyo contenido sea exclusivamente el siguiente:
<?php phpinfo(); ?>
Si accedemos mediante nuestro navegador a la dirección http://127.0.0.1/info.php o http://localhost/info.php (recordemos que son equivalentes) con el Apache activo, deberíamos visualizar una página de información de PHP. Si no sale, algo ha fallado, en ese caso revisaremos todos los pasos. Si tenemos que cambiar algo en el php.ini, no hay que olvidarse de copiarlo luego en C:\Windows\ (o bien editar directamente la copia que se encuentra en dicho directorio).

Como se puede observar, para acceder a nuestro servidor local y así poder probar los scripts y las páginas de nuestra web, siempre accederemos con la dirección http://127.0.0.1/ o http://localhost/ (sin www) en el navegador, pues ésta es la dirección del host local de nuestro ordenador. En general, para visualizar o acceder a cualquier archivo (PHP, HTML, TXT, ZIP, GIF, JPG, etc.) que tengamos en nuestra carpeta de la web, lo haremos de la siguiente forma:
http://localhost/carpeta/archivo.ext
Donde carpeta es el directorio relativo al directorio raíz en que se encuentra el archivo archivo.ext
Por tanto resaltar que no sólo podemos hacer llamadas a archivos PHP, sino también a páginas HTML, descarga de archivos, imágenes, etc., tan solo poniendo la dirección correcta en el navegador. De esta forma, podemos tener nuestra web funcionando en nuestro propio ordenador para construirla desde cero o bien hacer las pruebas que necesitemos sin tener que estar conectados a Internet y jugando con el servidor real.
3 - Instalación de MySQL - Web oficial: http://www.mysql.com
Vamos a hacer la instalación de una versión 5.0.X, por lo que en este caso buscaremos la versión que corresponda en los downloads para Windows. En la fecha de actualización de este manual, la versión utilizada fue la 5.0.83.
Existen varios tipos de archivos descargable, pero el que tenemos que elegir es el llamado Windows (x86) ZIP/Setup.EXE, que es el que trae el instalador de MySQL (si nos bajamos por ejemplo el Without installer (unzip in C:\), éste no trae instalador). Al descomprimir el ZIP, nos sale el instalador de MySQL que ejecutaremos. Elegiremos hacer una instalación de tipo Custom, y la ruta de instalación la dejaremos por ejemplo en C:\Servidor\MySQL\
Una vez instalado, nos pide que nos registremos en www.MySQL.com, pero podemos cancelarlo, y acto seguido nos pregunta si queremos configurar el servidor ahora, y muy importante, le decimos que sí, activando la opción correspondiente. Tras ello, se abre la ventana de configuración de MySQL, y en ella vamos a hacer una configuración detallada (opción Detailed Configuration).
Lo primero que nos pregunta es el tipo de servidor que vamos a montar. Como sólo lo vamos a usar para hacer pruebas en casa, elegimos Developer Machine. Después nos pide el tipo de uso que le vamos a dar, y elegimos una Multifunctional Database. Más adelante nos pide el número máximo de conexiones MySQL que se pueden aceptar a la vez, y lo dejamos configurado en Decision Support, que asume 20 conexiones como máximo (suficientes para nuestros propósitos). A continuación nos pide configurar los parámetros de red, en este caso el puerto TCP/IP, que dejaremos el que pone por defecto (3306), y marcamos Enable Strict Mode. Lo siguiente es configurar la codificación de caracteres, que para el castellano es Latin1. Después podemos configurar MySQL para que funcione como servicio de Windows, para ello activamos Install As Windows Service, le ponemos un nombre al servicio (por ejemplo MySQL o MySQL5), y si queremos que arranque automáticamente con Windows (recomendado para no tener que activarlo manualmente cada vez que queramos probar algo), activamos Launch the MySQL server automatically. Finalmente, lo último que tenemos que introducir es la contraseña del usuario root, por ejemplo vamos a poner hola. Con ello, ya queda instalado y configurado MySQL. En la imagen podemos ver un ejemplo de una de las ventanas que nos salen.

Por defecto, MySQL crea un usuario de nombre root con la contraseña que hayamos elegido, y éste es el usuario que usaremos en nuestros scripts o en las aplicaciones que nos lo pidan (foros, portales, etc.). Sin embargo, más adelante se expone cómo crear nuevos usuarios con sus respectivas contraseñas, para así evitar usar este usuario que se crea por defecto, o bien hacer que el servidor pueda ser usado por más de una persona. Pero vayamos por partes, pues antes tendremos que instalar el phpMyAdmin, una aplicación muy útil para el manejo de bases de datos.
4 - Instalación de phpMyAdmin - Web oficial: http://www.phpmyadmin.net
PhpMyAdmin es una utilidad gratuita que nos sirve para inteactuar con una base de datos de forma muy sencilla y desde una interfaz web. Nos sirve por ejemplo para crear bases de datos, tablas, borrar o modificar dados, añadir registros, hacer copias de seguridad, etc. Es una aplicación tan útil que todos los hosting con MySQL disponen de ella, por eso se analizará su instalación. Además, vamos a usarlo para crear los usuarios MySQL para así poder utilizar las bases de datos de forma segura o con múltiples usuarios. Al ser una aplicación escrita en PHP, necesita de Apache, PHP y MySQL para poder funcionar, por eso los hemos instalado primero.
Si accedemos a la página oficial, nos encontramos en la sección de descargas con una lista de links, y el que tenemos que elegir es el ZIP de la última versión. En nuestro caso vamos a utilizar la versión 3.2.0.1 de esta aplicación, que es la versión disponible en la fecha de actualización de este manual.
NOTA: esta versión requiere PHP 5.2 y MySQL 5.0 (o superiores), por lo que si hemos instalado otras versiones de PHP o MySQL tendremos que bajar una versión anterior de phpMyAdmin (la configuración es similar a la mostrada aquí).
Al ser un conjunto de scripts PHP, no lleva instalación: simplemente hay que
extraer todos los archivos del ZIP en la carpeta raíz de nuestra web, la que utilizamos
en Apache en DocumentRoot. En este ejemplo es C:\Servidor\Web\
No hay que hacerlo dentro de la carpeta del PHP, MySQL o similares. Como pone un nombre
muy largo al directorio, mejor lo renombramos simplemente a phpmyadmin, de forma que
quedaría algo así: C:\Servidor\Web\phpMyAdmin\
Ahora vamos a configurar el phpMyAdmin. Para ello debemos abrir el archivo situado en C:\Servidor\Web\phpmyadmin\libraries\config.default.php con un editor de texto como el bloc de notas, y leyendo de arriba hacia abajo, buscamos la siguiente línea:
$cfg['PmaAbsoluteUri'] = '';
Debemos darle la ruta absoluta donde tenemos el phpMyAdmin. En nuestro caso sería así:
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/';
Recordemos que podemos poner localhost o 127.0.0.1, porque significan lo mismo. Ahora buscamos esta otra línea:
$cfg['blowfish_secret'] = '';
En ella pondremos una cadena de caracteres cualquiera, que servirá de semilla para la encriptación de contraseñas al usar la autentificación con cookies. Por ejemplo:
$cfg['blowfish_secret'] = '89asbf6sd0b9fk78sdbvzq1';
Para entrar a phpMyAdmin por primera vez, debemos configurar el tipo de autentificación
para que pida usuario y contraseña, que es el método recomendado (como veremos, existen
varios). Para eso, buscamos $cfg['Servers'][$i]['auth_type'] y cambiamos su
valor a cookie, de forma que quede así:
$cfg['Servers'][$i]['auth_type'] = 'cookie';
Para cambiar la duración de las sesiones en phpMyAdmin, podemos buscar la siguiente variable y poner el valor de la duración de la sesión, en segundos:
$cfg['LoginCookieValidity'] = 1800;
Si importamos y exportamos bases de datos muy grandes, puede llegar a ser necesario aumentar el tiempo máximo de ejecución del script. Éste se puede cambiar con la siguiente variable, cuyo valor viene dado en segundos:
$cfg['ExecTimeLimit'] = 300;
Y guardaremos el archivo, pero no lo cerraremos. Para probar phpMyAdmin y ver si funciona, en el navegador ponemos: http://localhost/phpmyadmin/index.php
5 - Configurando los usuarios del servidor MySQL
Si hemos llegado hasta aquí, ya tenemos todo instalado y listo para funcionar. Recordemos que ahora nuestro usuario de MySQL es root con la contraseña que elegimos. Con esto podría valernos para hacer pruebas utilizando MySQL en nuestro servidor local. Sin embargo, en este paso vamos a ver cómo eliminar el usuario creado por defecto y cómo añadir nuestro propio usuario con contraseña. Lo haremos mediante phpMyAdmin.
Entramos a phpMyAdmin mediante la dirección http://localhost/phpmyadmin/index.php (recordemos tener MySQL y Apache activos para que phpMyAdmin funcione), y nos pedirá usuario y contraseña. Ya sabemos: usuario root y la contraseña elegida, que en nuestro ejemplo es hola. Ahora vamos a realizar las siguientes tareas:
5.1 - Creación de nuestro usuario para MySQL
Desde la página inicial de phpMyAdmin podemos seleccionar el idioma castellano si lo deseamos. A continuación, hacemos clic en el link Privilegios y en la siguiente pantalla vamos a Agregar un nuevo usuario. Ahora vamos a agregar nuestro usuario y contraseña, que será el que usemos luego en nuestros scripts que hagan uso de MySQL. Por ejemplo, podemos poner el mismo usuario y contraseña que tenemos en nuestro hosting, pues así tendremos menos cosas que recordar. Como ejemplo, pongamos el usuario Pepe y la contraseña adios.
Introduciremos el nombre de usuario y contraseña, le daremos acceso a Cualquier servidor (para que se pueda acceder a MySQL desde cualquier IP, incluidas las externas a nuestro ordenador) o a Local (si sólo queremos que se acceda desde nuestro ordenador donde hemos instalado MySQL) y le daremos todos los permisos y privilegios (marcando todas las casillas que aparecen). Hacemos clic en Continuar.
5.2 - Borrado de usuarios no deseados
Una vez creado nuestro usuario o usuarios, vamos a borrar aquél que se crea por defecto y que conviene borrar para evitar brechas de seguridad, sobre todo si vamos a usar el PC como servidor hacia Internet y no sólo para hacer pruebas desde nuestro hogar. Vamos a borrar el usuario root y dejaremos el que acabamos de crear. Lo hacemos de una forma rápida y sencilla desde el mismo link Privilegios de antes: seleccionar los usuarios que no queramos y presionar Continuar en el apartado que dice Eliminar a los usuarios seleccionados.
5.3 - Recarga de privilegios
Una vez creado o eliminado algún usuario, veremos que phpMyAdmin tiene en la parte inferior de la pantalla un aviso en un cuadro rojo, que dice que debemos recargar los privilegios, y nos proporciona un link donde debemos hacer clic para que los cambios sean efectivos. Este paso es importante, pues si no recargamos los privilegios, ningún cambio anterior ser hará efectivo hasta entonces.
5.4 - Configurar los scripts para el nuevo usuario
Una vez borrado el usuario root y recargados los privilegios, phpMyAdmin deja de funcionar. El motivo es bien simple: al entrar antes a phpMyAdmin, usamos el usuario root con contraseña hola, y este usuario lo acabamos de eliminar. Entonces ahora tendremos que volver a entrar pero ya con nuestro usuario y contraseña elegidos: Pepe y adios.
Bien, ya casi está todo. Ahora vamos a ver las distintas formas que tenemos para entrar a phpMyAdmin. Como mencionamos hace unas líneas, una de las formas de autentificarse en esta aplicación es usando el método cookie, que lo que hace es pedirnos usuario y contraseña y guarda la sesión con una cookie. Una forma alternativa es usar http, que es muy parecida solo que el usuario y contraseña se introducen en un cuadro de diálogo, a través de HTTP y no de cookies. El último método, config, consiste en que en el propio archivo config.default.php escribimos nuestro usuario y contraseña, de tal forma que nunca hará falta introducirlos; es menos seguro, ya que cualquiera podría entrar, pero si somos el único usuario del ordenador, quizá sea interesante para evitar tener que poner los datos cada vez que vamos a acceder.
Para configurar este tipo de acceso, volvemos al config.default.php del phpMyAdmin, que no habíamos cerrado y localizamos estas variables:
$cfg['Servers'][$i]['auth_type']
$cfg['Servers'][$i]['user']
$cfg['Servers'][$i]['password']
Y les cambiamos su valor. En la primera podemos poner config, http o cookie, según hemos visto (si dudamos, lo mejor es usar cookie). Con el método config, y sólo en ese caso, a la segunda le damos el nombre de usuario y a la tercera la contraseña del usuario que acabamos de crear. Por ejemplo si hemos usado el método cookie, quedaría así (sin usuario ni contraseña):
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
Y si queremos usar el método config con nuestro usuario Pepe y contraseña adios, quedaría así:
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'Pepe';
$cfg['Servers'][$i]['password'] = 'adios';
NOTA: phpMyAdmin puede tener un fallo (bug conocido) en esta zona. Al usar autentificación HTTP, un usuario que acaba de abandonar la sesión no puede volver a entrar con el mismo nombre. Para solucionarlo, se deben cerrar todas las ventanas del navegador que estén abiertas, y a continuación si abrimos una nueva ventana y volvemos a intentar entrar nos debería dejar sin problemas. Para evitarlo, y que al entrar siga pidiendo usuario y contraseña, de los dos métodos recomendamos utilizar el cookie.
Si ahora desde el navegador, y con el Apache y MySQL activos, accedemos a la dirección http://localhost/phpmyadmin/index.php podemos empezar a utilizar phpMyAdmin con el nuevo usuario y contraseña. Si elegimos pedir usuario y contraseña, cuando accedamos a phpMyAdmin tendremos que introducirlos de nuevo: Pepe como usuario y adios como contraseña, si hemos seguido el ejemplo. Por tanto, podemos empezar a usar phpMyAdmin, y quizá lo primero que interese hacer sea crear una nueva base de datos para meter ahí lo que queramos.
De la misma forma, en nuestros archivos PHP que usen MySQL usaremos el usuario y contraseña que nos hemos creado, de tal forma que al hacer la conexión a MySQL quede algo como esto:
<?php
// .....Funciones PHP.....
mysql_connect("127.0.0.1","Pepe","adios");
// .....Más funciones PHP.....
?>
O bien, si estamos instalando un prefabricado como PHP Nuke o un foro, o cualquier aplicación en la que nos solicitan un host, usuario y contraseña, los datos que deberemos indicar son esos: 127.0.0.1 o localhost como servidor, Pepe como usuario, adios como contraseña, y el nombre de la base de datos que hayamos creado con phpMyAdmin. No obstante, se recomienda tener unos conocimientos básicos sobre MySQL en PHP para manejar correctamente estas funciones.
6 - Instalación de ArGoSoft Mail Server - Web oficial: http://www.argosoft.com
NOTA: ArgoSoft ha modificado recientemente su servidor de correo gratuito y ahora se denomina ArgoSoft Mail Server .NET Freeware. Esta versión tiene algunos fallos por lo que he decidido no actualizar la guía aún, a la espera de que salga una versión corregida. La información que se incluye en este apartado se refiere a la primera versión del servidor de correo de ArgoSoft, que ya no se encuentra en su página web. No obstante, en la nueva versión las opciones que se mencionan en este apartado siguen existiendo, por lo que no es muy difícil seguir todos los pasos.
Si vamos a hacer pruebas con envío de correos o bien vamos a usar nuestro PC como servidor de nuestra web, es posible que nos interese instalar un pequeño servidor de correo para poder usar la función mail() de PHP. Con uno de estos servidores podremos enviar correos desde PHP, pero obviamente no podremos recibir nada ya que se tratan de servidores SMTP (enviar) y no POP/IMAP (recibir). Lo que sí hay que tener en cuenta es que para que estos servidores de correo funcionen, hay que tener conexión a Internet. Vamos entonces a ello. En principio no hay que cambiar nada en el php.ini ya que éste viene por defecto configurado para un servidor de correo instalado en local, que es de lo que trata este manual.
Pero sí podremos cambiar la variable sendmail_from, que será el
remitente que le aparecerá a la persona que reciba el correo si no ponemos el
campo From en las cabeceras del email mediante la función mail()
[mail function]
; For Win32 only.
SMTP = localhost
; For Win32 only.
sendmail_from = me@localhost.com
Una opción de servidor sería el QK SMTP, pero hemos elegido el Argosoft Mail Server por su sencillez de uso. Este servidor tiene versión gratuita con pequeñas limitaciones (no admite correos de más de 5 MB, por ejemplo). Estará en la sección de descargas de la web oficial, con el nombre Mail Server Freeware. En la fecha de actualización de este manual, la última versión disponible era la 1.8.9.3. Una vez lo instalamos instalado, requiere una pequeña configuración.
Vamos al menú Tools -> Options -> General, y seleccionamos las casillas Automatically Start the Server y Allow Relay. En DNS Server tenemos que poner la dirección IP de algún servidor DNS. Si no sabemos ninguna, nada más fácil que hacer una búsqueda en nuestro amigo Google usando términos como listado servidores DNS. Por ejemplo, vamos a usar uno de los servidores OpenDNS, 208.67.222.222 ó 208.67.220.220, en concreto el primero de ellos.

Para activar el servidor, pulsamos el botón Start (triángulo verde), y para pararlo el botón Stop (cuadrado rojo). Lo dejamos activo (quedará un icono al lado del reloj) y ya podemos usar scripts PHP que hagan uso de la función mail()
7 - Cómo realizar las actualizaciones a versiones superiores
Si nos gusta ir a la última y dado que continuamente hay actualizaciones de seguridad, añadimos unas notas de cómo actualizar cualquiera de estos elementos una vez los tengamos instalados y aparezca una nueva versión. Tengamos en cuenta que al sacar una nueva versión puede que haya cambios grandes en la forma de instalación, pues estas notas se harán suponiendo que la forma de instalación no cambia de una versión a otra, lo cual es lo habitual.
7.1 - Cómo actualizar Apache
Para actualizarlo, lo primero es desinstalar el programa desde el Panel de Control -> Agregar o Quitar Programas. A continuación, borraremos manualmente aquellas carpetas del Apache que el desinstalador no haya borrado, que pueden ser aquellas que contienen los logs del servidor. Y finalmente, instalaremos la nueva versión de Apache y configuraremos el httpd.conf igual que se explica en los pasos anteriores, usando las mismas carpetas que usamos en la versión anterior de Apache para que nada cambie.
7.2 - Cómo actualizar PHP
Lo primero, paramos nuestro servidor Apache para evitar que los archivos de PHP estén en uso. A continuación eliminaremos la carpeta que se encuentra en C:\Servidor\PHP\ Luego instalaremos la nueva versión de PHP como se dice más arriba, configuraremos el nuevo php.ini, y en los pasos que se dice que copiemos ciertos archivos a los directorios de Windows, sobreescribiremos todos archivos existentes con los nuevos, incluido el nuevo php.ini Ya sólo queda arrancar de nuevo el Apache y ver si todo ha ido bien.
7.3 - Cómo actualizar MySQL
Antes de empezar, convendría apagar el Apache para evitar que haya archivos en uso. A continuación, copiaremos el directorio data (que está dentro de la carpeta de MySQL y es el que contiene nuestras bases de datos, tablas, etc. que queremos conservar) a otro directorio cualquiera de forma temporal. Luego desinstalaremos MySQL desde el Agregrar o Quitar Programas de Windows. Finalmente, instalaremos la nueva versión de la misma forma que antes, tras lo cual copiaremos el directorio data de nuevo a la carpeta de MySQL sobreescribiendo el que haya, y de esta forma no se pierden los datos de nuestras bases de datos. Y finalmente sólo queda iniciar el servicio MySQL, y comprobar si los scripts y phpMyAdmin siguen funcionando.
Si estamos migrando de una versión MySQL 3.x ó 4.0 a una 4.1 ó superior (5.x), se origina el problema de que los usuarios de MySQL siguen usando el sistema antiguo de contraseñas no encriptadas, así que hay que migrarlas al nuevo sistema, o bien como suelen recomendar, usar el sistema viejo de uso de contraseñas. Más información en este link: http://dev.mysql.com/doc/refman/5.0/en/old-client.html
NOTA: si usamos alguna versión antigua de MySQL (con la 5.X no sucede), cuando MySQL se instala, graba un fichero llamdo my.ini en la carpeta de Windows. Allí quedan los datos de usuario y contraseña. Si tenemos problemas al actualizar, borraremos ese fichero antes de instalar de nuevo MySQL.
7.4 - Cómo actualizar phpMyAdmin
Éste es más sencillo de actualizar, pues lo único que hay que hacer es borrar el anterior y luego instalar y configurar el nuevo como se cita más arriba. Además, si usamos el método de autentificación config, nos aseguramos también de cambiar el usuario y contraseña para que luego funcione.
7.5 - Cómo actualizar ArGoSoft Mail Server
Simplemente se desinstala la versión anterior y se instala la nueva. Es posible que la configuración se mantenga, pero conviene que la comprobemos, y si no se mantiene entonces la volvemos a realizar.
8 - Manejo de más de un sitio web: VirtualHosts
Con esto ya hemos terminado la instalación de un servidor básico para hacer pruebas en nuestro ordenador sin necesidad de conectarnos a Internet. Pero puede que seamos administradores de más de un sitio web, y nos interese tener más de un sitio web en nuestro servidor local. Si es así, seguimos leyendo, si no, podemos saltar este paso. Una forma de hacerlo sería crear distintas carpetas en nuestro DocumentRoot, y después acceder tecleando algo como http://localhost/sitio_web_1/carpeta/archivo.php para entrar al sitio 1, o bien http://localhost/sitio_web_2/otra_carpeta/otro_archivo.php para entrar al sitio 2.
Pero es fácil ver que eso no es una forma elegante de hacerlo. ¿Se podría evitar el uso de este tipo de URL? La respuesta es sí, y para eso podemos usar los VirtualHost de Apache. Cada uno será como un sitio web diferente, con su propio DocumentRoot. Veremos a través de un ejemplo cómo hacer varios VirtualHost para alojar varios sitios web en nuestro servidor.
8.1 - VirtualHosts en Apache 1.3.X y 2.0.X
Si abrimos el archivo httpd.conf de Apache 1.3.X o 2.0.X y nos vamos al final, encontramos algo como esto:
#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
En la línea NameVirtualHost debemos quitar el # de delante
para activarla. Esta línea indica que los VirtualHost que vamos a usar pueden
escuchar en cualquier dirección IP por el puerto 80, así nos evitamos tener que definir
una IP para los accesos locales y otra para los externos (en caso de que los hubiera,
si usamos el servidor de cara a Internet). Si eres administrador de red y necesitas
llevar un control más exhaustivo de los accesos que se producen a tu red (internos y
externos), puede que desees cambiar esta opción, pero ello escapa de los objetivos de
esta guía. Por tanto, debe quedar así:
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
Bien, si bajamos un poco más, encontramos un ejemplo:
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
Como hemos dicho, podemos añadir todos los que queramos, para eso simplemente vamos
copiando y pegando las líneas del VirtualHost, quitando los # del
principio (que sirven para comentar las líneas), y configurando los datos de cada
VirtualHost. Como vamos a hacer VirtualHosts cuya resolución sea por
nombre y no por IP, en todos ellos colocaremos Virtualhost *:80 para
indicar que pueden atender en cualquier IP por el puerto 80.
Cuando hemos dicho que vamos a hacer resolución por nombre, ¿qué quiere decir esto?
Bien, tratemos de explicarlo. En principio en esta guía asumimos que el servidor que
estamos instalando posee una única dirección IP, que en modo local es 127.0.0.1 y
de cara a Internet es nuestra IP pública (la que nos dé nuestro proveedor de Internet).
Cuando entramos a un sitio web a través de un nombre de dominio (www.dominio.com),
éste redireccionará a nuestra dirección IP, y es entonces cuando el servidor debe decidir
a qué VirtualHost pertenece la petición que se le está haciendo, ya que por la
IP no lo puede saber (puede haber muchos VirtualHosts con una misma IP). ¿Y cómo
lo decide? Pues mirando cuál es el nombre de dominio (el host) que se ha usado en
la petición. Por eso en ServerName debemos poner el nombre del host
que se va a usar.
Hay un parámetro que no viene incluido en el ejemplo pero que sin embargo es interesante,
y es ServerAlias. Funciona de manera similar a ServerName. Lo
que hace es definir alias, nombres alternativos para nuestro VirtualHost. ¿Y
cuándo se usa? Pues cuando deseemos que se pueda acceder a un sitio web usando diferentes
nombres, por ejemplo que se pueda acceder poniendo http://dominio.com o bien
http://www.dominio.com o bien http://cualquiercosa.dominio.com. Ahora
veremos un ejemplo.
Vamos a hacer un caso práctico. Por ejemplo, vamos a crear tres sitios web: dos páginas
web distintas, y un tercer sitio que contenga únicamente a phpMyAdmin (para tener esta
aplicación separada de los otros dos sitios web). Dentro de la carpeta C:/Servidor/Web/
nos creamos tantas subcarpetas como sitios web vayamos a añadir, y dentro de cada
subcarpeta meteremos los archivos correspondientes a ese sitio. También podríamos
elegir cualquier carpeta en cualquier sitio, ya que cada VirtualHost tendrá su
propio DocumentRoot independiente del resto. Para nuestro ejemplo, se han
creado las subcarpetas SitioA, SitioB y phpMyAdmin,
por lo que añadiríamos los tres VirtualHosts al final del httpd.conf:
<VirtualHost *:80>
ServerAdmin webmaster@sitioa.com
DocumentRoot "C:/Servidor/Web/SitioA"
ServerName sitioa
ErrorLog logs/SitioA-error_log
CustomLog logs/SitioA-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@sitiob.com
DocumentRoot "C:/Servidor/Web/SitioB"
ServerName sitiob
ErrorLog logs/SitioB-error_log
CustomLog logs/SitioB-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@otrositio.com
DocumentRoot "C:/Servidor/Web/phpMyAdmin"
ServerName phpmyadmin
ErrorLog logs/phpMyAdmin-error_log
CustomLog logs/phpMyAdmin-access_log common
</VirtualHost>
Fijémonos en que cada uno tiene su propio DocumentRoot, por eso podemos y
debemos meter los archivos de cada sitio web en carpetas diferentes, las ahí escritas.
También vemos el nombre que hemos asignado para entrar a los VirtualHost, definido
en ServerName. Por ejemplo para el caso del sitio A deberíamos entrar
tecleando algo como http://sitioa/
Pero si tecleamos eso en el navegador, nos da error de que no se encuentra la página o no se puede resolver el nombre de dominio. Lógico, porque ese nombre de dominio no existe como tal y no tiene asignada ninguna dirección IP. Ahora vamos a ver cómo asignar una dirección IP a ese nombre.
Para ello, debemos abrir el fichero de Hosts de Windows, con un editor de texto
como el bloc de notas. Este archivo puede estar localizado en C:\Windows\Hosts
(Windows 95/98/Me), en C:\WINNT\System32\drivers\etc (Windows NT/2000) o en
C:\WINDOWS\system32\drivers\etc (Windows XP/2003). Antes de abrirlo, debemos
ir a sus propiedades y deshabilitar el modo Sólo lectura en caso de que lo tenga,
para que podamos modificarlo. Ahora añadimos los sitios web creados de la misma forma
que podremos ver en el ejemplo que viene en el archivo. Como dirección IP, usamos la IP
local 127.0.0.1, y como nombre de servidor usamos el mismo valor que usamos en el
VirtualHost en ServerName. De tal forma que para nuestro ejemplo
quedaría algo así (la primera línea ya viene por defecto incluida):
# Por ejemplo:
#
# 102.54.94.97 rhino.acme.com # servidor origen
# 38.25.63.10 x.acme.com # host cliente x
127.0.0.1 localhost
127.0.0.1 sitioa
127.0.0.1 sitiob
127.0.0.1 phpmyadmin
Guardamos el archivo, y le asignamos el modo de Sólo lectura por seguridad. Así que cuando queramos entrar a uno de los sitios web, debemos teclear http://sitioa/ o http://sitiob/ y cuando queramos entrar a phpmyadmin, teclearemos http://phpmyadmin/ ¿Más sencillo de recordar, verdad?
NOTA: si usamos VirtualHost, no debemos olvidar reconfigurar el
phpMyAdmin: hay que editar el archivo config.default.php y cambiar el valor
de la variable $cfg['PmaAbsoluteUri'], pues ahora deberá tener
http://phpmyadmin/ En general, debemos reconfigurar cualquier otro script
que use direcciones URL absolutas y no relativas.
8.2 - VirtualHosts en Apache 2.2.X
En la serie 2.2.X de Apache cambia ligeramente la configuración de los VirtualHost. Exite un archivo en C:\Archivos de programa\Apache Group\Apache\conf\extra\httpd-vhosts.conf que es donde debemos introducir la información de los VirtualHost que acabamos de ver. Una vez hecho, dentro del httpd.conf debemos buscar esto:
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
Y activamos la inclusión de ese archivo:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
8.3 - Uso de cara a Internet
Bien, hasta aquí hemos hecho lo necesario para manejar más de un sitio web en nuestro
servidor local. Hemos asignado un único ServerName a cada sitio web ya que
sólo accederemos desde nuestro ordenador tecleando un único nombre. Si además de acceder
desde nuestro ordenador deseamos acceder desde Internet, vamos a añadir algunos alias y
ver otros aspectos importantes a tener en cuenta.
Como dijimos más arriba, la resolución del VirtualHost se hace por nombre. Esto quiere decir que desde local podemos acceder tecleando http://sitioa/ (como ejemplo para el primer sitio que creamos), pero ¿cómo acceder desde Internet? Lo lógico es acceder usando una dirección tipo http://www.sitioa.com o http://sitioa.dnsalias.com, etc. Para que esto funcione, es necesario añadir alias a nuestros VirtualHosts.
Vamos a hacer un ejemplo para el sitio A. Supongamos que tenemos contratado el nombre de dominio sitioa.com, en la configuración DNS de dicho dominio debemos poner la dirección IP pública de nuestro ordenador o router. Esta dirección IP puede ser estática o dinámica. Lo ideal es que fuera estática, ya que el nombre de dominio tiene que redireccionar a alguna IP y lo lógico es que la IP sea siempre la misma. Pero si fuera dinámica, existen servicios que dan nombres de dominio para IP dinámica de forma gratuita, como puede ser DynDNS.org Este servicio hace que, cuando cambie la IP pública del servidor, la IP a la que resuelve dicho dominio también cambie.
En el VirtualHost de nuestro sitio A, que ya habíamos configurado para acceder
localmente, añadiremos el ServerAlias, asignándole todos los posibles nombres
que puede tomar nuestro host. Por ejemplo, supongamos que los usuarios pueden teclear
http://sitioa.com o http://www.sitioa.com Entonces quedaría algo así:
<VirtualHost *:80>
ServerAdmin webmaster@sitioa.com
DocumentRoot "C:/Servidor/Web/SitioA"
ServerName sitioa
ServerAlias sitioa.com *.sitioa.com
ErrorLog logs/SitioA-error_log
CustomLog logs/SitioA-access_log common
</VirtualHost>
De esta forma, cuando estemos en local, podemos teclear http://sitioa/ y accederemos
a nuestro sitio web. Cuando alguien acceda desde Internet (que puede ser cualquier usuario
o incluso nosotros desde nuestro propio ordenador), puede teclear algo como http://www.sitioa.com
o http://sitioa.com y también accederá al sitio web, ya que el nombre de host
introducido en la petición web coincide con el ServerName o el ServerAlias
de nuestro VirtualHost. Y esto lo haríamos con cada uno de los VirtualHost a
los que deseemos dar acceso de cara a Internet.
<img src="http://sitioa/imagen.gif"> ya que,
en este ejemplo, sólo funcionará cuando un usuario entre localmente y no cuando entre
desde Internet (para entrar desde Internet sería <img src="http://sitioa.com/imagen.gif">).
Existen dos posibles soluciones, una usar referencias relativas a nuestros archivos
(<img src="/imagen.gif">) y otra usando variables de PHP que dan
el nombre de host, como $_SERVER['SERVER_NAME']
(<img src="<?php echo $_SERVER['SERVER_NAME']; ?>/imagen.gif">),
pero esto es un tema de programación en sí y no se hablará más en esta guía.9 - Notas finales
Y por fin, ¡ya está todo! Largo, pero merece la pena. Ahora podemos empezar a
hacer pruebas con PHP y MySQL. Recordemos que estamos trabajando con programas
servidores, con lo cual estos programas tienen que estar activos cuando vayamos
a hacer nuestras pruebas. Esto quiere decir que el Apache debe estar conectado
(debe estar activado para poder interpretar los scripts) y que el script
debe estar dentro de la carpeta especificada en el DocumentRoot.
Además MySQL debe estar funcionando para trabajar con bases de datos, y debemos
tener tener el servidor de correo funcionando con conexión a Internet si vamos
a usar funciones de envío de email.
Una nota importante es que tanto Apache como MySQL se ejecutan como servicio del sistema. Esto quiere decir que, aunque no veamos ningún icono en la barra de tareas, ambos están funcionando de forma oculta. Esto puede resultar útil si los usamos a menudo, pues nos evitamos el tener que abrir Apache y MySQL para hacer las pruebas. Pero si deseamos quitarlo, debemos usar la utilidad msconfig para evitar que arranquen de inicio: Inicio -> Ejecutar -> msconfig y en la pestaña llamada Servicios desmarcaremos el Apache y MySQL. Al reiniciar el ordenador, ya no se ejecutarán como servicio del sistema y tendremos que arrancarlos a mano.
Asimismo, resaltar que todo este tutorial y configuraciones han sido elaborados y probados bajo unos sistemas Windows XP Home Edition y Professional Edition, tanto con el Service Pack 2 como con el 3. Si tenemos un programa cortafuegos instalado en el ordenador, es posible que tengamos que abrir los puertos que se nos solicite para que funcione el servidor. También debemos tener cuidado si hay otra aplicación que use el puerto 80 funcionando, como el servidor IIS o el Skype, para que no moleste al Apache.
AUTOR: Fernando Atanasio Negrete
* Un agradecimiento especial a Cluster por su ayuda en la elaboración de este tutorial.
Última revisión: 19 - Jul - 2009