Cómo instalar y configurar PHP en macOS

macOSPHP

En este tutorial veremos cómo instalar PHP en macOS. También veremos cómo configurarlo para que funcione con Apache, como parte de tu entorno LAMP de desarrollo local.

Para seguir este tutorial solamente necesitarás ciertos conocimientos básicos de la línea de comandos de macOS. Si vas a usar PHP junto con Apache, es mejor que primero consultes el tutorial de instalación de Apache en macOS y que luego continúes con este tutorial.

Paquetes que Incluyen PHP

En este tutorial instalaremos PHP de forma independiente. Sin embargo, has de saber que también existen paquetes todo en uno que incluyen todo el conjunto de aplicaciones LAMP, compuesto por Apache, PHP y MySQL. Estos paquetes funcionan bien en entornos de desarrollo local.

Si prefieres usar uno de estos paquetes, puedes usar MAMP, que es el paquete LAMP más utilizado en macOS. Para instalarlo, consulta el tutorial de instalación de MAMP en macOS. Si por el contrario prefieres instalar PHP de forma individual, continúa leyendo.

Cómo instalar PHP en macOS

Primero vamos a instalar PHP individualmente y, seguidamente, veremos cómo configurar las opciones más relevantes. Si estabas acostumbrado a instalar PHP con Homebrew, has de saber que desde el año 2018 ya no incluye muchas de las extensiones de PHP, conservando solamente las críticas.

Homebrew ya no incluye las extensiones xdebug o redis, entre otras. Ahora deben ser instaladas por medio de PECL (PHP Extension Community Library). Por ello, instalaremos PHP usando Homebrew, usando PECL para instalar las extensiones más relevantes.

Si todavía no lo tienes instalado, sigue los pasos que se describen a continuación para instalar Homebrew en macOS:

  1. Necesitarás las Command Line Tools si todavía no las tienes instaladas. Para obtenerlas, instalaremos Xcode:
    xcode-select --install
  2. Luego utiliza el siguiente comando para instalar Homebrew, introduciendo tu contraseña de administardor cuando se te pida:
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Cuando finalice la instalación, usa el comando brew doctor para verificarla.

En caso de que quieras aprender a usar Homebrew, consulta el tutorial de introducción a Homebrew. Tras instalar Homebrew, ya podemos instalar PHP. Usaremos el paquete Homebrew/core, que es un paquete menos completo que Homebrew/php, que ya no está disponible, pero funciona y recibe el mantenimiento correspondiente.

Para instalar PHP basta con que uses este comando, reemplazando 7.4 por la versión de PHP que quieres instalar:

brew install php@7.4

Configuración de PHP en macOS

El archivo principal de configuración de PHP es el archivo php.ini, cuya ruta completa es la siguiente:

/usr/local/etc/php/7.4/php.ini

Recuerda que el directorio en el que está el archivo php.ini será el de la versión de PHP que estás usando.

Activa el módulo de PHP de Apache

Si quieres que Apache sea capaz de ejecutar scripts PHP, debes seguir los pasos que ves a continuación:

  1. Edita el archivo httpd.conf de configuración de Apache:
    open -e /usr/local/etc/httpd/httpd.conf
  2. En el archivo, busca las líneas que comienzan por LoadModule, usadas para cargar módulos de Apache. Después de la línea en la que se carga el módulo mod_rewrite, agrega esta otra línea para activar el módulo de PHP:
    LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

Recuerda reemplazar la versión 7.4 por la versión de PHP que estés instalando, si es que es otra.

Además, también debes configurar Apache para que acepte los archivos index.php como índices de directorio. Para ello sigue estos pasos:

  1. En el archivo httpd.conf busca la opción DirectoryIndex y agrega index.php a la lista de valores. Agrégalo antes de index.html, de modo que tenga prioridad sobre este:
    DirectoryIndex index.php index.html
  2. Luego, tras el bloque de la opción anterior debes agregar el handler para los archivos PHP. Así es como debe quedar tanto la opción DirectoryIndex como el handler:
    <IfModule dir_module>
      DirectoryIndex index.php index.html
    </IfModule>
    <FilesMatch \.php$>
      SetHandler application/x-httpd-php
    </FilesMatch>

