Instalar varias versiones de PHP en MacOS 12 (Monterey)
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