[ Foro de PHP ]

Error en un php que usa mbstring

14-Jun-2022 18:14
Jos Fran
0 Respuestas

Estoy revisando una página web que ejecuta varios php en una máquina con
Linux Debian.

En concreto, uno de los php contiene este código:

$methods = get_class_methods ( $class );
// Hace que el contenido de $methods sea:
// ["__construct", "getId", "setId", "getVal", "setVal"]

$plength = count($methods);

for($i=0;$i<$plength;$i++) {
 if(stripos($methods[$i], "get")!==FALSE){
   $property = mb_substr($methods[$i], 3, mb_strlen($methods[$i], 'UTF-8'), 'UTF-8');
   $setter = 'set'.mb_substr($methods[$i], 3, mb_strlen($methods[$i], 'UTF-8'), 'UTF-8');

   // ...  
 }
}


Al ejecutarse este php en el navegador web se muestra el error:

Error
Call to undefined function mb_substr()

indicando que la línea que produce el error es la que comienza con

$property =


He buscado información en varios foros sobre este error y he visto que
se debe a que mbstring es una extensión que no se instala por defecto.
Ejecutando el comando
php -m | grep mbstring
compruebo que mbstring no está instalado, por lo que es necesario instalarla.

Entonces he comprobado qué versión de php tengo:

php -v
Muestra que tiene la versión 7.4.28 de php

Y a continuación, instalo mbstring con:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install php7.4-mbstring

Ahora el comando
php -m | grep mbstring
muestra
mbstring

Sin embargo, en el navegador web se sigue mostrando el mismo error de
antes:

Error
Call to undefined function mb_substr()

indicando que la línea que produce el error es la que comienza con

$property =


No entiendo porque sigue mostrando esto error si ahora mbstring sí
está instalado.

Creo que una posible solución sería modificar el código fuente del
php de forma que use funciones nativas de php que no requieran
instalar nada adicional.

No he trabajado antes con php y no sé cómo hacer que deje de
mostrars este error o cómo se podría modificar este código de forma que
no use mbstring.

Si alguien me puede dar alguna indicación se lo agradezco.

Muchas gracias.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)