Tras haber realizado los cambios al archivo de configuración, guárdalo e inicia PHP, configurándolo para que se inicie cuando reinicies el equipo. Para ello, usa este comando, reemplazando  7.4 por tu versión de PHP:

brew services start php@7.4

Configuración de errores de PHP

Vamos a cambiar ciertas opciones que te permitirán ver los errores de los scripts de PHP. Además, también configuraremos la localización del log de errores.

Lo primero que debes hacer es crear el directorio /usr/local/log/php, que es el que usaremos para almacenar los logs de PHP:

sudo mkdir /usr/local/log
sudo mkdir /usr/local/log/php

Luego cambia los permisos del directorio que has creado:

sudo chgrp -R staff /usr/local/log/php
sudo chmod -R ug+w /usr/local/log/php/

Ahora edita el archivo php.ini con este comando, reemplazando 7.4 por tu verisón de PHP:

open -e /usr/local/etc/php/7.4/php.ini

Luego agrega estas opciones al final del mismo o, en caso de que las opciones ya estén presentes en el archivo, establece los siguientes valores:

error_reporting = E_ALL & ~E_STRICT
display_errors = On
error_log = "/usr/local/log/php/php_errors.log"

Luego reinicia Apache para aplicar los cambios:

sudo apachectl -k restart

Configuración adicional de PHP

Vamos a modificar ciertas opciones del archivo de configuración de PHP. Para ello edita el archivo php.ini con este comando, reemplazando 7.4 por tu verisón de PHP:

open -e /usr/local/etc/php/7.4/php.ini

Luego modifica las siguientes opciones o, en caso de que no estén, agrégalas:

  • short_open_tags: Busca la opción short_open_tags y cambia su valor para desactivar las etiquetas abreviadas de apertura <?  y así evitar problemas de compatibilidad:
    short_open_tag = Off
  • expose_php: Desactiva la opción expose_php para evitar que puedan averiguar tu versión de PHP desde el exterior, algo que quizás no sea relevante en local pero sí en producción:
    expose_php = Off
  • upload_tmp_dir: Establece un directorio temporal de subida de archivos:
    upload_tmp_dir = "/tmp/"
  • allow_url_fopen: Activa la directiva allow_url_fopen:
    allow_url_fopen = on

Finalmente, reinicia Apache para que estos cambios tengan efecto:

sudo apachectl -k restart

Prueba la configuración de PHP

Para probar la configuración de PHP, crea un archivo llamado index.php y guárdalo en el directorio de archivos de Apache, que por defecto es el directorio /usr/local/var/www, aunque si has seguido el tutorial de instalación de Apache de neoguias, será el directorio ~/Sites:

echo "<?php phpinfo();" > ~/Sites/index.php

Luego reinicia Apache con el siguiente comando:

sudo apachectl -k restart

Finalmente accede a la URL http://localhost/ en tu navegador. Si todo ha salido bien deberías ver la siguiente salida con información acerca de la versión actual de PHP:

En caso de que no se muestre esta pantalla, asegúrate de que has creado el archivo index.php en el directorio de archivos de Apache. Puedes encontrarlo en la opción DocumentRoot del archivo httpd.conf. Si es el correcto, prueba a reiniciar el equipo.

Instala extensiones de PHP en macOS

Desde el año 2018 las extensiones de PHP deben ser instaladas usando PECL. Sin embargo, PECL se instala con PHP, por lo que no necesitarás instalar paquetes adicionales. Bastará con agregues la ubicación del directorio /bin de PHP al PATH del sistema. Para ello sigue estos pasos:

  1. Accede al directorio /usr/local/Cellar/php@7.4/, reemplazando 7.4 por tu versión de PHP:
    cd /usr/local/Cellar/php@7.4/
  2. Verás un directorio con tu versión completa de PHP. También podrás comprobarla usando el comando php -v:
    php -v
    
    #salida del comando
    PHP version 7.4.13
  3. Ahora ejecuta este comando para agregar el directorio /bin de PHP al PATH del sistema, reemplazando 7.4.13 pro tu verisón de PHP:
    export PATH=$PATH:/usr/local/Cellar/php@7.4/7.4.13/bin/
  4. El comando anterior también debería haber reiniciado bash, por lo que ya deberías poder ejecutar el comando pecl, que mostrará una lista de opciones.

