How-To: Instalar PHP

      No hay comentarios en How-To: Instalar PHP

Este how-to es el primero de una serie en la que iré desgranando paso a paso como configuro XAMPP en Windows.

XAMPP, por si no lo sabes, es una manera fácil, rápida y limpia de instalar un servidor Apache junto con PHP y MySQL listo para servir páginas. Además XAMPP permite la instalación en un pendrive, lo que nos permite llevar fácilmente las demos de las páginas web que hagamos al cliente, sin tener que instalar nada.

Entrando en materia lo primero que hago es instalar PHP a mano. Si, realizo una instalación personalizada y a mano del PHP, ya que además de utilizarlo con el servidor Apache también utilizo PHP para scripts de línea de comando.

Sería interesante que antes de empezar elijamos qué versión de PHP vamos a instalar. En mi caso será la versión 7.1.0-VC14 de 64 bits en un Windows 10, también de 64 bits. Puedes consultar las versiones disponibles en:

http://windows.php.net/download/

En la misma página están disponibles los enlaces a las distintas versiones del runtime del Visual Studio. Antes era un poco lío, ahora cada paquete de PHP tiene en el nombre la versión del runtime a instalar:

Por supuesto hay que bajarse la versión de 32 bits si instalamos el PHP de 32 bits, y de 64 bits si hemos elegido PHP de 64 bits… que nos conocemos y seguro que más de un despistado lo pregunta (¿eh, Fernando?).

Utilizaré las siguientes herramientas:

  • Wget: Para bajar archivos de internet desde la línea de comandos.
  • Unzip: Del proyecto GnuWin32.
  • Junction: De Sysinternals, para crear enlaces a carpetas.

Las tres utilidades más alguna cosa más están en un zip de poco menos de 2Mb: Utilidades

El archivo comprimido tiene la siguiente estructura:

/usr
/usr/bin
/usr/etc
/usr/etc/php
/usr/share
/usr/share/mibs
/var
/var/log
/var/tmp

Y la estructura que vamos a crear es la siguiente:

c:\usr\
c:\usr\bin
c:\usr\etc 
c:\usr\etc\php
c:\usr\lib
c:\usr\share
c:\usr\share\mibs
c:\var
c:\var\log
c:\var\tmp

Así pues, hay que descomprimir el zip en la raíz del disco C y ya puestos podemos crear c:\var y los dos subdirectorios que debe contener.

Hay que modificar/añadir las siguientes variables de entorno del sistema:

  • Path: Añadir c:\usr\bin;c:\usr\php;c:\usr\php\ext;c:\usr\pear a la rutas existentes.
  • PATHEXT: Añadir .PHP y .PHAR a las extensiones existentes.
  • PHP_INI_SCAN_DIR: Nueva variable de entorno, su valor debe ser c:\usr\etc\php
  • PHP_PEAR_SYSCONF_DIR: Nueva variable de entorno, su valor debe ser c:\usr\pear
  • MIBDIRS: Nueva variable de entorno, su valor debe ser c:\usr\share\mibs
  • WGETRC: Nueva variable de entorno, su valor debe ser c:\usr\etc\wgetrc

No debería tener que explicar para qué sirve la variable de entorno Path, simplemente añadimos la ruta a las utilidades (c:\usr\bin), al PHP y sus extensiones (c:\usr\php; c:\usr\php\ext) y al PEAR  que instalaremos más adelante (c:\usr\pear).

Una vez hemos preparado el entorno y las rutas, abrimos una línea de comandos y nos situamos en c:\usr:

cd c:\usr

En nuestra línea de comandos ejecutamos lo siguiente:

c:\usr> set path=%path%;c:\usr\bin
c:\usr> wget -qN --show-progress http://windows.php.net/downloads/releases/php-7.1.0-Win32-VC14-x64.zip
c:\usr> unzip php-7.1.0-Win32-VC14-x64.zip -d c:\usr\php-7.1.0
c:\usr> junction c:\usr\php c:\usr\php-7.1.0
c:\usr> copy c:\usr\php-7.1.0\php.ini-production c:\usr\php-7.1.0\php.ini

Fíjate, hemos “instalado” el PHP en c:\usr\php-7.1.0 y con junction hemos enlazado a c:\usr\php, de esta manera cuando actualicemos el PHP bastará con hacer lo siguiente:

junction -d c:\usr\php
junction c:\usr\php c:\usr\php-7.1.1

