<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
do {
/* obtener la lista de direcciones IP y sus token */
$ips = $m->get('ip_block', null, $cas);
/* si la lista no existe aún, crear una y realizar
un añadido atómico que fallará si alguien ya añadió un valor */
if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
$ips = array($_SERVER['REMOTE_ADDR']);
$m->add('ip_block', $ips);
/* en caso contrario, añadir la IP a la lista y guardar vía comparar-e-intercambiar
con el token, que fallará si alguien ya actualizó la lista */
} else {
$ips[] = $_SERVER['REMOTE_ADDR'];
$m->cas($cas, 'ip_block', $ips);
}
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>