A continuación vamos a instalar algunas de las extensiones de PHP más utilizadas.

Instalación de la extensión Xdebug

Existen varias versiones de Xdebug. Sin embargo, instalaremos la versión 3.0.1, que es  la última versión estable que soporta PHP 7.4. Si estás instalando otra versión de PHP, consulta  aquí la compatibilidad.

En cualquier caso, usa este comando para instalar Xdebug, reemplazando 3.0.1 por la versión que vas a instalar:

pecl install xdebug-3.0.1

Luego edita el archivo php.ini con este comando, reemplazando 7.4 por tu versión de PHP:

open -e /usr/local/etc/php/7.4/php.ini

Y agrega estas opciones al final del mismo:

[xdebug]
zend_extension="xdebug.so"
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000

En caso de que también se haya agregado automáticamente la línea extension="xdebug.so" al inicio del archivo php.ini, elimina dicha línea.

Finalmente reinicia Apache con este comando:

sudo apachectl -k restart

Instalación de la extensión igbinary

Vamos a instalar la extensión igbinary, que mejora la serialización de elementos de PHP. Puedes consultar las versiones de igbinary aquí. Instalaremos la versión 3.1.6, que es la más reciente que soporta PHP 7.4.

Usa este comando para instalar igbinary, reemplazando 3.1.6 por la versión que vas a instalar:

pecl install igbinary-3.1.6

Finalmente reinicia Apache con este comando:

sudo apachectl -k restart

Instalación de la extensión redis

Redis permite almacenar datos en memoria, siendo usado a modo de base de datos, caché y gestor de mensajes. Si todavía no tienes Redis instalado en tu sistema, puedes instalarlo con este comando:

brew install redis

Una vez haya finalizado la instalación, podrás iniciar Redis con este comando:

brew services start redis

A continuación vamos a instalar la versión de PHP de Redis. Puedes consultar las versiones de la extensión aquí. En este ejemplo instalaremos la última versión disponible a la hora de redactar este artículo, que es Redis 5.3.2..

Para instalar la extensión de Redis para PHP usa este comando, reemplazando 5.3.2 por la versión que vas a instalar:

pecl install redis-5.3.2

En caso de que se te pregunte si quieres agregar soporte para el serializer igbinary, selecciona la opción yes.

Si también se te pregunta si quieres agregar soporte para la extensión lzf, selecciona la opción no.

Luego edita el archivo php.ini con este comando, reemplazando 7.4 por tu versión de PHP:

open -e /usr/local/etc/php/7.4/php.ini

Y agrega estas opciones al final del mismo:

[redis]
extension="igbinary.so"
extension="redis.so"
session.save_handler = "redis"
session.save_path = "tcp://127.0.0.1:6379?weight=1&timeout=2.5"

En caso de que también se haya agregado automáticamente la línea extension="redis.so" al inicio del archivo php.ini, elimina dicha línea. Lo mismo con la línea extension="igbinary.so".

Finalmente reinicia Apache con este comando:

sudo apachectl -k restart

Y con esto ya hemos terminado.

Verificación final

Si accedes a la URL http://localhost desde tu navegador deberías ver que las extensiones están activas cuando se imprima el resultado de la función phpinfo().

Esto ha sido todo.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

2 comentarios en “Cómo instalar y configurar PHP en macOS

  1. Saludos Edu.

    Un gusto haber leído tu guía. Aprendí muchas cosas. Soy un usuario nuevo en Mac. Te cuento que hace un mes realicé una migración de SO y estoy en Big Sur 11.2.3, PHP 7.3.24 y Apache 2.4.46. En esta migración perdí la extensión de Postgres php_pgsql.so.
    De estar en tus manos, podrás recomendarme que camino seguir para solucionar este detalle? Gracias, Juan Portillo.

  2. hola, he intentado instalar la extensión php-zip en un mac con procesador m1 utilizando brew, pero no he podido conseguirlo, podrías indicarme como se puede hacer por favor? gracias

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”