martes, 31 de mayo de 2011

Instalando Memcache para PHP 5.3.5 en Windows 7

Lo primero que se necesita es una copia de memcache para Windows. Al parecer es posible descargar el código fuente y compilarlo usando C++ con un conocimiento básico del proceso pero este no es mi caso, así que, debí seguir buscando y encontré esta: CouchBase, que, al parecer, tiene instaladores de un Memcached Server pero necesita registrarse para descargarlo, no me gusta dar mis datos para realizar acciones tan simples (por eso este Blog no necesita registro o acceso de ningún tipo). Siguiendo en la búsqueda encontré la página Jellycan Code en la que, al día de hoy, está la versión 1.2.6 de memcache que realmente es vieja si la versión actual es 1.4.5 pero está a la mano veremos como me va.

Tras descargar (realmente no es necesario) el binario para win32 de la página de Jellycan Code y descomprimirlo la sorpresa es instantánea, solo hay un archivo "memcached.exe", sin ayuda o README de ningún tipo, lo que me llevó a jugar un rato con el archivo, sus parámetros y a leer un poco.
En la misma página vi una referencia a un MemCacheD Manager resultó una opción simple y gráfica de administrar mi servicio de memcache incluso se puede hacer de forma remota, así que lo tomaré como base:

Descargar MemCacheD Manager (al momento la versión es 1.0.3.0, en adelante MCDM) e instalarlo, los pasos son muy simples no hay mucho que seleccionar pues simplemente descomprime sus archivos.
Ejecutar MCDM como administrador, en Win7: oprimir la tecla "windows", escribir "memcached" (o lo necesario para que aparezca seleccionado MCDM) y las teclas Shift+Ctrl+ENTER para lanzarlo como administrador.

La interface es muy simple, hay tan poco que decir que voy a poner una imágenes con cada paso para que el post se vea interesante.


Server name: es la IP, dominio o nombre del servidor a administrar, en mi caso es mi equipo actual.
User Name, Pasword, Default Instalation Path no son necesarios ya que es mi equipo local.


De momento no cambié la configuración por defecto del servicio así que, tras 5 minutos, está listo el servidor memcache. El único problema que se presentó fue que la primera vez no ejecuté MCDM como administrador y el servicio no pudo iniciar.

Ahora se puede ver el estado del servidor en la pestaña "status":


Incluso si cierro el MCDM el servicio sigue corriendo, para detenerlo debo dar clic derecho sobre el nombre de la instacia que creé (Memcache) y de las opciones elijo "Stop service" y lo mismo con el servidor si quiero eliminarlo.

Instalar la extensión memcached para PHP es muy simple, solo se descarga la versión correcta para el sistema desde php.net/pierre/ en mi caso, siguiendo el post anterior en donde instalé y configuré mi sistema actual descargo http://downloads.php.net/pierre/php_memcache-2.2.6-5.3-nts-vc9-x86.zip, el dll contenido se descomprime en la carpeta "ext" de php y el "php.ini" se modifica agregando la línea:
[PHP_APC]
extension=php_memcache.dll
Se reinicia el IIS y se verifica que la extensión se ha cargo correctamente.

Es hora de probar la conexión con el servidor Memcached, para eso es necesario un archivo .php con un código muy simple.
echo "<pre>";

$cache = new Memcache();

// Mi servidor local por el puerto seleccionado
$cache->connect( 'localhost', 11211 ) 
OR 
die ( "ERROR: Al conectarse con el servidor Memcached.");


echo "Conectado con el servidor: " . $cache->getVersion( ) . "\n";

// Obtener el objeto guardado (si hay tal)
$datos = $cache->get( 'llave_unica' );

if( $datos ) {
 echo "Datos cargados desde el caché " . date( "Y-m-d H:i:s" ) . ":\n";
 var_dump( $datos );
}
else {
 $obj = new stdClass ( );
 $inicio = date( "Y-m-d H:i:s" );
 $fin = date( "Y-m-d H:i:s", strtotime( "+30 SECOND" ) );
 $obj->attr = array( 'inicio', $inicio, "fin", $fin, 'datos', 'Otras cosas' );

 // Almacenar un objeto de prueba
 $cache->set( 'llave_unica', $obj, false, 30 )
 OR
 die ( "ERROR: No se puede almacenar los datos." );
 
 echo "Almacenando datos por 30 segundos " . $inicio . "\n";
 var_dump( $obj );
}

echo "</pre>";
La salida sería algo como:
Conectado con el servidor: 1.2.6
Almacenando datos por 30 segundos 2011-06-01 00:31:47

object(stdClass)[2]
  public 'attr' => 
    array
      0 => string 'inicio' (length=6)
      1 => string '2011-06-01 00:31:47' (length=19)
      2 => string 'fin' (length=3)
      3 => string '2011-06-01 00:32:17' (length=19)
      4 => string 'datos' (length=5)
      5 => string 'Otras cosas' (length=11)

Y la instalación ha terminado.

* Como ayuda a Wilfo que tiene "wampserver 2.0i" el servicio Memcache se instala de la misma forma, el problema, no solo para él, aparece en el momento de encontrar las extensiones correctas, primero se debe saber el tipo de compilación de PHP que se tiene, eso se puede saber usando la función phpinfo(). para wamp2.0i sería:
PHP Extension Build: API20090626,TS,VC6.

Se debe tener en cuenta principalmente la parte TS-VC6 que indica que las extensiones deben ser compiladas con VC6 y ser Thread Safe (si la extensión NO dice -nts- es -ts-).
Algunas extensiones se encuentra acá: http://downloads.php.net/pierre/, otras necesitan ser buscadas en repositorios antiguos.
Para wamp2.0i:
Memcachehttp://shikii.net/blog/downloads/php_memcache-cvs-20090703-5.3-VC6-x86.zip
APChttp://downloads.php.net/pierre/php_apc-3.1.5-5.3-vc6-x86.zip
Se agregan las dlls en la carpeta wamp\bin\php\php5.3.0\ext\ y las entradas en el archivo php.ini dentro de Apache: wamp\bin\apache\Apache2.2.11\bin\, se reinicia el servicio para que las cargue y los resultados deben ser los mismos.

1 comentario:

  1. Gracias por el manual, comentar que con php5.4.0 y superiores no funciona el modulo memcache en su version 2.2.6 y hay que descargar 3.0.6 en http://windows.php.net/downloads/pecl/releases/memcache/3.0.6/php_memcache-3.0.6-5.4-ts-vc9-x86.zip

    ResponderEliminar