<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
do {
    /* Lit une IP et son CAS */
    $ips = $m->get('ip_block', null, $cas);
    /* Si l'IP n'existe pas encore, on la crèe et on fait un
       ajout atomique qui va échouer si l'IP a déjà été ajoutée */
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $ips = array($_SERVER['REMOTE_ADDR']);
        $m->add('ip_block', $ips);
    /* Sinon, on ajoute l'IP à la liste, et on la stocke avec l'opération
       compare-and-swap et le token, qui va échouer si la liste a été mise à jour */
    } else { 
        $ips[] = $_SERVER['REMOTE_ADDR'];
        $m->cas($cas, 'ip_block', $ips);
    }   
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>