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;
  }

Design web agency 1max2web   NTIC web agency 1max2web