Instalar PHP 8.0 en un equipo con sistema operativo Rocky Linux 8.8. Instalamos también los módulos para acceso desde PHP a MySQL/MariaDB y otros servicios.
- Instalar PHP 8 en Rocky Linux 8.
- Habilitar carga de módulo PHP en Apache.
- Probar servidor web Apache con PHP.
- Probar módulos de acceso de PHP a MySQL MariaDB en servidor web Apache sobre Rocky Linux.
- Solución al error 2002 Access Denied al conectar a servidor de MySQL/MariaDB externo desde Rocky Linux con PHP.
Instalar PHP 8 en Rocky Linux 8
En primer lugar, es recomendable actualizar los paquetes y repositorios actuales de Rocky Linux, ejecutando el siguiente comando (que puede tardar varios minutos):
1 |
sudo dnf update |
A continuación, revisaremos las versiones de PHP disponibles en el repositorio, con el comando:
1 |
sudo dnf module list php |
En el listado, tenemos disponibles las versiones: PHP 7.2, 7.3, 7.4 y 8.0. En nuestro caso, queremos instalar la versión 8.0, por lo que la activaremos con el siguiente comando:
1 |
sudo dnf module enable php:8.0 |
Es posible que solicite confirmación, responderemos «s» e INTRO.
Para instalar PHP y varios módulos adicionales (soporte para acceso a base de datos MySQL/MariaDB, Zip, CURL, JSON, XML, etc., ejecutaremos el siguiente comando:
1 |
sudo dnf install php php-mysqlnd php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-json php-readline php-mbstring php-apcu php-xml php-dom |
Responderemos «s» e INTRO a la confirmación y se instalará PHP 8.0 y los módulos adicionales:
Si ejecutamos ahora el siguiente comando:
1 |
php -v |
Nos devolverá la versión instalada de PHP:
1 2 3 4 |
PHP 8.0.27 (cli) (built: Jan 3 2023 16:17:26) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.27, Copyright (c) Zend Technologies with Zend OPcache v8.0.27, Copyright (c), by Zend Technologies |
Habilitar carga de módulo PHP en Apache
Si disponemos de un servidor web Apache o Nginx en nuestro equipo Rocky Linux, como indicamos en el siguiente tutorial:
Revisaremos que tenemos añadido el módulo PHP para que reconozca y compile los ficheros .php del sitio web. Para ello, en primer lugar, obtendremos el nombre de la librería PHP, con el comando:
1 |
ls /etc/httpd/modules/ | grep php |
Que para PHP 8.0 y Rocky Linux 8.8, nos devuelve: libphp.so
Editaremos el fichero de configuración de Apache, para averiguar en qué carpeta se almacenan los ficheros de configuración de los módulos. Para ello, editaremos el fichero /etc/httpd/conf/httpd.conf, con:
1 |
nano /etc/httpd/conf/httpd.conf |
Y buscaremos el parámetro «Include …» que nos indicará dónde se almacenan los ficheros de configuración de los módulos, normalmente tendrá el siguiente valor:
Include conf.modules.d/*.conf
Saldremos de la edición sin hacer cambios, pulsando las teclas Control + X y accederemos a la carpeta del Include…», con:
1 |
cd /etc/httpd/conf.modules.d |
Haremos un «ls» para que nos liste los ficheros de configuración de módulos .conf:
1 |
ls -lah *.conf |
En los ficheros .conf, editaremos el fichero 20-php.conf (puede tener un nombre diferente, en función de la versión de PHP y de la versión y distribución de Linux), que debe tener, al menos, este contenido:
1 2 |
LoadModule php_module modules/libphp.so AddHandler php-script .php |
En caso de no encontrar este fichero, o de no encontrar un fichero con el contenido anterior, lo crearemos.
Si hemos hecho algún cambio en la configuración de PHP o de Apache, es conveniente comprobar que la sintaxis de los ficheros de configuración es correcta, ejecutando el comando:
1 |
httpd -t |
Si la sintaxis es correcta, devolverá el mensaje: Syntax OK. Si hay algún error, devolverá el error, por ejemplo, forzando un error en el fichero 20-php.conf, devolverá:
1 2 |
AH00526: Syntax error on line 19 of /etc/httpd/conf.modules.d/20-php.conf: Invalid command 'dLoadModule', perhaps misspelled or defined by a module not included in the server configuration |
Y si hemos hecho cambios, reiniciaremos el servicio de Apache para aplicarlos:
1 |
sudo systemctl restart httpd |
Comprobaremos que el servicio está correctamente iniciado, con:
1 |
sudo systemctl status httpd |
Que devolverá: Active: active (running)
Probar servidor web Apache con PHP
Podemos probar el servidor web Apache con PHP agregando a uno de los sitios web del servidor un fichero con el siguiente contenido:
Por defecto, si no usamos VirtualHost, Apache almacenará los ficheros del sitio web en la carpeta que indiquemos el en el parámetro DocumentRoot del fichero de configuración /etc/httpd/conf/httpd.conf. En nuestro caso, hemos cambiado el valor por defecto (inseguro) «/var/www/html» a la carpeta «/var/sw/proyectoa»:
Por lo tanto, para probar PHP y Apache, crearemos un fichero en la carpeta anterior /var/sw/proyectoa, por ejemplo «php_probar.php» (la extensión .php es muy importante), con el comando:
1 |
sudo nano /var/sw/proyectoa/php_probar.php |
Le añadiremos el siguiente contenido:
1 2 3 |
<?php phpinfo(); ?> |
Guardaremos el fichero pulsando Control + O y cerraremos la edición pulsando Control + X.
A partir de ahora ya podremos probar el servidor web Apache con PHP. Para ello, desde un equipo de la red del servidor, abriremos un navegador e introduciremos su dirección IP (o nombre DNS si lo tenemos configurado) y el nombre del fichero, quedando:
http://IP_servidor_web_Apache/php_probar.php
Si todo es correcto, mostrará una página con toda la información de PHP y Apache del servidor web (obtenida por la función phpinfo() invocada en el fichero:
Probar módulos de acceso de PHP a MySQL/MariaDB en servidor web Apache sobre Rocky Linux
Para probar el acceso a un servidor de base de datos MySQL o MariaDB, desde nuestro servidor web Apache con PHP, necesitaremos conocer la IP, usuario, contraseña y puerto de acceso a dicho servidor. Una vez que tengamos estos datos, crearemos un fichero PHP en la ruta del sitio web (dónde hemos indicando en el punto anterior), por ejemplo con:
1 |
sudo nano /var/sw/proyectoa/php_probar_mysql.php |
Añadiremos el siguiente contenido al fichero PHP, para conectar al servidor de base de datos con IP 192.168.1.5, con el usuario «usuario», la contraseña «contraseña» y a la base de datos «facturas». Una vez conectados, obtendremos el número de registros de la tabla «factura» y cerraremos la conexión:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $conexionBD = new mysqli('192.168.1.5', 'usuario', 'contraseña', 'facturas'); if ($conexionBD->connect_error) { echo "Error al conectar al servidor de base de datos MySQL/MariaDB." . PHP_EOL; echo "<br>Código de error (para depuración): " . $conexionBD->connect_errno . PHP_EOL; echo "<br>Error (para depuración): " . $conexionBD->connect_error . PHP_EOL; } else { echo "Conexión con servidor de BD realizada correctamente." . PHP_EOL; echo "<br>Información del servidor de BD: " . mysqli_get_host_info($conexionBD) . PHP_EOL; //Obtenemos el número de registros de la tabla factura $sql = "select count(*) from factura"; $numRegistros = $conexionBD->query($sql)->fetch_row()[0]; echo "<br><br>Número de registros de la tabla factura: " . $numRegistros; mysqli_close($conexionBD); } ?> |
Guardaremos los cambios en el fichero php_probar_mysql.php pulsando Control + O y cerraremos la edición pulsando en Control + X.
Si realizamos la prueba, y la conexión es correcta, nos mostrará, vía web, el número de registros de la tabla «factura» en el servidor de base de datos con IP 192.168.1.5, para la base de datos «facturas»:
http://192.168.1.224/php_probar_mysql.php
Solución al error 2002 Access Denied al conectar a servidor de MySQL/MariaDB externo desde Rocky Linux con PHP
Si al probar la página web PHP que conecta con MySQL/MariaDB (mostrada en el punto anterior) nos muestra este error:
1 2 3 |
Error al conectar al servidor de base de datos MySQL/MariaDB. Código de error (para depuración): 2002 Error (para depuración): Permission denied |
Es muy probable que se deba a que tenemos SELinux activado en Rocky Linux. Para comprobar si tenemos activado el parámetro httpd_can_network_connect_db en SELinux, ejecutaremos el comando:
1 |
getsebool -a | grep httpd |
Nos devolverá el valor de activación de todos los parámetros de seguridad para Apache en SELinux. Para habilitar la conexión con un servidor MySQL/MariaDB (u otros) externo, desde PHP y Apache, tendremos que tener activado (a valor «on») el parámetro httpd_can_network_connect_db:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
httpd_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_connect_ftp --> off httpd_can_connect_ldap --> off httpd_can_connect_mythtv --> off httpd_can_connect_zabbix --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> off httpd_dbus_sssd --> off httpd_dontaudit_search_dirs --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_graceful_shutdown --> on httpd_manage_ipa --> off httpd_mod_auth_ntlm_winbind --> off httpd_mod_auth_pam --> off httpd_read_user_content --> off httpd_run_ipa --> off httpd_run_preupgrade --> off httpd_run_stickshift --> off httpd_serve_cobbler_files --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_sys_script_anon_write --> off httpd_tmp_exec --> off httpd_tty_comm --> off httpd_unified --> off httpd_use_cifs --> off httpd_use_fusefs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_opencryptoki --> off httpd_use_openstack --> off httpd_use_sasl --> off httpd_verify_dns --> off |
Si lo tenemos a valor «off», como es nuestro caso, lo cambiaremos a valor «on» con el comando:
1 |
setsebool -P httpd_can_network_connect_db 1 |