Jump to content

[Solucionado] Sobre Prestashop 8, memcached y PHP 8.1


Recommended Posts

Buenas tardes.

Escribo este mensaje a quien pueda interesar el tema.

Desarrollo desde hace bastante tiempo una tienda en Prestashop. Empecé con Prestashop 7 pero actualmente ya está en 8.1.7 sobre PHP 7.4.33. Siempre he usado memcached para el almacenamiento temporal de datos y caché de la tienda.

Hoy me ha dado por probar a subir a PHP 8.1 para ver si mejoraba el rendimiento y no quedarme muy obsoleto y la prueba ha sido un fracaso. Explico la razón.

Después de instalar todos los paquetes de php8.1 necesarios, entre los cuales se encuentra el de php-memcached, el administrador ha dejado de funcionar con el siguiente error:

imagen.png.20c3074c5b79ad7530b46f388c16d74b.png

e indagando he visto que es una comprobación de Symfony sobre la versión del paquete php-memcached. He probado a modificar la versión 3.1.5 a 3.1.6 para ver que pasaba y entonces ha empezado a aparecer el siguiente mensaje en el log:

 request.CRITICAL: Uncaught PHP Exception TypeError: "Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given" at /var/www/html/*******/vendor/symfony/symfony/src/Symfony/Component/Cache/Traits/MemcachedTrait.php line 249 {"exception":"[object] (TypeError(code: 0): Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given at /var/www/html/**********/vendor/symfony/symfony/src/Symfony/Component/Cache/Traits/MemcachedTrait.php:249)"

Argument #2 ($expiration) must be of type int, int given !!!

¿Esto como se come? Total que he mirado en el proyecto php-memcached en github y...

https://github.com/php-memcached-dev/php-memcached/issues/496

y también...

https://github.com/php-memcached-dev/php-memcached/issues/509

O lo que es lo mismo, hay un problema con PHP 8.1 y php-memcached 3.1.5 y al menos para mi distribución (ubuntu 22.04 ) no he encontrado un paquete con una versión superior con la que resolver el problema. La siguiente versión sería la 3.2 pero solo está para PHP 8.2 por lo que me iría a un PHP no soportado aún por Prestashop. Total, que o me quedo en PHP 7.4 o me compilo yo el fuente de php-memcached a ver si se arregla, o me cambio de caché.

He dejado una entrada en el github de prestashop para su información, aunque no tiene que ver con ellos.

Un saludo.

 

 

 

 

 

Link to comment
Share on other sites

  • 1 month later...

Buenas! después de investigar alternativas para lidiar con la incompatibilidad de php-memcached en PHP 8.1, una opción viable sería cambiar a Redis en lugar de intentar parchear o usar versiones beta de php-memcached.

Redis es compatible con PHP 8.1 y ampliamente soportado en entornos modernos. Te permitiría mantener un sistema de caché estable sin riesgos asociados con versiones beta o configuraciones complejas. Solo necesitarías instalar php-redis y configurar Prestashop para usar Redis en la sección de caché.

Si decides intentarlo, te recomendaría hacer pruebas en un entorno de desarrollo, monitorear el rendimiento y mantener un backup x si necesitas necesitar volver a Memcached. Aunque implica un cambio inicial, Redis podría darte mayor estabilidad y flexibilidad para futuras actualizaciones.

Espero que esta alternativa te sea útil

Link to comment
Share on other sites

Gracias @Eutanasio, le echaré un vistazo.

Lo cierto es que ha pasado un tiempo desde este post y se han producido actualizaciones a este tema que no he compartido.

Hace dos semanas decidí subir el SO del servidor de Ubuntu 22.04 a 24.04. No esperaba tener ningún problema con este cambio, pero cuando acabó, no funcionaba nada. Resulta que el php 7.x ya no estaba soportado y había desaparecido, instalando el 8.2 y 8.3 en su lugar.

Después de algunos intentos de hacer funcionar la tienda (que ya está en versión 8.2) en php 8.2 decidí intentar buscar los paquetes de 7.4 a ver si se podían instalar desde algún repositorio o tenía directamente que volver a ubuntu 22.04.

Resulta que el repositorio ondrej-ubuntu-php (https://ppa.launchpadcontent.net/ondrej/php/ubuntu/) se mantienen todas las versiones de php actualizadas para las distintas distribuciones basadas en Debian como Ubuntu.

Así que añadiendo este repo a mi gestor de paquetes he podido no solo instalar un php 7.4.33 de nuevo sino un 8.1 con todos los paquetes actualizados, incluido el de memcached!

Funciona perfectamente todo excepto el módulo de xdebug 3.3 que me da un segfault cada vez que intento hacer un paso a paso por el código, pero por ahora no he visto ningún otro problema.

Un saludo

 

 

 

Link to comment
Share on other sites

  • Manuel_GT changed the title to [Solucionado] Sobre Prestashop 8, memcached y PHP 8.1

Hola, sobre el problema de los segfaults con Xdebug en PHP 7.4, puede que el conflicto venga de la versión de Xdebug que estás usando. Xdebug 3.3 funciona bien en PHP 8.0 o superior, pero en PHP 7.4 suele ser mejor usar una versión anterior, como la 3.1, que es compatible y suele dar menos problemas en entornos como el tuyo.

Una opción sería desinstalar la versión actual de Xdebug e instalar la 3.1.6, que es la última compatible con PHP 7.4. Esto debería ayudar a evitar los segfaults y mejorar la estabilidad.

También sería bueno revisar la configuración de Xdebug en tu archivo xdebug.ini para asegurarte de que solo tienes activadas las opciones básicas necesarias para la depuración. Así podrías reducir posibles conflictos.

Prueba estos pasos y comenta si ves alguna mejora. ¡Espero que esto te ayude!

Link to comment
Share on other sites

  • 2 weeks later...
On 11/10/2024 at 8:39 PM, Eutanasio said:

Buenas! después de investigar alternativas para lidiar con la incompatibilidad de php-memcached en PHP 8.1, una opción viable sería cambiar a Redis en lugar de intentar parchear o usar versiones beta de php-memcached.

Redis es compatible con PHP 8.1 y ampliamente soportado en entornos modernos. Te permitiría mantener un sistema de caché estable sin riesgos asociados con versiones beta o configuraciones complejas. Solo necesitarías instalar php-redis y configurar Prestashop para usar Redis en la sección de caché.

Si decides intentarlo, te recomendaría hacer pruebas en un entorno de desarrollo, monitorear el rendimiento y mantener un backup x si necesitas necesitar volver a Memcached. Aunque implica un cambio inicial, Redis podría darte mayor estabilidad y flexibilidad para futuras actualizaciones.

Espero que esta alternativa te sea útil

Hola yo lo solucione con la 8.0 de PHP, la 8.1 me pasaba algo parecido

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...