Foros del Web » Programando para Internet » PHP » Configuración PHP »

[SOLUCIONADO] Instalar memcache

Estas en el tema de Instalar memcache en el foro de Configuración PHP en Foros del Web. Hola a todos, tengo un problema al instalar memcache para PHP, mi servidor es Debian y tengo la versión 5.4 de PHP instalada, pero en ...
  #1 (permalink)  
Antiguo 25/02/2013, 04:05
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Instalar memcache

Hola a todos, tengo un problema al instalar memcache para PHP, mi servidor es Debian y tengo la versión 5.4 de PHP instalada, pero en mi código he de utilizar las funciones de memcache, como memcache_connect etc, y he probado varias soluciones que he encontrado por la web googleando un poco, pero nada ha dado resultado, al mostrar el phpinf(); después de hacer un reload o restart del servidor apache y no aparece el modulo memcache instalado.

Alguien tiene una posible solución.

Gracias
  #2 (permalink)  
Antiguo 25/02/2013, 06:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

He probado a instalar todo con pecl, libmemcache-0.37, memcache-php5...
Si ejecuto /etc/init.d/memcache status dice "memcache is already running" pero en mi código php sigue sin funcionar, y el phpinfo() sigue sin mostrarme el modulo.
He mirado en mi archivo memcache.ini y tengo la línea "extension=memcache.so" y en mi archivo php.ini también.
Se me han acabado las ideas..

Nadie tiene idea de que puede estar pasando?
  #3 (permalink)  
Antiguo 25/02/2013, 09:22
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

He buscado mas información y he visto que con el comando php -m se podían ver los módulos que se compilaron junto con php y me devuelve los modulos memcache y memcached entre ellos.
Y también si ejecuto el comando:
Código BASH:
Ver original
  1. root@www:/php -i | grep "memcache"
  2.  
  3. additional .ini files parsed => /etc/php5/cli/conf.d/memcache.ini,
  4. /etc/php5/cli/conf.d/memcached.ini,
  5. memcache
  6. memcache support => enable
  7. memcache.allow_failover => 1 => 1
  8. memcache.chunk_size =>8192 => 8192
  9. memcache.default_port => 11211 => 11211
  10. memcache.hash_function => crc32 => crc32
  11. memcache.hash_category => standard => standard
  12. memcache.max_failover_attempts => 20 => 20
  13. memcached
  14. memcached support => enable
  15. libmemcached version => 0.40
  16. Registered save handlers => files user memcache memcached

Quizas esto pueda aportar algo mas de luz al asunto
  #4 (permalink)  
Antiguo 25/02/2013, 11:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años, 10 meses
Puntos: 845
Respuesta: Instalar memcache

Comprueba el php.ini que estas modificando, el que "levanta" el CLI no tiene porque ser(y seguramente no lo sea) el mismo que utiliza apache, verifica en el phpinfo la ruta del php.ini y asegúrate que estas modificando el .ini correcto.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 26/02/2013, 02:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

Gracias masterpuppet, solo tengo dos php.ini en el equipo, y en los dos he puesto la línea de la extension, he comprobado también que si ejecuto un fichero de prueba del memcache desde el cli se ejecuta, pero el mismo fichero si lo ejecuto desde el navegador no.. con lo cual creo que el problema es con apache, pero no se donde puede estar.
Se debe de copiar el modulo .so en alguna ubicación en concreto dentro del directorio de apache o de php?

Edito:
He comparado los dos fichero php.ini, el que esta en la carpeta apache2 y el que esta en cli y la única diferencia está en la línea de la memoria que se le permite usar a cada script, en el cli -1 en apache2 128MB

Edito:
Si introduzco en cli:
Código BASH:
Ver original
  1. > php -i
  2.  
  3. Build Date => Aug  6 2012 20:06:03
  4. Server API => Command Line Interface
  5. Virtual Directory Support => disabled
  6. Configuration File (php.ini) Path => /etc/php5/cli
  7. Loaded Configuration File => /etc/php5/cli/php.ini
  8. Scan this dir for additional .ini files => /etc/php5/cli/conf.d
  9. Additional .ini files parsed => /etc/php5/cli/conf.d/memcache.ini,
  10. /etc/php5/cli/conf.d/memcached.ini,
  11. /etc/php5/cli/conf.d/pdo.ini,
  12. /etc/php5/cli/conf.d/suhosin.ini
  13. ...
  14. ...
  15. memcache
  16.  
  17. memcache support => enabled
  18. Active persistent connections => 0
  19. Version => 2.2.5
  20. Revision => $Revision: 1.111 $
  21.  
  22. Directive => Local Value => Master Value
  23. memcache.allow_failover => 1 => 1
  24. memcache.chunk_size => 8192 => 8192
  25. memcache.default_port => 11211 => 11211
  26. memcache.default_timeout_ms => 1000 => 1000
  27. memcache.hash_function => crc32 => crc32
  28. memcache.hash_strategy => standard => standard
  29. memcache.max_failover_attempts => 20 => 20
  30.  
  31. memcached
  32.  
  33. memcached support => enabled
  34. Version => 1.0.2
  35. libmemcached version => 0.40
  36. Session support => yes
  37. igbinary support => no

