Existuje způsob, jak udržet objekt php v paměti, aby se zabránilo disk čte a wirtes?

hlasů
5

Tak jsem si objekt, který čte soubor z disku gnugpg to vypadá, že vždy vytvořit gnugpg klíčenka v domovském adresáři.

Chci se vyhnout nutnosti zavést tento objekt pokaždé, když php skript je volána z apache.

Je tam daleko, že mají pobyt php objektu v paměti?

Položena 02/02/2012 v 00:22
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Pokud se jedná o malý objekt, který nemá zabírají mnoho paměti a je serializable můžete prostě uložit jej v relaci:

function    getSessionObject($objectName, $params){

    $sessionObjectSerialized = getSessionVariable($objectName, FALSE);

    if($sessionObjectSerialized == FALSE){
        $sessionObjectSerialized = constructSessionObject($objectName, $params);
        setSessionVariable($objectName, $sessionObjectSerialized);
    }

    $sessionObject = unserialize($sessionObjectSerialized);

    return $sessionObject;
}


function    constructSessionObject($objectName, $params = array()){

    switch($objectName){

        case('gnugpg_key_ring'):{
            $gnugpgKeyRing = getGNUPGKeyRing(); //do whatever you need to do to make the keyring.
            return serialize($countryScheme);
        }

        default:{
            throw new UnsupportedOperationException("Unknown object name objectName, cannot retrieve from session.");
            break;
        }
    }
}

//Call this before anything else
function initSession(){
    session_name('projectName');
    session_start();
}

function setSessionVariable($name, $value){
    $_SESSION['projectName'][$name] = $value;
}

function getSessionVariable($name, $default = FALSE){

    if(isset($_SESSION['projectName'])){
        if(isset($_SESSION['projectName'][$name])){
            $value = $_SESSION['projectName'][$name];
        }
    }
    return $default;
}

a pak získat tento objekt voláním

getSessionObject('gnugpg_key_ring');

Avšak ne všechny objekty jsou vždy serializable například v případě, že objekt má popisovač souboru k otevření souboru, který by musel mít nějaké extra kód pro zavření souboru, když je objekt serializovat a znovu otevřít soubor, kdy byl objekt unserialized.

Pokud je objekt velký, pak byste měli být lépe používat správné ukládání do mezipaměti nástroj jako Memcached uložit serializovaný objekt, spíše než relaci.

Odpovězeno 02/02/2012 v 02:08
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more