gpt4 book ai didi

php - 有没有办法将 php 对象保存在内存中以避免磁盘读取和写入?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:21 24 4
gpt4 key购买 nike

所以我有一个从磁盘 gnugpg 读取文件的对象,它似乎总是在主目录中创建一个 gnugpg key 环。

我想避免每次从 apache 调用 php 脚本时都必须加载此对象。

有没有办法让 php 对象留在内存中?

最佳答案

如果它是一个不占用太多内存且可序列化的小对象,您可以将其存储在 session 中:

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

然后通过调用检索该对象

getSessionObject('gnugpg_key_ring');

然而并不是所有的对象都是可序列化的,例如如果对象持有打开文件的文件句柄,则需要一些额外的代码来在对象被序列化时关闭文件,然后在对象被反序列化时重新打开文件。

如果对象很大,那么最好使用适当的缓存工具(如 memcached)来存储序列化对象,而不是 session 。

关于php - 有没有办法将 php 对象保存在内存中以避免磁盘读取和写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com