Inici > Administració, Web, Windows > Instalación WAMP a pelo con múltiples versiones de PHP o cómo configurar Apache para correr varias versiones de PHP en distintos servidores virtuales

Instalación WAMP a pelo con múltiples versiones de PHP o cómo configurar Apache para correr varias versiones de PHP en distintos servidores virtuales

dilluns, 16 de març de 2015 Imprimir

En esta guía os explicaré cómo realizar la instalación de un servidor Windows Apache + MySQL + PHP (WAMP) con múltiples versiones de PHP para distintos servidores virtuales.

En realidad me centraré en la configuración tanto de Apache como de PHP para que tengáis todo funcionando como es debido, de aquí que diga lo de “a pelo”.

Instalaréis todo a partir de las páginas oficiales, tal como, creo, debería de ser siempre (y dejarse estar de mierdas prefabricadas).

Antes de empezar quiero dejar claro que ni soy de Microsoft, ni de Apache, ni de MySQL, ni de PHP; así que si tenéis algún problema no soy la persona a quién deberéis preguntar.

La metodología que explicaré a continuación la he utilizado anteriormente con éxito en múltiples máquinas y en varios sistemas operativos además de la instalación que realizo en una máquina virtual mientras os explico este tutorial paso por paso.

El proceso lo voy a realizar desde Windows 7 x64, pero como he dicho lo he tenido funcionando en varios sistemas operativos sin problemas:

  • Windows XP x86
  • Windows 7 x64 y x86
  • Windows 8 x64
  • Windows 8.1 x64

Como podéis ver, en la versión 32 bits de windows 8 no lo he probado pero, como digo, debería funcionar (me pregunto quién corre un Win8 a 32 bits).

En cuanto a las versiones de software, yo personalmente recuerdo haber probado, al menos:

  • Apache 2.0, 2.2 y 2.4
  • MySQL 5.5
  • PHP 5.3, 5.4, 5.5 y 5.6

De hecho yo en mi ordenador tengo todas esas versiones de PHP instaladas pero, por motivos obvios, en este tutorial voy a utilizar la última versión de apache y las dos últimas versiones de PHP (el mínimo necesario para poder enseñaros cómo configurar múltiples versiones por virtualhost).

Todo ello utilizando las versiones de 64 bits, pero procuraré poneros los enlaces actuales para las versiones de 32 bits.

Antes de empezar es importantísimo que comprobéis que tenéis todas las actualizaciones del sistema al día. Especialmente interesa tener .NET Framework instalado y actualizado para poder correr cualquiera de las aplicaciones que vamos a instalar. En mi caso la última actualización fue .NET Framework 4.5.2.

Estructura de la instalación

Podéis escoger instalar cada cosa donde os dé la gana, pero procurad tenerlo en cuenta a la hora de configurar cada cosa.

Para hacer las cosas sencillas y por tenerlo todo ordenado yo siempre he seguido esta estructura de directorios:

C:\httpd\apache -> Apache 2.4
C:\httpd\phpXX  -> Cada una de las versiones de PHP
C:\httpd\www    -> Directorio raíz de todos mis proyectos en desarrollo

MySQL dejo que se instale donde quiera ya que no me preocupa tener copia de sus ficheros. Evidentemente hago copia de seguridad de las bases de datos pero no es el tema que nos concierne ahora.

Instalando Apache

Desde hace relativamente poco la descarga de binarios de Apache ya no se realiza desde el sitio oficial. En su lugar ellos mismos te recomiendan varios sites alternativos desde los que efectuar la descarga.

Podéis ver esto desde cualquiera de los mirrors de descarga de apache, bajo binaries/win32.

Yo personalmente recomiendo ApacheLounge y os guiaré para descargar desde ahí los ficheros.

Os guiaré, pero de todos modos pondré los enlaces directos a los ficheros que yo he utilizado (no os lo recomiendo ya que sacan versiones nuevas constantemente).

Entrad en ApacheLounge y seguid estos pasos para descargar todo lo necesario:

  • Id a descargas. En la barra lateral veréis que pone “VC11” y “VC10”, eso es la versión necesaria del compilador de Visual C++ proporcionado por Microsoft.
  • Descargad la versión que os interese de Apache, en mi caso descargo la versión 2.4.12 Win64 desde VC11.
  • Dependiendo de la versión que hayáis descargado tenéis que descargar el compilador de C++. Veréis que está enlazado cerca de la misma descarga de Apache. En mi caso descargo VC11 vcredist_x64/86.exe asegurándome de marcar la casilla VSU_4\vcredist_x64.exe ya que estoy descargando para 64 bits.
  • Descargad también el módulo de apache mod_fcgid. En el caso de Apache 2.4 los módulos vienen todos en un mismo zip así que en mi caso descargo modules-2.4-win64-VC11.zip.

Ahora que ya tenemos todo lo necesario en cuanto a Apache se refiere, procederemos a instalarlo.

Instalad primero VC10 (u 11) ya que es requisito indispensable para que Apache funcione.

Una vez instalado, descomprimid Apache y movedlo donde lo queráis instalar. En mi caso descomprimo apache en C:\httpd\apache de modo que accediendo a dicho directorio me queda el contenido del .zip (múltiples directorios y ficheros, entre ellos INSTALL.txt con detalles sobre cómo instalar Apache).

Como en mi caso no quiero utilizar el directorio htdocs que viene dentro del directorio de apache creo ahora el directorio C:\httpd\www.

Descomprimid también el módulo mod_fcgid. Os interesa únicamente el fichero mod_fcgid.so que desplazaréis dentro del directorio modules del directorio raíz de apache, en mi caso C:\httpd\apache\modules quedando C:\httpd\apache\modules\mod_fcgid.so listo para ser cargado por apache.

