function cache_shm_get_cached_version ($id) { // Crée l'identifiant de la ressource $id = crc32 ($id); // pose le sémaphore $sem = sem_get ($id, 1); if (!is_resource($sem)) { // Nous n'avons pas le sémaphore // Le cache échoue return false; } if (!sem_acquire ($sem)) { // Nous n'avons pas le sémaphore // Le cache échoue sem_remove ($sem); return false; } // lecture du segment de mémoire $shm = shmop_open ($id, 'a', 0, 0); if (!$shm) { // impossible de lire le segment shm sem_release ($sem); sem_remove ($sem); return false; } $value = @unserialize (shmop_read ($shm, 0, shmop_size ($shm))); // Libération du segment de mémoire shmop_close ($shm); // effacement du sémaphore sem_release ($sem); sem_remove ($sem); return $value; } function cache_shm_cache ($id, $value) { // creation de l'identifiant $id = crc32 ($id); // Linearisation de la valeur $value = serialize ($value); $value_length = strlen ($value); //Pose du sémaphore de la ressource $sem = sem_get ($id, 1); if (!is_resource($sem)) { // erreur de sémaphore : on annule tout return false; } // Acquisition du sémaphore if (!sem_acquire ($sem)) { // impossible d'obtenir le sémaphore sem_remove ($sem); return false; } $shm = shmop_open($id, "c", 0664, $value_length); if (!$shm) { // Echec de l'ouverture sem_release ($sem); sem_remove ($sem); return false; } // Ecriture des données en mémoire shmop_write ($shm, $value, 0); // Libération du segment de mémoire shmop_close ($shm); // Libération du sémaphore et fin sem_release ($sem); sem_remove ($sem); return false; }