Categorías
GNU/Linux HumHub

Error instalando HumHub: Zend OPcache API is restricted by “restrict_api”

Al intentar instalar Humhub en un hosting compartido, me ha saltado este error durante la instalación, el cual es debido a que el servidor tiene restringidas las llamadas a OPcache en la configuración de PHP. En concreto, tiene activa la restricción opcache.restrict_api, la cual permite llamar a funciones de la API de OPcache solamente desde scripts de PHP cuya ruta comience con la cadena especificada.

Atención: este error está corregido ya en la versión 1.13.0 de Humhub, donde se aplica la modificación descrita en el punto 2.

Hay dos formas de solucionar este error, dependiendo de si tenemos acceso o no a la configuración del servidor web.

1) Si tenemos acceso al php.ini

En este caso tenemos que editar el php.ini. Accedemos a él, por ejemplo en un servidor Debian 11 lo haremos con :

sudo nano /etc/php/7.4/apache2/php.ini

Encontraremos la línea a modificar haciendo ctrl+W y buscando «opcache.restrict_api». Veremos que la opción tendrá asignada una cadena de texto, la cual tendremos que borrar dejando la línea:

opcache.restrict_api = ""

Que es la opción por defecto. Guardamos el fichero, reiniciamos el servidor con:

sudo systemctl restart apache2

Y ya no debería de saltar el error cuando hagamos la instalación de HumHub

2) Si no tenemos acceso al php.ini

Esta es la situación habitual cuando intentamos instalar Humhub en un hosting compartido. En este caso tenemos que editar el código de HumHub, prefijando las llamadas a la función opcache_invalidate con el símbolo «@», que es la forma que tiene PHP de evitar que salten los errores de una función cuando es ejecutada, silenciándolos. Si buscamos la cadena «opcache_invalidate» en los ficheros del directorio donde hemos extraído el código fuente de HumHub veremos que aparece en varios de ellos, y que en casi todos ya aparece prefijado con la @, salvo en dos (estoy usando la versión 1.21.1, puede que en versiones anteriores o posteriores la situación sea distinta) que son:

/protected/humhub/libs/DynamicConfig.php

/protected/vendor/yiisoft/yii2/rbac/PhpManager.php

Tenemos que modificar el código de forma que la llamada a la función quede:

@opcache_invalidate($configFile)

en el primer fichero y

@opcache_invalidate($file, true)

en el segundo.

No me gusta solucionar un error simplemente ignorándolo, que es lo que hacemos cuando en PHP prefijamos con @ la llamada a una función, pero dado que los creadores de HumHub lo han hecho así en todas las llamadas a la función salvo en dos, creo que ha sido más por olvido que por intención. Esta solución tiene además el problema de que cada vez que actualicemos la versión de HumHub tendremos que volver a editar dichos ficheros para rehacer los cambios, salvo que la actualización no nos los cambie o nuevas versiones corrijan este problema.

Anuncio publicitario
Categorías
Windows

Activar xdebug en XAMPP

Después de instalar XAMPP en Windows, para poder hacer debug de una aplicación en PHP con Netbeans hay que hacer unos pequeños cambios en el php.ini que viene por defecto. A partir de este momento consideraremos <xampp_home> el directorio donde hayamos instalado XAMPP, por ejemplo «c:\xampp»

Abrimos el fichero <xampp_home>\php\php.ini

Al final del mismo encontraremos la parte que se refiere a Xdebug. Tendremos que descomentar, es decir, quitar el «;» (las líneas que comienzan con un «;» son consideradas comentarios) de las líneas siguientes:

zend_extension = «C:\xampp\php\ext\php_xdebug.dll»

xdebug.remote_enable = 1
xdebug.remote_handler = «dbgp»
xdebug.remote_host = «127.0.0.1»

Ojo: también tendremos que poner el remote_enable a «1», que por defecto viene a «0». De forma que esas líneas del fichero nos quedan así:

xdebug_php_ini

Reiniciamos el servidor Apache y ya podemos hacer debug de programas PHP en Netbeans

(Tomado de la entrada: http://www.wikihow.com/Configure-XDebug-in-XAMPP-%281.7.2/Later%29-on-Windows )

Categorías
Drupal

Drupal 5 con PHP 5.3

El gestor de contenidos Drupal en su versión 5 sólo es compatible con las versiones de PHP hasta la 5.2, por lo que los sitios web que continúan usando la versión 5 de Drupal no funcionarán correctamente en los servidores en los que se haya actualizado el PHP a la versión 5.3 o superior.
Como algunos de estos sitios no es posible actualizarlos a la versión 6 de Drupal (o no hay medios para hacerlo) la única forma de hacer que funcionen lo más correctamente posible es aplicando el patch que aparece explicado en este enlace.
Para instalarlo primero tendremos que descargarnos dicho patch, nos situaremos en el directorio raiz en el que tengamos instalado nuestro Drupal 5, y posteriormente lanzaremos el comando:
patch -p1 < <path_al_fichero>/drupal5php53_0.patch
En caso de que al aplicar el patch no se produjeran los efectos esperados, es posible revertir lo realizado con el comando:
patch -p1 -R < <path_al_fichero>/drupal5php53_0.patch
Para más información sobre la forma de aplicar «parches» en Drupal, consultar este enlace.

Categorías
GNU/Linux

PHP no funciona en userdir

Es una tontería, pero puede dar lugar a algún que otro dolor de cabeza: a veces por defecto la instalación de php tiene desactivada la ejecución en los directorios personales (por ejemplo en Ubuntu) por lo que si después de hacer una instalación de apache2 y php5 habilitas el módulo userdir, y generas un fichero php con la función phpinfo() o cualquier otro script de php, lo más seguro es que te aparezca una página en blanco, en vez de ver la información esperada.
La solución es fácil, basta con editar el fichero
/etc/apache2/mods-available/php5.conf
Al final del mismo verás que hay una parte que indica que hay que comentar unas lineas para que los scripts de php funcionen en un directorio de usuario. Esa parte tiene que quedar así:
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c>
# <Directory /home/*/public_html>
# php_admin_value engine Off
# </Directory>
#</IfModule>

Y eso es todo. Después de reiniciar el servidor Apache (service apache2 restart) los scripts de php ya funcionan.
También se podría poner la directiva a «On», pero si lo hacemos así, entonces no podríamos ponerla a «Off» en los ficheros .htaccess si en algún momento queremos hacerlo.