Buscar en este blog

lunes, 10 de diciembre de 2007

PHP. variables en memoria compartida

Las variables globales han desparecido. Pero con las Funciones Semáforo y de memoria compartida podemos almacenar variables que sean disponibles desde cualquier script y que conserven su valor fuera de la vida del script.

Yo recomiendo el uso de base de datos y/o el uso de archivos de texto o incluso script que contienen arrays de información.

Pero esto de la variables en memoria compartida puede ser útil, ahí va el ejemplo:

(lo he metido en un objeto para verlo de una forma más clara)


/************ class MemVar ***********************/
class MemVar {

var $identifier="";
var $key = "";

function MemVar( $_key ) {

$this->$key = $_key;

$this->$identifier = @shm_attach( $_key );
}

function setValue( $_keyvar , $_valor ) {
@shm_put_var( $this->$identifier , $_keyvar , $_valor );
}

function getValue( $_keyvar ) {
return @shm_get_var( $this->$identifier , $_keyvar );
}

function eliminar( ) {
@shm_remove( $this->$identifier );
}

function close( ) {
@shm_detach( $this->$identifier );
}
}
/************ FIN class MemVar ***********************/

/* poner valor

$memvar = new MemVar( 100 );
$memvar->setValue( 1 , "valor de la variable en memoria compartida" );
echo "puesto valor";
$memvar->close();
*/

/* obtener valor

$memvar = new MemVar( 100 );
echo "valor = ".$memvar->getValue( 1 );
$memvar->close();
*/

2 comentarios:

Nicolás Palumbo dijo...

Realmente me resulto muy util tu tip, desconocia esas funciones. No sabes si elevan mucho el consumo de recursos del servidor?. Muy bueno.

mugedoc dijo...

El acceso a memoria es muchísimo más rápido que el acceso a disco, pero claro ante un reinicio por una intervención en el servidor hay que recargar esas variables en la máquina.
Por ello recomiendo manejar parametros y configuraciones desde ficheros de properties o en bb.dd

De todas formas en ww.php.net tienes la información completa:
http://es2.php.net/manual/es/intro.sem.php

Ah, solo funciona en linux y unix, en windows olvidate!!!