Pero si llamo a la página web de con phpinfo() no devuelve la segunda parte donde pone la versin de memcache.

Y si ejecuto una web de ejemplo con memcache desde cli:
Código BASH:
Ver original
  1. >php5 memcache.php
  2.  
  3. Server's version: 1.4.5<br/>
  4. Store data in the cache (data will expire in 10 seconds)<br/>
  5. Data from the cache:<br/>
  6. object(stdClass)#3 (2) {
  7.  ["str_attr"]=>
  8.  string(4) "test"
  9.  ["int_attr"]=>
  10.  int(123)
  11. }
  12. done

Pero si ejecuto la misma página desde el navegador obtengo lo siguiente:

Fatal error: Call to undefined function memcache_connect() in /var/www/memcache.php on line 8

Última edición por AdRii; 26/02/2013 a las 06:46
  #6 (permalink)  
Antiguo 26/02/2013, 10:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años, 6 meses
Puntos: 2135
Respuesta: Instalar memcache

Pues evidentemente hay un problema si el phpinfo() no te devuelve la información del memcache es porque no la esta cargando, revisa el error_log de apache, verifica si no esta imprimiendo algún error ahí por lo cual esta "brincando" esa extensión.

Saludos.
  #7 (permalink)  
Antiguo 26/02/2013, 10:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

El error que me devuelve en el error.log cuando reinicio el servicio es el siguiente:

Código Error:
Ver original
  1. [Tue Feb 26 17:07:29 2013] [notice] caught SIGTERM, shutting down
  2. [Tue Feb 26 17:07:30 2013] [warn] module php5_module is already loaded, skipping
  3. PHP Warning:  PHP Startup: Unable to load dynamic library '/etc/apache2/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so' - /etc/apache2/php/lib$
  4. PHP Warning:  PHP Startup: Unable to load dynamic library '/etc/apache2/php/lib/php/extensions/no-debug-non-zts-20100525/memcached.so' - /etc/apache2/php/li$
  5. PHP Warning:  PHP Startup: Unable to load dynamic library '/etc/apache2/php/lib/php/extensions/no-debug-non-zts-20100525/pdo.so' - /etc/apache2/php/lib/php/$
  6. PHP Warning:  PHP Startup: Unable to load dynamic library '/etc/apache2/php/lib/php/extensions/no-debug-non-zts-20100525/suhosin.so' - /etc/apache2/php/lib/$
  7. [Tue Feb 26 17:07:30 2013] [notice] Apache/2.2.16 (Debian) PHP/5.4.11 configured -- resuming normal operations

Pone que no encuentra el archivo .so, pero eso ya me lo imaginaba..
He mirado el extension_dir en el php.ini y esta la linea comentada, tanto en el del cli como en el de apache, pero al ejecutar el php -i desde el cli me muestra que el extension_dir es otro diferente a este que esta poniendo en el error.log de apache, deberia de cambiarlo?? en caso afirmativo, basta con poner la ruta de ese que aparece en cli en el extension_dir del php.ini de apache??
  #8 (permalink)  
Antiguo 26/02/2013, 10:30
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años, 10 meses
Puntos: 845
Respuesta: Instalar memcache

Modifica el path en el .ini o bien crea un symlink al directorio de extensiones del cli.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 26/02/2013, 10:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

He modificado el extension_dir dentro de /etc/php5/apache2/php.ini , y ahora el error que me devuelve es el siguiente:
Código Error:
Ver original
  1. [Tue Feb 26 17:17:40 2013] [notice] caught SIGTERM, shutting down
  2. [Tue Feb 26 17:17:41 2013] [warn] module php5_module is already loaded, skipping
  3. PHP Warning:  PHP Startup: memcache: Unable to initialize module\nModule compiled with module API=20090626\nPHP    compiled with module API=20100525\nThese options need to match\n in Unknown on line 0
  4. PHP Warning:  PHP Startup: memcached: Unable to initialize module\nModule compiled with module API=20090626\nPHP    compiled with module API=20100525\nThese options need to match\n in Unknown on line 0
  5. [Tue Feb 26 17:17:41 2013] [notice] Apache/2.2.16 (Debian) PHP/5.4.11 configured -- resuming normal operations

Que quiere decir con eso?
  #10 (permalink)  
Antiguo 26/02/2013, 11:08
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años, 10 meses
Puntos: 845
Respuesta: Instalar memcache

El problema es que las versiones del API con las cuales se ha compilado PHP y las extensiones no coinciden, que versión de PHP están ejecutando tanto el cli(php -v) como en apache ?, como has instalado PHP ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 26/02/2013, 12:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años, 6 meses
Puntos: 2135
Respuesta: Instalar memcache

