Instalar varias versiones de PHP en MacOS 12 (Monterey)

Author
By Darío Rivera
Posted on 2021-12-08 in MacOS

PHP es un excelente lenguaje de programación que viene por defecto instalado en las nuevas versiones de MacOS. Sin embargo, solamente la última versión disponible estará instalada. La buena noticia es que en MacOS podemos intercambiar versiones de PHP fácilmente, el día de hoy veremos cómo hacer esto posible. 

Detectar la versión actual instalada

Para detectar que vesiones tenemos instalada podemos primero realizar una búsqueda con brew.

~  brew search php
==> Formulae
brew-php-switcher     php-cs-fixer       php@7.3    phpbrew     phpmyadmin   pcp
php ✔                 php-cs-fixer@2     php@7.4    phplint     phpstan      pup
php-code-sniffer      php@7.2            php@8.0    phpmd       phpunit

==> Casks
eclipse-php           phpstorm

Lo cual indica que la única versión instalada es la siguiente: php ✔. Si tienes más versiones instaladas todas aparecerán con el check correspondiente.

Para ver qué versión tenemos por defecto habilitada podemos correr el siguiente comando.

~  php -v
PHP 8.1.0 (cli) (built: Nov 28 2021 01:31:19) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.0, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.0, Copyright (c), by Zend Technologies

Habilitar versiones no soportadas

Para habilitar versiones anteriores a las disponibles en brew puedes hacerlo mediante el siguiente comando.

brew tap exolnet/homebrew-deprecated

En este caso, de esta forma podrás instalar cualquier de las siguientes versiones de PHP.

brew install php@5.6
brew install php@7.0
brew install php@7.1
brew install php@7.2
brew install php@7.3
brew install php@7.4

Instalar una nueva versión de PHP

Para este ejemplo, vamos a instalar la versión 7.4 de PHP. Sin embargo, tu deberías poder instalar la versión que requieras según tus necesidades.

brew install php@7.4

Cuando instales la versión que necesitas te aparecerá un resumen que indica cómo deberías configurar apache para que pueda interpretar código PHP.

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

Finally, check DirectoryIndex includes index.php
    DirectoryIndex index.php index.html

The php.ini and php-fpm.ini file can be found in:
    /opt/homebrew/etc/php/7.4/

php@7.4 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.

If you need to have php@7.4 first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/opt/homebrew/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc

For compilers to find php@7.4 you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/php@7.4/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/php@7.4/include"


To restart php@7.4 after an upgrade:
  brew services restart php@7.4
Or, if you don't want/need a background service you can just run:
  /opt/homebrew/opt/php@7.4/sbin/php-fpm --nodaemonize

Cambiar entre versiones de PHP

Debes tener en cuenta que después de instalar una nueva versión de PHP esta no quedará automáticamente habilitada. Para esto debes primer detectar qué versión tienes instalada (paso anterior) y linkear la nueva versión. En este caso, como la versión actual es la versión por defecto (php ✔) basta ejecutar los siguientes comandos.

brew unlink php
brew link php@7.4 --force

Al consultar la versión de PHP verás que corresponde a la que acabamos de cambiar.

~  php -v
PHP 7.4.26 (cli) (built: Nov 28 2021 16:40:00) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.26, Copyright (c), by Zend Technologies

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.