Manuel_GT Posted September 20 Share Posted September 20 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: 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 More sharing options...
Eutanasio Posted November 10 Share Posted November 10 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 More sharing options...
Manuel_GT Posted November 11 Author Share Posted November 11 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 More sharing options...
Eutanasio Posted November 11 Share Posted November 11 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 More sharing options...
Manuel_GT Posted November 12 Author Share Posted November 12 Hola @Eutanasio No me expliqué bien. En la configuración con php7.4 funciona todo como siempre. Es en la de 8.1 en la que me da los segfaults xdebug. Pero vamos, al parecer es un problema conocido. Mantendré mi versión de desarrollo en 7.4 hasta que lo solucione, pero el despliegue lo haré ya en 8.1 https://bugs.xdebug.org/view.php?id=2271 Gracias Link to comment Share on other sites More sharing options...
alfonsots Posted November 21 Share Posted November 21 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now