Hecho esto necesitáis configurar Apache para indicarle el directorio donde lo habéis ubicado. Para ello abrid el fichero C:\httpd\apache\conf\httpd.conf con el bloc de notas (o con vuestro editor de código favorito) —huelga decir que editar ese fichero con Word o WordPad sería una idiotez.

Cerca de la línea 37 encontraréis:

ServerRoot "C:/Apache24"

Debéis cambiarlo a vuestra ubicación que siguiendo esta guía sería:

ServerRoot "C:/httpd/apache"

Para ir más rápido, buscad todas las coincidencias en el documento de C:/Apache24 y reemplazadlas con vuestra ubicación de instalación. Esto debería de reemplazar varias cosas como el DocumentRoot o la ubicación de los cgi-bin.

Dado que, en mi caso, el DocumentRoot lo quiero en otra ubicación, lo cambio en los dos sitios donde requiere (líneas 242 y 243 aproximadamente) a C:\httpd\www.

En esa misma configuración de Directory (cerca de la línea 243) debéis aseguraros de que se pueden ejecutar scripts cgi, dado que utilizaréis fastcgi para ejecutar PHP. Para ello debéis añadir ExecCGI detrás de las opciones, quedando esa línea así:

Options Indexes FollowSymlinks ExecCGI

Ahora, cerca de la línea 176, cuando terminan de cargar todos los módulos debéis añadir el módulo mod_fcgid tal que así:

LoadModule fcgid_module modules/mod_fcgid.so

También sería un buen momento para que revisárais qué módulos de los que hay comentados os interesa tener habilitados para descomentarlos (como el típico mod_rewrite).

Para avanzar faena, cambiad DirectoryIndex para que coja ficheros php por defecto:

DirectoryIndex index.php index.html index.htm

Al final de todo del documento añadid las siguientes líneas:

# 200MB of file upload limit
FcgidMaxRequestLen 209715200
# Set minimum timeouts
FcgidConnectTimeout 240
FcgidIOTimeout 240
FcgidBusyScanInterval 240
FcgidBusyTimeout 240

# Set PHP 5.6 as default php-cgi executable
# AddHandler fcgid-script .php
# FcgidInitialEnv PHPRC "C:/httpd/php56"
# FcgidWrapper "C:/httpd/php56/php-cgi.exe" .php

El último trozo está comentado a propósito, ya que instalaremos y probaremos Apache antes de instalar PHP.

Ya lo tenéis todo listo, guardad el documento e id a ejecutar Apache. Para ello abrid un terminal (cmd o PowerShell, tanto da) y ejecutad lo siguiente:

cd C:\httpd\apache\bin

Ahora que estáis en el directorio de ejecutables de Apache ejecutadlo para ver si arranca:

.\httpd.exe

Ojo! Algunas aplicaciones como Skype utilizan el puerto 80 si ven que no está ocupado. Por ello es recomendable que cerréis cualquier aplicación que tengáis corriendo antes de ejecutar Apache. Si no lo hacéis simplemente os saltará un error indicando que dicho puerto está ocupado.

Si todo ha ido bien únicamente os aparecerá una alerta indicando que no se ha indicado un ServerName. Sino os mostrará claramente el error y deberéis de arreglarlo. En mi caso mientras hacía este tutorial olvidé crear el directorio www y me saltó este error:

Syntax error on line 243 of C:/httpd/apache/conf/httpd.conf:
DocumentRoot must be a directory

Utilizando vuestro navegador podéis acceder a http://localhost y comprobar que el servidor funciona correctamente.

Perfecto, pero no hemos instalado Apache. Sólo hemos comprobado que funcionaba correctamente antes de instalarlo.

Para instalarlo debéis ejecutar un terminal con derechos de administrador. Una vez abierta y habiendo accedido a C:\httpd\apache\bin ejecutad:

.\httpd.exe -k install

Para hacer que ApacheMonitor se ejecute cuando arranquéis el ordenador únicamente tenéis que crearle un acceso directo en la sección Inicio del menú Inicio (un poco redundante, sí).

En català no és pas tant redundant, oi?

Hecho. Si os da el gusanillo reiniciad el ordenador y acceded de nuevo a http://localhost para comprobar que todo sigue funcionando OK.

Instalando PHP

Id a la página de descargas de PHP para windows y descargad todas las versiones de PHP que queráis tener instaladas.

Al descargarlas únicamente debéis tener en cuenta la arquitectura que estéis instalando (en mi caso x64) y que Apache es Thread Safe.

Thread safe

En mi instalación descargo PHP 5.6 (5.6.6) VC11 x64 Thread Safe (2015-Feb-19 01:45:29) y PHP 5.5 (5.5.22) VC11 x64 Thread Safe (2015-Feb-19 01:38:01).

Una vez tenéis todo descargado, lo descomprimís y lo movéis hacia el directorio C:\httpd. Poned nombres cortos a los directorios:

C:\httpd\php56
C:\httpd\php55

Ya está PHP instalado, pero no configurado.

Si queréis poder ejecutar php.exe desde vuestro terminal deberéis añadir a la variable de entorno PATH el directorio de la versión que queráis utilizar. En caso de hacerlo también deberéis crear una nueva variable de entorno PHPRC con el mismo directorio que habéis añadido al PATH.

Ahora tenéis que entrar en cada instalación de php que habéis instalado y renombrar el fichero php.ini-development a php.ini y hacer los cambios que indicaré a continuación.

Buscad el siguiente trozo:

; On windows:
; extension_dir = "ext"

Y descomentad la línea de extension_dir, quedando así:

; On windows:
extension_dir = "ext"

Buscad el trozo donde estén todas las extensiones y descomentad las que os interesen. Las encontraréis en este formato:

;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_fileinfo.dll
;[...]