Evidentemente antes de hacer dicha operación necesitaremos parar cualquier proceso que haga uso del PHP, como el XAMPP que instalaremos otro día.

En el zip de Utilidades que he enlazado antes hay un “php.ini” que debería estar en c:\usr\etc\php, esto es un truco que he descubierto hace nada cómo hacerlo en Windows. El truco consiste en que mediante una variable de entorno (PHP_INI_SCAN_DIR) se le indica al PHP que queremos que también lea todos los “.ini” que encuentre en las rutas indicadas. Así hemos copiado toda la configuración por defecto del php.ini-production en c:\usr\php\php.ini, que nos servirá como base para la configuración. En el c:\usr\etc\php\php.ini tenemos lo siguiente:

[PHP]
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 0
html_errors = Off
error_log = "c:\var\log\php-"PHP_VERSION"_"PHP_SAPI".log"
mail.log = "c:\var\log\php-"PHP_VERSION"_"PHP_SAPI"_mail.log"
include_path = "c:\usr\lib;c:\usr\pear\pear"
extension_dir = "c:\usr\php-"PHP_VERSION"\ext"
sys_temp_dir = "c:\var\tmp"
enable_dl = On
file_uploads = On
upload_tmp_dir = c:\var\tmp
upload_max_filesize = 2M

[Date]
date.timezone = Europe/Madrid

Tal y como se explica en la documentación, lo que hacemos es utilizar las constantes PHP_VERSION y PHP_SAPI para especificar la ruta donde están las extensiones y dar nombre al fichero de log.

Si no has cerrado la ventada del cmd que teníamos abierta (¿quien ha dicho que la cerrases?), puedes ejecutar lo siguiente:

c:\usr> php -v
PHP 7.1.0 (cli) (built: Dec  2 2016 05:24:57) ( ZTS MSVC14 (Visual C++ 2015) x64 )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies

Si todo ha ido bien, PHP nos responderá como os he indicado.

Antes, cuando hemos añadido las variables de entorno hemos creado una llamada PATHEXT es la variable de entorno que Windows utiliza para saber qué extensiones del sistema son los archivos ejecutables, esto nos permitirá ejecutar un script “ejemplo.php” llamándolo desde la línea de comandos simplemente por “ejemplo”. Para que esto funcione hay que añadir lo siguiente al registro:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.php]
@="phpfile"

[HKEY_CLASSES_ROOT\.php\ShellNew]
"FileName"="template.php"

[HKEY_CLASSES_ROOT\phpfile]
@="PHP Script"

[HKEY_CLASSES_ROOT\phpfile\DefaultIcon]
@="c:\\usr\\share\\php_xpstyle.ico"

[HKEY_CLASSES_ROOT\phpfile\shell]

[HKEY_CLASSES_ROOT\phpfile\shell\open]

[HKEY_CLASSES_ROOT\phpfile\shell\open\command]
@="\"c:\\usr\\php\\php.exe\" \"%1\" %*"

Por comodidad basta con hacer doble click sobre c:\usr\php.reg, también sería aconsejable añadir c:\usr\phar.reg al registro.

Y ya puestos añadimos en c:\ProgramData\Microsoft\Windows\Templates\ el siguiente “template.php” (c:\usr\template.php):

<?php
?>

Si, es un script php vacío… pero ahora cuando en una carpeta de Windows accedas al menú contextual (click derecho) en Nuevo verás una nueva opción “PHP Script“, al seleccionar esa opción verás que te ofrece crear un archivo con extensión “.php” cuyo contenido será justamente el de “template.php”.

PHP_PEAR_SYSCONF_DIR y MIBDIRS son las variables de entorno que utilizarán el PEAR y la extensión SMNP respectivamente. Si bien es posible que no resulte interesante activar la extensión SMNP, es mejor tener el PHP y el entorno preparados. Lo que si que es una buena idea y casi una obligación es configurar PEAR.

PEAR es un repositorio de extensiones/clases/aplicaciones escritas en PHP. Podemos liarnos con el procedimiento de instalación, o puedes hacerlo a mi manera. En nuestra ventana de linea de comandos, que a estas alturas ya sabéis que no tenéis que cerrar, ejecutamos lo siguiente:

c:\usr> mkdir c:\usr\pear
c:\usr> cd c:\usr\pear
c:\usr\pear> wget -qN --show-progress https://pear.php.net/go-pear.phar
c:\usr\pear> php go-pear.phar

