2012-02-01 18 views
5

Vì vậy, tôi có một đối tượng đọc một tập tin từ đĩa gnugpg nó xuất hiện để luôn luôn tạo ra một vòng chìa khóa gnugpg trong một thư mục nhà.Có cách nào để giữ một đối tượng php trong bộ nhớ để tránh đọc và đọc đĩa không?

Tôi muốn tránh phải tải đối tượng này mỗi khi tập lệnh php được gọi từ apache.

là có để có một đối tượng php ở lại trong bộ nhớ?

+5

'apc',' memcache', 'memcached',' shmop', miễn là có thể tuần tự hóa. – Wrikken

+0

@Wrikken bạn có thể muốn thêm xcache, bất kỳ bộ nhớ cache opcode nào là một ứng cử viên tốt –

+0

wincache nếu bạn đang sử dụng máy chủ cửa sổ –

Trả lời

3

Nếu đó là một đối tượng nhỏ mà không mất nhiều bộ nhớ và là serializable bạn chỉ có thể lưu nó trong phiên:

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

và sau đó lấy đối tượng đó bằng cách gọi

getSessionObject('gnugpg_key_ring'); 

Tuy nhiên không phải tất cả các đối tượng luôn được tuần tự hóa nếu đối tượng giữ một tập tin xử lý cho một tập tin mở, mà sẽ cần phải có một số mã thêm để đóng tập tin khi đối tượng được serialized và sau đó mở lại các tập tin khi đối tượng đã được unserialized.

Nếu đối tượng lớn, thì bạn nên sử dụng công cụ lưu bộ nhớ đệm thích hợp như được ghi nhớ để lưu trữ đối tượng được tuần tự hóa, thay vì phiên.

+0

Cảm ơn bạn đã nhập liệu Tôi sẽ xem xét tất cả những điều này. – MrNemus

Các vấn đề liên quan