2012-02-01 5 views
5

तो मेरे पास एक ऑब्जेक्ट है जो डिस्क gnugpg से एक फ़ाइल पढ़ता है, यह हमेशा एक होम निर्देशिका में एक gnugpg कुंजी अंगूठी बनाने के लिए प्रतीत होता है।क्या डिस्क पढ़ने और गंदगी से बचने के लिए स्मृति में php ऑब्जेक्ट रखने का कोई तरीका है?

मैं इस ऑब्जेक्ट को लोड करने से बचाना चाहता हूं हर बार एक php स्क्रिप्ट को अपाचे से बुलाया जाता है।

क्या कोई PHP वस्तु स्मृति में रहने के लिए दूर है?

+5

'एपीसी', 'memcache',' memcached', 'shmop', जब तक इसकी धारावाहिक योग्य हो। – Wrikken

+0

@Wrikken आप xcache जोड़ना चाहते हैं, कोई भी ऑपोड कैश एक अच्छा उम्मीदवार –

+0

Wincache है यदि आप विंडोज सर्वर –

उत्तर

3

यह एक छोटी सी वस्तु है कि इतना स्मृति को नहीं ले करता है और serializable तुम सिर्फ सत्र में संग्रहीत कर सकता है:

getSessionObject('gnugpg_key_ring'); 

फोन करके

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

और फिर उस वस्तु को पुनः प्राप्त हालांकि सभी वस्तुओं हमेशा serializable उदाहरण नहीं हैं यदि ऑब्जेक्ट एक खुली फ़ाइल में फ़ाइल हैंडल रखता है, तो ऑब्जेक्ट को क्रमबद्ध करने पर फ़ाइल को बंद करने के लिए कुछ अतिरिक्त कोड होना आवश्यक होगा और ऑब्जेक्ट को अनियमित होने पर फ़ाइल को फिर से खोलें।

यदि ऑब्जेक्ट बड़ा है, तो आप सत्र के बजाए क्रमबद्ध ऑब्जेक्ट को स्टोर करने के लिए मेमकैच जैसे उचित कैशिंग टूल का उपयोग करना बेहतर होगा।

+0

पर हैं इनपुट के लिए धन्यवाद, मैं इन सब पर एक नज़र डालेगा। – MrNemus

संबंधित मुद्दे

 संबंधित मुद्दे