Yo creo te va a tocar recompilar las extensiones contra la versión de PHP que tienes para que las puedas cargar correctamente.
  #12 (permalink)  
Antiguo 26/02/2013, 17:43
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

La versión de PHP es la 5.3.7 lo que me devuelve con el phpinfo() y la versión de memcache es la 2.2.7.
He instalado primero PHP, pero lo he tenido que recompilar después por que en el comando de configuración inicial no había indicado la línea de --with-config-files-scan-dir para cargar donde está el memcache.ini
La línea de configuración con la que instalé PHP es la siguiente:

--with-config-file-path=/etc/php5/apache2 --with-config-files-scan-dir=/etc/php5/apache2/conf.d --with-mysql ...

Y luego instalé memcache, me descargué la última versión estable del sitio de pecl la descomprimí después ./configure y make && make install
Por último quité el comentario de la línea extension=memcache.so

En el caso de que tenga que recompilar para poder utilizar memcache con PHP como tendría que hacerlo exactamente, ya que llevo dos días dandole vueltas a la cabeza sin encontrar una solución y me tiene loco.
  #13 (permalink)  
Antiguo 26/02/2013, 17:50
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años, 10 meses
Puntos: 845
Respuesta: Instalar memcache

Es que el log que muestras dice PHP 5.4.11, de todas formas, no puedes eliminar lo que tienes e instalar vía synaptic ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #14 (permalink)  
Antiguo 27/02/2013, 03:26
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

En aquel momento no me encontraba con el servidor delante, la versión de php que muestra por cli es la 5.3.3-7 y la de apache la 5.4.11
He probado a desinstalar php5-dev y volverlo a instalar, y después desinstalar también memcache (pecl uninstall memcache) y volverlo a instalar para que se recompile con la nueva API, pero no hay forma, he mirado con el comando (strings -f *.so | grep API en la ruta de la carpeta que esta marcada en mi php.ini como extension_dir y me muestra que la API de esos .so es la API20090626 mientras que la api con la que se compilo php es la 20100525.

Puede ser que los nuevos .so se hayan localizado en una nueva ruta y tenga que cambiar el extension_dir a la ruta con los nuevos .so compilados con la misma API de php??

Si ejecuto un find, para buscar todos los memcache.so del sistema tengo lo siguiente:

Código BASH:
Ver original
  1. root@wwwjm:/# find . -iname "memcache.so"
  2. ./usr/src/memcache-2.2.6/.libs/memcache.so
  3. ./usr/src/memcache-2.2.6/modules/memcache.so
  4. ./usr/lib/php5/20090626+lfs/memcache.so
  5. ./usr/local/src/memcache-2.1.2/.libs/memcache.so
  6. ./usr/local/src/memcache-2.1.2/modules/memcache.so
  7. ./usr/local/src/memcache-2.2.5/.libs/memcache.so
  8. ./usr/local/src/memcache-2.2.5/modules/memcache.so

Todos son versiones que me descargu¡e con wget, excepto la de ./usr/lib/php5/20090626+lfs que es donde de momento apunta el extension_dir de mi php.ini

Como puedo hacer para descargarme la una version de memcache, y recompilarla usando la API 20100525???

Última edición por AdRii; 27/02/2013 a las 03:35
  #15 (permalink)  
Antiguo 27/02/2013, 09:39
 
Fecha de Ingreso: agosto-2008
Mensajes: 96
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Instalar memcache

Buenas, ya he conseguido solucionar el problema.

Dejo aquí los los pasos que he seguido por si a alguien en el futuro le pasa algo parecido y hace una búsqueda por el foro:

- Lo primero me asegure de la versión de API con la que PHP estaba recompilado.
- Desinstalé memcache (percl uninstall memcache).
- Descargué de nuevo memcache la última versión estable, en mi caso 2.2.7
- Ejecuté phpize, pero el que se encontraba dentro del directorio bin de mi apache, y no el que por defecto se me estaba ejecutando antes. (En este punto ya se puede comprobar como la API es la que nosotros queremos usar).
- Utilicé el comando ./configure --with-php-config="ruta de mi archivo php-config" (Este también tiene que se el del php que queréis utilizar, en mi caso estaba también en la carpeta de apache)
Por ultimo make && make install
Y se instala la extensión de memcache recompilada para la API que tenemos compilado PHP.
-/etc/init.d/apache2 restart

Gracias a los que me habéis ayudado a encontrar la solución.
  #16 (permalink)  
Antiguo 27/02/2013, 11:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años, 6 meses
Puntos: 2135
Respuesta: Instalar memcache

Excelente, ahora como tip, siempre trata o intenta al menos tener la misma versión de PHP tanto como para CLI, como para el WebServer, así te vas a evitar muchos dolores de cabeza

Etiquetas: php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:40.