Estas tres primeras que he puesto yo seguramente os interesará activarlas, al igual que gd2, gettext, intl, mbstring, exif, mysql, mysqli, pdo_mysql y/u openssl.

Hecho esto en todos los ficheros php.ini de nuestras instalaciones, es momento de acabar de configurar apache para que ejecute ficheros php con nuestra versión por defecto de PHP.

Volved al fichero httpd.conf de apache y al final del documento, descomentad:

# Set PHP 5.6 as default php-cgi executable
AddHandler fcgid-script .php
FcgidInitialEnv PHPRC "C:/httpd/php56"
FcgidWrapper "C:/httpd/php56/php-cgi.exe" .php

Utilizando ApacheMonitor reiniciad Apache. Cread un fichero index.php en el directorio www con un phpinfo dentro:

<?php phpinfo(); ?>

Y acceded a http://localhost para verificar que PHP funciona correctamente.

Utilizando distintas versiones de PHP en nuestros servidores virtuales

Ahora que ya tenéis Apache y la versión de PHP por defecto corriendo, llega el momento de explicaros cómo cambiar entre versiones de PHP.

Para utilizar esta metodología es necesario el uso de servidores virtuales, así que en el fichero httpd.conf descomentáis la línea donde carga el fichero de VirtualHosts:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Descomentada esa línea abrís el fichero conf/extra/httpd-vhosts.conf en cuestión y creáis un par de servidores virtuales que irán con distintas versiones de PHP.

Para el ejemplo crearéis dos servidores virtuales php55.loc y php56.loc, así que lo primero que haréis es crear sus directorios:

C:\httpd\www\php55.loc
C:\httpd\www\php56.loc

Y en el fichero httpd-vhosts.conf previamente abierto creamos los servidores virtuales:

<VirtualHost *:80>
    # Indicamos que queremos utilizar PHP 5.5
    FcgidInitialEnv PHPRC "C:/httpd/php55"
    FcgidWrapper "C:/httpd/php55/php-cgi.exe" .php

    DocumentRoot "C:/httpd/www/php55.loc"
    ServerName php55.loc
    ServerAlias www.php55.loc
    ErrorLog "logs/php55.loc-error.log"
    CustomLog "logs/php55.loc-access.log" common
</VirtualHost>
<VirtualHost *:80>
    # Dado que utilizo PHP 5.6 por defecto no me es
    # necesario especificar nada a fastcgi

    DocumentRoot "C:/httpd/www/php56.loc"
    ServerName php56.loc
    ServerAlias www.php56.loc
    ErrorLog "logs/php56.loc-error.log"
    CustomLog "logs/php56.loc-access.log" common
</VirtualHost>

Para ir acabando añadid al fichero hosts de sistema (C:\Windows\System32\drivers\etc\hosts) los dominios de los servidores virtuales:

127.0.0.1    php55.loc www.php55.loc
127.0.0.1    php56.loc www.php56.loc

Copiad el fichero index.php que hemos creado antes en el directorio www a cada directorio de cada host virtual.

Finalmente reiniciad apache utilizando ApacheMonitor y acceded con vuestro navegador a http://php55.loc y http://php56.loc para verificar que todo ha funcionado correctamente.

Estoy seguro de que sí :)

php.loc

Instalar MySQL

Descargad el instalador de MySQL y procurad instalar lo que os interese (con el servidor ya basta).

Podéis optar por escoger la instalación por defecto para desarrolladores (os instalará cosas que no necesita un desarrollador PHP habitualmente), o bien podéis instalar los paquetes que queráis manualmente.

En el caso de mi instalación escojo únicamente el servidor de MySQL en su versión x64.

Y para instalar, “siguiente, siguiente, siguiente”…

Enlaces útiles y referencias

Me gustaría enlazar a las referencias pero no puedo ya que hace demasiado tiempo que ando haciendo todo este proceso de memoria y no recuerdo exactamente de dónde saqué la información. Sé que al final lo hice funcionar gracias a alguien que explicaba cómo correr FastCGI en Linux, pero ni de coña lograría encontrar el enlace original.

A parte de esto (que lo digo en parte para que seáis conscientes de que todo se puede encontrar buscándolo), os adjunto los ficheros de configuración resultantes tras la configuración explicada en este tutorial.