Lo primero que nos preguntará es si la instalación es de “sitema” (común) o “local”, le decimos que es “local” y confirmamos:

Are you installing a system-wide PEAR or a local copy?
(system|local) [system] : local
Please confirm local copy by typing 'yes' : yes

Entonces nos muestra las rutas de instalación:

Below is a suggested file layout for your new PEAR installation.  To
change individual locations, type the number in front of the
directory.  Type 'all' to change all of them or simply press Enter to
accept these locations.

 1. Installation base ($prefix)                   : C:\usr\pear
 2. Temporary directory for processing            : C:\usr\pear\tmp
 3. Temporary directory for downloads             : C:\usr\pear\tmp
 4. Binaries directory                            : C:\usr\pear
 5. PHP code directory ($php_dir)                 : C:\usr\pear\pear
 6. Documentation directory                       : C:\usr\pear\docs
 7. Data directory                                : C:\usr\pear\data
 8. User-modifiable configuration files directory : C:\usr\pear\cfg
 9. Public Web Files directory                    : C:\usr\pear\www
10. System manual pages directory                 : C:\usr\pear\man
11. Tests directory                               : C:\usr\pear\tests
12. Name of configuration file                    : C:\usr\pear\pear.ini
13. Path to CLI php.exe                           : c:\usr\php

1-13, 'all' or Enter to continue:

Si no nos hemos perdido con los pasos y los hemos seguido bien verás que las rutas ya son correctas y sólo hay que pulsar intro para seguir:

Beginning install...
Configuration written to C:\usr\pear\pear.ini...
Initialized registry...
Preparing to install...
installing phar://C:/usr/pear/go-pear.phar/PEAR/go-pear-tarballs/Archive_Tar-1.4.0.tar...
installing phar://C:/usr/pear/go-pear.phar/PEAR/go-pear-tarballs/Console_Getopt-1.4.1.tar...
installing phar://C:/usr/pear/go-pear.phar/PEAR/go-pear-tarballs/PEAR-1.10.1.tar...
installing phar://C:/usr/pear/go-pear.phar/PEAR/go-pear-tarballs/Structures_Graph-1.1.1.tar...
installing phar://C:/usr/pear/go-pear.phar/PEAR/go-pear-tarballs/XML_Util-1.3.0.tar...
install ok: channel://pear.php.net/Archive_Tar-1.4.0
install ok: channel://pear.php.net/Console_Getopt-1.4.1
install ok: channel://pear.php.net/Structures_Graph-1.1.1
install ok: channel://pear.php.net/XML_Util-1.3.0
install ok: channel://pear.php.net/PEAR-1.10.1
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

** WARNING! Old version found at C:\usr\pear, please remove it or be sure to use the new c:\usr\pear\pear.bat command

The 'pear' command is now at your service at c:\usr\pear\pear.bat

Y ya está, listo para la primera prueba:

c:\usr\pear> cd c:\usr
c:\usr> pear clear-cache
reading directory c:\Users\username\AppData\Local\Temp\pear\cache
0 cache entries cleared

c:\usr> pear update-channels
Updating channel "doc.php.net"
Update of Channel "doc.php.net" succeeded
Updating channel "pear.php.net"
Update of Channel "pear.php.net" succeeded
Updating channel "pecl.php.net"
Update of Channel "pecl.php.net" succeeded

c:\usr> pear upgrade
downloading Archive_Tar-1.4.2.tgz ...
Starting to download Archive_Tar-1.4.2.tgz (20,624 bytes)
........done: 20,624 bytes
upgrade ok: channel://pear.php.net/Archive_Tar-1.4.2

Ya sólo nos faltaría instalar composer:

C:\usr> wget -qN --show-progress https://getcomposer.org/composer.phar -P c:\usr\bin\
composer.phar         100%[======================>]   1.74M  4.47MB/s    in 0.4s

Para actualizar composer:

C:\usr> composer selfupdate
Updating to version 1.3.1 (stable channel).
    Downloading: 100%
Use composer self-update --rollback to return to version 285ff274accb24f45ffb070c2b9cfc0722c31af4

Ahora ya estamos listos para crear y ejecutar nuestros scripts PHP en línea de comandos.

En la próxima entrega instalaremos XAMPP y reemplazaremos el PHP incorporado por el que acabos de instalar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *