【问题标题】:how to know "how much storage does sessions vars" occupies in php如何知道“会话变量有多少存储空间”在php中占用
【发布时间】:2013-06-07 17:14:38
【问题描述】:

我有一个几乎包含 10-15 个会话变量的项目。 所以现在我想知道它们占据了多少尺寸,但我从来没有找到办法...... 那么如何知道它们占用了多少空间。? 要不然 影响..的因素有哪些? 在最好的,平均的,最坏的情况下..? 如果是会话多维数组呢?

如果没有可能知道这占用了多少空间..?如何减少?

<?php

session_start();

/*
if(isset($_SESSION['processing'])){
    if($_SESSION['processing']==1)
    {
    $_SESSION['processing']=0;
    }
    else
        {
            header('Location: search1.php');
        }
}
else
{
header('Location: search1.php');
}
*/





if($_SESSION['error']==0)
{
    if(isset($_SESSION['tresults']))
    {
        $text_results=$_SESSION['tresults'];
        if ($text_results<100)
        {   
            $_SESSION['error']=5;
        }
        else 
        {

            //sufficient results
        }
     } //      if no result was found
}
//$_SESSION['tresults']=0;






$bannedkeywords =  array("long list of keywords");

if(isset($_SESSION['searchedquery']))
{
$string=$_SESSION['searchedquery'];
}   
else
{
$string="something";
}   

$encode = array(
    '/(\d+?)\.(\d+?)/' => '\\1DOT\\2',
    '/(\d+?),(\d+?)/' => '\\1COMMA\\2',
    '/(\d+?)-(\d+?)-(\d+?) (\d+?):(\d+?):(\d+?)/' => '\\1DASH\\2DASH\\3SPACE\\4COLON\\5COLON\\6'
);


foreach ($encode as $regex => $repl) {
    $string = preg_replace($regex, $repl, $string);
}
preg_match_all('/\w+/', $string, $matches);
$decode = array(
    'search' =>  array('DOT', 'COMMA', 'DASH', 'SPACE', 'COLON'),
    'replace' => array('.',   ',',     '-',    ' ',     ':'    )
);
foreach ($matches as $k => $v) {
    $matches[$k] = str_replace($decode['search'], $decode['replace'], $v);
}
$bquery=count($matches, COUNT_RECURSIVE);
$bquery=$bquery-1;

$result = array_udiff($matches[0], $bannedkeywords, 'strcasecmp');

print_r($result);


$aquery=count($result, COUNT_RECURSIVE);


if($aquery==$bquery)
{
//query is clean 

}
else
{

$_SESSION['error']=6;
}



if(!isset($_SESSION['searched']['one']))
{
$_SESSION['searchednumber']=0;
$_SESSION['searched']['one']=Array();
$_SESSION['searched']['two']=Array();
$_SESSION['searched']['three']=Array();
$_SESSION['searched']['four']=Array();
$_SESSION['searched']['five']=Array();

$_SESSION['searched']['six']=Array();
$_SESSION['searched']['seven']=Array();
$_SESSION['searched']['eight']=Array();
$_SESSION['searched']['nine']=Array();
$_SESSION['searched']['ten']=Array();
}
else
{
$_SESSION['searchednumber']=$_SESSION['searchednumber']+1;
}

$compare=$matches[0];

foreach ($_SESSION['searched']['one'] as $k => $v)
{

$compare[0] = array_udiff($compare[0], $_SESSION['searched'][$k], 'strcasecmp');


}

$n=$_SESSION['searchednumber'];

        $p=$n%10;

$_SESSION['searched'][$p]=$compare[0];
echo "going well";
print_r($compare);

?>

谢谢你... :)

【问题讨论】:

标签: php session


【解决方案1】:

“存储”是指脚本运行时的内存还是脚本写入后的磁盘空间?

使用 ram,它们不会比任何其他变量多。

至于磁盘,它们将获取与您放入其中一样多的数据。您可以获取session_save_path()(如果它为空白,php 默认为您的系统临时目录,您可以使用sys_get_temp_dir() 获取)并亲自查看它们。它们通常具有名称sess_[SESSION ID HERE](我在我们的开发服务器上的当前会话文件名为sess_d22ivcfi1nqqob3gm7v7b1m7sdtabja8)。您也可以调用session_encode() 来获取写入会话文件的字符串。其中的 strlen 将与文件大小(以字节为单位)相同。

<?php
//get the session id
$sessionID = session_id();

//get the session path
$sessionPath = session_save_path();

//if no path set in php.ini, defaults to temp directory
if($sessionPath == ''){
    $sessionPath = sys_get_temp_dir();
}

//build the session path string
$sessionFilename = $sessionPath.'/sess_'.$sessionID;

//display the session size
var_dump(filesize($sessionFilename));

//get the session encoded as a string
$tmp = session_encode();
//output the size
var_dump(strlen($tmp));

【讨论】:

  • 谢谢...好吧,我在优化代码时遇到了问题,这样我就可以减轻服务器上的一些负担,该怎么做?
猜你喜欢
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2013-08-06
  • 2018-05-29
相关资源
最近更新 更多