Categories: Administració, Web, Windows Etiquetes:, , , ,
  1. Pedro
    dissabte, 11 de juliol de 2015 a les 14:36 | #1

    Hola:

    Me ha parecido muy interesante tu artículo. Yo también suelo instalar todo lo que dices de la misma forma, sin usar ninguno de esos instaladores.

    También, me estaba planteando la opción de tener varias versiones PHP para los casos en que se reciben proyectos a modificar y están hechos con versiones antiguas. Así que tu artículo me puede servir para poder instalar varios PHP en el mismo equipo.

    No obstante me surgen una serie de dudas que te planteo a continuación:

    (de primeras, decir que mi ordenador tiene instalado el Windows 8.1 x64, ahora mismo, tras un nuevo formateo, me encuentro instalando las nuevas versiones de Apache-PHP-MySQL )

    1.- ¿La versión última de Apache 2.4 (actualmente, httpd-2.4.12-win64-VC14) siempre soporta todas las versiones de PHP que se usen sean más o menos actuales (5.6, …, 5.2, 4.X, etc)?
    ¿O para versiones muy antiguas de PHP sería necesario otra versión de Apache instalada como la 2.2, la 2.0?
    ¿Existe alguna lista de PHPs compatibles con determinadas versiones de Apache y de MySQL?
    Si tu respuesta fuera que el Apache 2.4 no soporta todos las versiones de PHP (o viceversa) y fuera, entonces, necesario tener varias versiones de Apache, ¿con tu método de instalación sería posible posible lograr todo esto? ¿De qué manera? ¿Cuáles serían los pasos a seguir en detalle?

    2.- En mis últimas instalaciones, empecé a usar el gestor de dependencias COMPOSER. Lo instalaba de manera global para usarlo en todos mis proyectos.
    Para esta instalación, se debe indicar dónde se encuentra el php.exe, osea, dónde está instalado el PHP. Para esto hace falta editar la variable de entorno PATH, tal y como comentabas. Al final del proceso, si todo va bien, se crea un archivo composer.phar dentro de la carpeta de php disponible.
    Ahora bien, si sigo tu tutorial, ¿debería hacer una instalación del composer por cada versión de PHP que tenga, cambiando antes el valor de PATH para apuntarlo a cada carpeta de la versión de PHP? ¿o me bastaría con instalarlo en la versión de PHP por defecto y luego, manualmente, copiar los archivos resultantes de las dependencias de un proyecto de la versión de PHP por defecto a la carpeta del proyecto de otra versión de PHP?

    Espero tus respuestas para configurar todo mi sistema de la mejor manera posible. Gracias de antemano y saludos.

  2. dissabte, 11 de juliol de 2015 a les 15:50 | #2

    Hola @Pedro , la versión de windows no debería de ser un problema; tal como digo al inicio yo mismo lo he probado desde Windows 8.1.

    Respecto al primer punto, la versión de apache que yo sepa no da problemas con ninguna de las versiones de PHP. Si el ejecutable de PHP lo ejecutas sin errores, el mod_fcgi debería de hacerlo igual.

    En el segundo punto puedo decirte lo mismo.. si puedes ejecutar PHP podrás ejecutar composer. Simplemente decide qué versión de PHP utilizarás para composer. Yo personalmente utilizo la última (5.6).

    Salud!

  3. Pedro
    dissabte, 11 de juliol de 2015 a les 19:07 | #3

    Hola de nuevo:

    Gracias por tu rápida respuesta.

    Mi pregunta de incompatibilidades entre versiones de PHP y de Apache venía porque hace tiempo, una vez que quise realizar el paso de Apache 2.0 a 2.2, tuve que volver a 2.0 pues con la 2.2 la versión del PHP que tenía no funcionaba, o al revés era el Apache que no funcionaba con la versión del PHP.
    Además, buscando en internet sobre como tener varios PHP a la vez, entre otros y antes de llegar a tu artículo, encontré este video algo antiguo ya (de 2010) en el que a mitad de el se muestra una lista de posibles versiones de Apache y PHP haciendo ver que no todas son compatibles entre ellas. El video es:
    https://youtu.be/RMktu1G_Bs8?t=5m11s
    Como digo, tratando siempre de tener las últimas versiones, de vez en cuando actualizado tanto Apache, PHP y MySQL. Pero siempre puede presentar un proyecto hecho hace tiempo que hay que modificar y ya corre con versiones antiguas.
    Incluso, está por presentarseme el caso de que tenga que realizar un proyecto en un lugar dónde se encuentran las siguientes versiones instaladas:
    Apache 2.2.8
    PHP 5.2.6
    MySQL 5.0.51b
    Por todo ello venía mi duda.

    Sobre la cuestión de Composer, la exponía también debido a que trato de empezar a practicar con Laravel (ahora Laravel 5) y éste se instala a través de Composer. Si instalo varias versiones de PHP, tendré que elegir, según dices, la versión dónde instalo el Composer y las demás no tendrán el Composer ¿no? Aunque supongo que luego la descarga de dependencias o de paquetes la podré hacer a cualquier proyecto que tenga en el directorio www, sea un proyecto que emplee una versión u otra de PHP, ¿es así?

    Perdona por insistir en la cuestión. Pero quisiera me quedara lo más claro posible. Gracias otra vez y saludos.

  4. Pedro
    diumenge, 12 de juliol de 2015 a les 01:09 | #4

    Y como añadido a mis preguntas, aunque no tiene nada que ver ya con el tema, ¿sabes como montar un servidor SMTP local que llegue a enviar emails? Es que con solo editar las líneas del php.ini sobre ello, no funciona. ¿Sabes como lograrlo?

  5. Pedro
    dilluns, 13 de juliol de 2015 a les 03:48 | #5

    Hola de nuevo, esperando las respuestas a las últimas cuestiones planteadas, te notifico que he intentado instalar las cosas siguiendo tus pasos

    Instalé, para x64, Apache en su versión 2.4.12, PHP 5.6.11 (otras versiones a instalar de PHP, 5.5.14, 5.4.42 y 5.2.6).

    Monté esta estructura de carpetas:

    C:
    |
    –> [inetpubapache]
    |
    –> [Apache]
    |
    –>
    |–> [php-5.6.11]
    |–> [php-5.5.14]
    |–> …
    |–> [otras versiones]
    |
    –> [www]

    Instalé el Apache, edito el archivo de configuración de Apache [httpd.conf], ejecuté por MSDOS “httpd.exe” y salió el Firewall de Windows para indicar que se permita el acceso por parte de “Apache HTTP Server”.
    Accedo a localhost:8080 (añadí el puerto 8080 en el .conf), no indica error, simplemente “Index Of \”.
    Todo bien hasta instalarlo como servicio, entonces tras indicar que la instalacón como servicio fue satisfactoria, al testear el httpd.conf, indica reporte de errores y corregirlos antes de iniciar Apache como servicio.

    “Installing the ‘Apache2.4’ service
    The ‘Apache2.4’ service is successfully installed.
    Testing httpd.conf….
    Errors reported here must be corrected before the service can be started.”

    Sigo adelante con el PHP, empiezo con el de la versión 5.6.11, descomprimo en la carpeta
    c:\inetpub\php\php-5.6.11.
    También edité/creé las variables de entornos Path y PHPRC con la ruta “C:\inetpubapache\php\php-5.6.11\”.
    Edito el php.ini, guardo cambios, creo un archivo con la orden phpinfo(); con el nombre phpinfo.php y reinicio el Apache.

    Y va lo malo, al acceder a localhost:8080/phpinfo.php, sale el error 500.

    “Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at amdin@server.com to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.”

    En el archivo error.log aparecen estas líneas, alguna referida al módulo fcgid:

    [Mon Jul 13 04:15:50.677827 2015] [fcgid:warn] [pid 3260:tid 932] (OS 109)Ha terminado la canalización. : [client ::1:1819] mod_fcgid: get overlap result error
    [Mon Jul 13 04:15:50.677827 2015] [core:error] [pid 3260:tid 932] [client ::1:1819] End of script output before headers: phpinfo.php

    Y poco más, no he continuado debido al error 500 que te comento. Espero me sugieras algo sino, volveré a la forma que tenía antes para instalar PHP sin FCGI. Pero así no podré tener varios PHP con era el objetivo.
    Así que espero me des algún consejo para solucionar la situación y seguir configurando todo tal como cuentas.

    Gracias y saludos.

  6. Pedro
    dilluns, 13 de juliol de 2015 a les 17:06 | #6

    Bueno, de primeras, ya encontré un error por el cual no se ejecutaba el phpinfo.php y me daba el Error 500 en el servidor.

    Y es que no establecí una variable en el php.ini como tengo costumbre de hacer. O, más bien, no es que no la estableciera sino que la deje comentada.
    Se trata de la variable “extension_dir” que, por defecto, viene comentada con el valor “ext”. Es decir, la línea es esta

    ; On windows:
    ; extension_dir = “ext”

    Como digo, yo suelo descomentarla y hasta ponerle toda la ruta hasta la carpeta de php, en este caso, tal y como he definido la estructura de carpetas, para la versión de php-5.6.11 sería:

    extension_dir = “c:/inetpubapache/php/php-5.6.11/ext”

    Así que, como digo, se me ha ocurrido volver a como yo lo hacía y tras descomentarla, reiniciar el Apache y reiniciar el navegador con el phpinfo.php en la ruta de la barra de direcciones, ya desapareció el Error 500 y ya veo el clásico cuadro de las caraterísticas del PHP instalado.

    Tanto vale dejar, en mi caso,
    extension_dir = “c:/inetpubapache/php/php-5.6.11/ext”
    como
    extension_dir = “ext”
    pero en ningún caso la línea no puede estar comentada, pues me da el Error 500.

    Y la había dejado comentada pues tu en tu artículo no llegabas a mencionar que hubiera que habilitarla. Por eso la deje como viene por defecto, es decir, comentada.
    Igual también se debe a la estructura de carpetas que he montado para las versiones de php. Yo las pongo todas dentro de otra carpeta , la cuál está al mismo nivel que la de [Apache]. Mientras que tu pones todas las carpetas de las diferentes versiones directamente en la raíz de tu carpeta [httpd].

    Bueno, la cosa es que ahora ya empieza a ir.

    Psaré ahora a configurar las demás versiones que me he descargado y terminar de probar todo, hasta el cambio por VirtualHost de versión de PHP. A ver si ya todo va bien.

    Saludos.

  7. Adrian
    dimarts, 14 de juliol de 2015 a les 01:49 | #7

    Una pista para aquellos que hayan tenido problemas con hacer funcionar PHP: Hay que tener sumo cuidado de usar LA MISMA versión de VC. Tuve dos días de locura porque no había forma de hacer andar el dichoso PHP, y resulta que había instalado el VC14 “redist” y el Apache 2.4 compilado con VC14, junto con el PHP compilado con VC12. Al desinstalar el VC14 y el Apache VC14, y en su lugar instalar ambos en base a VC12, anduvo todo a la primera. Moraleja: no mezclar distintas versiones de VC :)

  8. Pedro
    dimarts, 14 de juliol de 2015 a les 02:42 | #8

    “Y la había dejado comentada pues tu en tu artículo no llegabas a mencionar que hubiera que habilitarla. Por eso la deje como viene por defecto, es decir, comentada.”

    Corrijo esto. Tras leer de nuevo la parte del PHP si que dices de descomentar la línea referente al [extension_dir].
    Fallo mío.

  9. Pedro
    dimarts, 14 de juliol de 2015 a les 02:48 | #9

    Adrian … Yo tengo también el Apache último disponible para descargar 2.4.12 VC14, y el último PHP 5.6.11, aparte de otras versiones, y aparte instalados en el PC los VC9, VC10, VC11 y VC12 por medio de otros programas como el Visual Studio, antes de la configuración de Apache y PHP. Y no se me ha presentado aún conflicto alguno.

  10. Pedro
    dimarts, 14 de juliol de 2015 a les 19:39 | #10

    Bueno, termina la prueba.

    Usadas estas versiones en Windows 8.1 x64:

    – Apache 2.4.12 x64 VC14
    – modúlo FastCGI ASF 2.3.9
    – PHP 5.6.11 VC11 x64
    – PHP 5.5.14 VC11 x64
    – PHP 5.4.42 VC9 x64
    – PHP 5.2.6 VC11 x32

    Todo funciona correctamente. ¿Todo? No la versión 5.2.6 me dió error. El mismo que me daba la versión 5.6.11 en mi primera prueba pero no lo mismo ocurre con el PHP 5.2.6

    Las líneas de error mostradas en el error.log son estas:

    [Tue Jul 14 20:16:11.201772 2015] [fcgid:warn] [pid 9864:tid 988] (OS 109)Ha terminado la canalización. : [client 127.0.0.1:10002] mod_fcgid: get overlap result error
    [Tue Jul 14 20:16:11.202771 2015] [core:error] [pid 9864:tid 988] [client 127.0.0.1:10002] End of script output before headers: phpinfo.php

    No sé y no estoy seguro. Pero, a lo mejor, es que la versión 5.2.6 de PHP no es compatible con Apache 2.4.X y necesita de un Apache 2.2.X. O igual la diferencia está en que necesita de alguna configuración diferente a las necesarias por las otras versiones planteadas.

    Si alguien tiene alguna idea, se le agradecería su consejo.

    Saludos.

  11. dissabte, 25 de juliol de 2015 a les 13:24 | #11

    Hola Pedro, antes de nada te pido disculpas por la demora. Han sido dos semanas muy locas en la oficina y justo empiezo vacaciones, así que ahora mismo aprovecho un momento que tengo para contestar.

    Veo que al final la duda se reduce únicamente al tema de PHP 5.2.6. Como bien ha dicho @Adrian hay que tener mucho cuidado con no mezclar versiones de VC y, a su vez, también hay que procurar instalar todos los requisitos tanto de Apache como de PHP.

    Si ejecutas PHP 5.2.6 desde un terminal, ¿te funciona sin problemas? Como ya comenté en mi primer comentario las versiones de PHP y apache no deberían de interferir, pues el encargado de ejecutar PHP es el módulo de fastcgi y a éste no le importa lo que ejecute mientras se ejecute correctamente.

    Si te funciona sin problemas desde un terminal, lamento no poder ayudarte, pues hace mucho que ya no utilizo PHP 5.2.6 y no recuerdo qué requerimientos tiene ésta.

    Además, he procurado migrar todos mis proyectos a las versiones de PHP más recientes y te recomiendo que hagas lo mismo. Si tu compañía de hosting no te ha actualizado la versión de PHP debería de haberlo hecho, pues es una versión de PHP realmente insegura que hace ya más de 4 años que dejó de ser mantenida.

    Lo mismo podría aplicarse a PHP 5.3, si tenéis proyectos en versiones anteriores a PHP 5.4 toca migrarlos ya. Cuanto antes os pongáis más dolores de cabeza evitaréis 😉

  12. Pedro
    dissabte, 25 de juliol de 2015 a les 23:57 | #12

    Hola:

    Tras largo tiempo sin entrar en este post, veo que terminaste respondiendo. Comprendo que no siempre se tiene tiempo de responder a todo.

    La verdad es que sigo buscando la solución para que la versión 5.2.6 no dé el error expuesto y antes. Y en la búsqueda de dicho error en Google he vuelto a este post.
    El error sigue siendo esto que sale en el log-error:

    [Sun Jul 26 00:35:32.383588 2015] [core:error] [pid 6576:tid 1488] [client 127.0.0.1:14344] End of script output before headers: phpinfo.php

    Vi que en otro post que encontré uno comentaba que había podido lograr que la versión 5.2 de PHP funcionara en Apache 2.4, incluyendo este bloque en el httpd.conf:

    AllowOverride None
    Options None
    Require all granted

    Pero sin efecto alguno. Así que sigo buscando.

    Por cierto, ¿qué quieres decir con que si lo ejecuto desde el terminal?
    ¿Si accedo por la consola MSDOS? ¿cómo tendría que ver esto? ¿Accediendo hasta el php.exe de la versión 5.2.6 y dándole a ENTER? ¿Y que tendría que salir?
    ¿Cómo sé si funciona sin problemas?

    Y si por mi fuera, como yo para mi casa ya lo hice, dejaría esa versión de PHP. Yo cada vez voy actualizando las versiones.
    Pero es que estoy siguiendo un curso en un centro que, como ya mencioné, tienen esas versiones instaladas:
    Apache 2.2.8
    PHP 5.2.6
    MySQL 5.0.51b
    Y no parece que tengan intención de actualizar. Entonces, tu solución me venía bien para programar en una versión o en otra. Lo que no quería es que hiciera algo en casa y a la hora de pasarlo al centro de la clase, al ser una versión inferior no me llegara a funcionar por alguna incompatibilidad o función que no estuviera disponible en la 5.2.6. O viceversa, que empleara algo de 5.2.6 ya deprecado en versiones posteriores.

    Pero, bueno, si no llego a encontrar solución, veo que lo único que me queda es poner bloques condicionales para controlar, directamente dentro del código programado del sitio web, en ciertos casos la versión de PHP
    Algo como:
    if (php_version 5.2.6) hacer otra

    Pues nada, si se te ocurriera otra cosa, me la comentas. Y sino, felices vacaciones y buen regreso.

    Saludos.

  13. diumenge, 26 de juliol de 2015 a les 00:56 | #13

    Pues sí, me refiero exactamente a eso.

    Accede al directorio donde tengas PHP 5.2 instalado y ejecuta:

    ./php.exe -v

    Debería de mostrarte la versión de PHP sin error alguno.

  14. Pedro
    diumenge, 26 de juliol de 2015 a les 02:09 | #14

    Hola de nuevo,

    Ejecute la orden dentro de la carpeta de cada versión.
    Este fue el resultado:

    >> tanto para la versión 5.6.11, 5.5.14 y 5.4.42, se mostró únicamente las líneas que indican el número de versión y años de Copyright
    (Por ejemplo para la 5.6.11)
    PHP 5.6.11 (cli) (built: Jul 9 2015 20:55:30)
    Copyright (c) 1997-2015 The PHP Group
    Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

    >> pero para la versión 5.2.6, si bien al final muestra las mismas líneas de versión y copyright:

    PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)
    Copyright (c) 1997-2008 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

    antes de estas líneas, tanto dentro de la propia consola como por medio de una ventana de alerta indica esto:

    “El programa no puede iniciarse porque falta php_pdo.dll en el equipo.
    Intente reinstalar el programa para corregir este problema.

    Warning:
    PHP Startup: Unable to load dynamic library
    ‘c:/…ruta…/php/php-5.2.6/ext/php_pdo_mysql.dll’ – No se puede encontrar el módulo especificado.”

    No obstante, voy a la carpeta de [ext] y la dll mencionada está ahí. Y en el php.ini de la misma versión la línea pertinente está activa.
    Así que no sé por qué indica ese error / warning si el archivo si existe aunque diga que no lo encuentra.

    No sé si será esto el causante del error para que no pueda ver el phpinfo.php para la versión 5.2.6

  15. Pedro
    diumenge, 26 de juliol de 2015 a les 02:25 | #15

    Vale, ya he visto lo que faltaba.
    Como digo la extensión php_pdo_mysql.dll la tengo en la carpeta [ext] de la versión 5.2.6 de PHP. Y la tengo activada en el respectivo php.ini de la mencionada versión.

    Pero, como se indica en el primer mensaje de error que me salía al ejecutar la orden que me decías (php.exe -v) lo que me dice que falta es el php_pdo.dll. Y al revisar de nuevo el php.ini, he visto que no tenía activada esa extensión al estar comentada su línea.
    Osea que la versión 5.2.6 necesita tener activada la php_pdo.dll para poder ejecutar luego la php_pdo_mysql.dll.

    Tras activarla y reiniciar el Apache, al acceder al virtualhost de la versión 5.2.6, ya se me muestra correctamente y sin error alguno el correspondiente phpinfo.php.

    Por fin!!! Y gracias a tus consejos y recomendaciones he conseguido que todas las versiones funcionaran al final.
    Espero que no solo ya estas pruebas de virtualhosts sino proyectos que ponga en una o en otra versión sigan funcionando como estos de prueba.

    Una vez más gracias por tus ideas. Y te deseo de nuevo felices vacaciones.

    Saludos.

  16. Pedro
    diumenge, 26 de juliol de 2015 a les 02:31 | #16

    Una última cosa. Voy a instalar el COMPOSER como ya comenté y para ello tengo que editar la Variable Path indicando la ruta al PHP. Elegiré para esto la ruta a la versión principal para mí entre las que tengo. En mi caso, la principal es la 5.6.11.

    La pregunta es si, como comentabas, por editar el Path ¿es necesario incluir o añadir otra variable llamada PHPRC que en mi caso solo llevaría el valor de la ruta a mi PHP principal?
    Y si no la incluyo o añado ¿me volvería a dar todo error o que consecuencia habría si no la creo tras editar la variable de Path?

  17. Julio Rodriguez
    dimarts, 15 de setembre de 2015 a les 19:38 | #17

    Buenas Estimado,

    En primer lugar excelente el post, me parece muy detallado. Sin embargo tengo ciertas dudas que deseo consultar.

    1. Al principio hablan del modulo mod_fcgid.so, por diversos motivos me encuentro utilizando xampp en estos momentos, sin embargo estuve validando todo tal cual como menciona y me he dado cuenta que ni tengo ese archivo, por lo que no puedo activarlo. Busque la página para descargarmelo (http://httpd.apache.org/download.cgi#mod_fcgid) sin embargo en los archivos no aparece el archivo “.so” ¿Donde puedo ubicarlo?

    2. En primer lugar no estoy muy seguro de haber comprendido completamente la parte de las variables de entorno, sin embargo explicaré lo que hice para que me confirme si es así:
    a. edite la variable de entorno path agregando al final la ubicación de la segunda versión de php, b. Agregue la nueva variable de entorno PHPRC con la misma dirección.

    3. Entre por consola a la segunda versión de php (2.7) y corrí el comando php.exe -v y todo corre bien, el resultado es el siguiente :
    PHP 5.2.17 (cli) (built: Jan 6 2011 17:37:45)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
    Sin embargo al levantar el apache me da error y se cae. Si elimino el virtual host que cree para esta versión arranca sin problema.

    ¿El archivo .so será la falla? ¿Que otra cosa podria ser? De antemano gracias.
    PD: Con respecto a lo de la versión, el por qué una tan antigua, precisamente es porque debo actualizar unos sites de clientes que usan esa versión… yo trabajo con la 5.6. Muchas gracias de antemano

  18. dimarts, 15 de setembre de 2015 a les 19:50 | #18

    @Pedro, la variable PHPRC es para indicarle a php dónde encontrar sus ficheros (entre ellos php.ini), por tanto siempre debe tanto existir como coincidir la variable PHPRC con la versión de php que estés utilizando.

    @Julio Rodriguez, si relees con detalle el punto de “Instalando apache” verás que la descarga del módulo de apache no puedes hacerlo desde apache.org; en su lugar debes descargarlo de algunas de las páginas que recomienda apache. Tal como indico en la sección “Instalando apache” yo te recomiendo utilizar apachelounge para las descargas.

    De todos modos veo que dices que utilizas XAMPP. Este tutorial te explica cómo hacer la instalación desde cero y para ello puedo darte soporte. Si dices que utilizas xampp ahí ya no puedo ayudarte, pues todos estos paquetes precompilados de apache tipo xamp, wamp, mamp… suelen remover mucho las tripas de todas las partes para hacer su paquete a medida, así que es fácil que rompas algo si no buscas un tutorial específico para lo que estás utilizando.

    Te animo a que sigas este tutorial al pie de la letra sin utilizar xampp ni otros paquetes distintos a los descritos en el tutorial.

  19. Julio Rodriguez
    dimarts, 15 de setembre de 2015 a les 19:54 | #19

    Buenas amigo, muchas gracias por tu pronta respuesta, y sí eso lo leí, sin embargo como era un “módulo especifico” pense que no habria mayor problema, y pues, vale muchas gracias. tambien he trabajado con apache instalado “a pelo” solo que en estos momentos lo tengo así por cuestiones de tiempo, igualmente veré que puedo hacer. muchas gracias una vez más.

  20. Julio Rodriguez
    dimecres, 16 de setembre de 2015 a les 06:51 | #20

    Buenas Noches amigo, yo nuevamente.

    Siguiento tu tutorial y a sabiendas de que la versión 5.2.17 es vieja y no has trabajado recientemente con ella. queria hacerte una consulta.
    Instale Apache solo, tal como aqui lo explicas y corre bien sin problema. v.2.4, posteriormente intenté instalar PHP217, haciendo los registros y la edicion del php.ini. al parecer todo corre fino sin embargo NO IMPRIME ni realiza procesos dentro de las etiquetas … aunque si me reconoce los archivos con extensión .php… por tanto, considere algo estaba mal y he estado buscando y me tope con algo sobre los archivos php5apache2,php5apache2.dll y php5apache2_2.dll que no mencionas en tu post, aunque recuerdo que antes los llegué a usar… Y es aqui donde viene mi duda. ¿En las versiones nuevas ya no se usan estas .dll? Sin embargo, probando con cualquiera de las librerias.. todas me dan el mismo error que es el siguiente :

    httpd.exe: Syntax error on line 178 of C:/httpd/apache/conf/httpd.conf: Cannot load c:/httpd/php217/php5apache2.dll into server: No se encontr\xf3 el proceso especificado.

    En otro post. leí que debia colocarlas en la carpeta system32.. pero la falla persiste. Si tendrás alguna idea de la razón del problema agradezco tu ayuda, caso contrario igual la agradezco. el post está excelente.

  21. Julio Rodriguez
    dimecres, 16 de setembre de 2015 a les 06:54 | #21

    Una cosa más en este post:
    http://eltallerdelbit.com/cannot-load-php5apache2-dll/ Mencionan que se debe instalar la versión NON Thread Safe de PHP. En que momento uno debe instalar una u otrA? una vez más gracias

  22. dimecres, 16 de setembre de 2015 a les 08:59 | #22

    El módulo php5apache2.dll no te permitirá utilizar distintas versiones de PHP. De hecho sólo funciona con versiones concretas si no me equivoco, si estás utilizando apache 2.4 no me extrañaría que no pudieras utilizar el módulo de php5 de apache para correr php 5.2.

    Lo de poner librerías en system32 es una guarrada, en ningún momento debes salirte del directorio de instalación C:\httpd

    Si utilizas apache es Thread Safe. Ese tutorial dice que la versión NON Threat Safe les devuelve error y que al final han utilizado Thread Safe.

  23. Julio
    dimecres, 16 de setembre de 2015 a les 13:04 | #23

    @Booletaire
    Booltaire, muchas gracias por responder tan pronto.

    Si, tengo entendido que las distintas librerias son para algunos números de versiones de PHP, por eso pregunte el como funciona ahora, de igual manera no hubo forma de que lograse configurar apache 2.4 con php5.2 y estoy planteandome buscar el apache2.2 para probar…. y pues con lo de system32.. solo puedo dejarlo como ejemplo de la variedad de contradicciones que uno consigue en internet. XD.

    Ahora, con lo de Thread safe, sí yo lei en el tutorial que se usa esa versión, de hecho si ves mi comentario la pregunta es de que depende el que se instale una u otra o cual es la diferencia.

    Gracias por responder

  24. dimecres, 16 de setembre de 2015 a les 13:19 | #24

    La manera en que trata los “Threads” del procesador. Apache trabaja con los threads de manera distinta a otros servidores web.

    IIS es Non Thread Safe mientras apache es Thread Safe. Que yo sepa sólo IIS es Non Thread Safe, pero seguro que desconozco más del mismo tipo. En todo caso esto es sólo para sistemas Windows.

  25. Corey
    dijous, 24 de setembre de 2015 a les 04:47 | #25

    problemas en windows 10 para php 5.5 y para hacer 2 virtual hosts

  26. Corey
    dijous, 24 de setembre de 2015 a les 19:10 | #26

    lo que me pasa en windows 10 es que para los 2 vhosts me reconoce como php 5.6, y no me reconoce php 5.5. Alguna idea del porque?

  27. divendres, 25 de setembre de 2015 a les 11:04 | #27

    Das muy pocos detalles. ¿Has seguido el tutorial al pie de la letra? ¿Te has leído todos los comentarios de otros usuarios para ver si alguna de sus dudas (y mis soluciones) resuelven tu problema?

  28. Javi Sanna
    dimarts, 26 de gener de 2016 a les 21:35 | #28

    Genial!!!

  29. Nicolás
    diumenge, 17 d'abril de 2016 a les 18:39 | #29

    Muchas gracias por este excelente articulo, esta explicado a la perfección.

  30. Scrawny
    diumenge, 15 de maig de 2016 a les 18:46 | #30

    Perfecto muy bueno tu Tutorial / Manual /Guía te dejo 10 puntos 😛
    Faltaría complementarlo con la instalació de MySQL de forma manual en la carpeta C:\httpd\MySQL y agregarle seguridad, pero aún así es uno de las pocas guias que me ha funcionado sigue así.

  31. dimecres, 1 de juny de 2016 a les 16:47 | #31

    Buenas muy buen post ante todo!

    una duda tengo apache 2.4 y php 5.6 no me ejecuta las funciones scandir ni opendir mas sin embargo sirve php saben debido a que pueda estar pasando esto!

    muchas gracias de antemano

  32. dimecres, 1 de juny de 2016 a les 20:37 | #32

    @Leo
    olvidenlo… solucionado! era una falta de permisos

Comentaris tancats.