ca88编程php session_start()出错原因分析及缓慢解决方

作者:ca88编程

正文实例陈说了php模仿asp Application对象在线人数计算达成方式。分享给大家供大家参照他事他说加以考察。具体贯彻格局如下:

 

荒谬提醒: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

正文实例呈报了PHP中Memcache操作类及用法。分享给大家供大家参谋。具体深入分析如下:

复制代码 代码如下:

 代码如下

原因:在session_start()在此之前倘若有出口内容,会出错,

复制代码 代码如下:

/*
用法:
application('key','value'); //设置 key=value
$value = application('key'); //获取 key的值
*/
 
function application()
{
 $args = func_get_ca88编程,args(); //获取输入参数
 if (count($args) >2 || count($args) < 1) return;
 $ssid = session_id(); //保存当前session_id
 session_write_close(); //甘休当前session
 ob_start(); //禁止全局session发送header
 session_id("xxx"); //注册全局session_id
 session_start(); //开启全局session
 $key = $args[0];
 if (count($args) == 2) //假如有首个参数,那么表示写入全局session
 {
  $re = ($_session[$key] = $args[1]);
 }
 else // 如果独有三个参数,那么重临该参数对应的value
 {
  $re = $_session[$key];
 }
 session_write_close(); //甘休全局session
 session_id($ssid); //重新注册下面被中止的非全局session
 session_start(); //重新开启
 ob_end_clean(); //遗弃刚刚由于session_start产生的部分header输出
 return $re; 
}

用法:
application('key','value'); //设置 key=value
$value = application('key'); //获取 key的值
*/

消除办法:在session_start()在此之前增进ob_start();

<?php 
    /*  内部存储器缓存管理 
    */
class Yc_Memcache{ 
 private $memcache=null;  
  
 public function __construct(){ 
 } 
 /** 
    * 连接数据库 
    * 
    * @param mixed $host 
    * @param mixed $port 
    * @param mixed $timeout 
    */
 public  function connect($host,$port=11211,$timeout=1){ 
  if(!function_exists(memcache_connect)){ return FALSE;} 
  $this->memcache=@memcache_connect($host,$port,$timeout); 
  if(emptyempty($this->memcache)){ 
   return FALSE; 
  }else{ 
   return TRUE; 
  } 
 } 
    /** 
    * 存放值 
    * 
    * @param mixed $key 
    * @param mixed $var 
    * @param mixed $flag   默以为0不优惠扣  压缩状态填写:MEMCACHE_COMPRESSED 
    * @param mixed $expire  默许缓存时间(单位秒) 
    */
 public function set($key,$var,$flag=0,$expire=10){ 
  
  $f=@memcache_set($this->memcache,$key,$var,$flag,$expire); 
  if(emptyempty($f)){ 
   return FALSE; 
  }else{ 
   return TRUE; 
  } 
 } 
    /** 
    * 抽出相应的key的value 
    * 
    * @param mixed $key 
    * @param mixed $flags 
    * $flags 假若此值为1表示通过体系化, 
    * 但未通过压缩,2标记压缩而未系列化, 
    * 3申明压缩并且连串化,0申明未经过压缩和连串化 
    */
 public function get($key,$flags=0){ 
  $val=@memcache_get($this->memcache,$key,$flags); 
  return $val; 
 } 
 /** 
    * 删除缓存的key 
    * 
    * @param mixed $key 
    * @param mixed $timeout 
    */
 public function delete($key,$timeout=1){ 
  $flag=@memcache_delete($this->memcache,$key,$timeout); 
  return $flag; 
 } 
    /** 
    * 刷新缓存但不自由内部存款和储蓄器空间 
    * 
    */
 public function flush(){ 
  memcache_flush($this->memcache); 
 } 
    /** 
    * 关闭内部存款和储蓄器连接 
    * 
    */
 public function close(){ 
  memcache_close($this->memcache); 
 } 
    /** 
    * 替换对应key的value 
    * 
    * @param mixed $key 
    * @param mixed $var 
    * @param mixed $flag 
    * @param mixed $expire 
    */
 public function replace($key,$var,$flag=0,$expire=1){ 
  $f=memcache_replace($this->memcache,$key,$var,$flag,$expire); 
  return $f; 
 } 
    /** 
    * 开启大值自动压缩 
    * 
    * @param mixed $threshold 单位b 
    * @param mixed $min_saveings 默许值是0.2意味着60%压缩率 
    */
 public function setCompressThreshold($threshold,$min_saveings=0.2){ 
  $f=@memcache_set_compress_threshold($this->memcache,$threshold,$min_saveings); 
  return $f; 
 } 
    /** 
    * 用于获取三个服务器的在线/离线状态 
    * 
    * @param mixed $host 
    * @param mixed $port 
    */
 public function getServerStatus($host,$port=11211){ 
  $re=memcache_get_server_status($this->memcache,$host,$port); 
  return $re; 
 } 
    /** 
    * 缓存服务器池中持有服务器总括新闻 
    * 
    * @param mixed $type 期望抓取的总计消息项目,能够选用的值有{reset, malloc, maps, cachedump, slabs, items, sizes} 
    * @param mixed $slabid  cachedump命令会全盘占用服务器一般用于 比较严峻的调 
    * @param mixed $limit 从服务端获取的实业条数 
    */
 public function getExtendedStats($type='',$slabid=0,$limit=100){ 
  $re=memcache_get_extended_stats($this->memcache,$type,$slabid,$limit);
  return $re; 
 } 

  
/***********测试区域********************/
$mem=new Yc_Memcache(); 
  
$f=$mem->connect('125.64.41.138',12000); 
var_dump($f); 
if($f){ 
// $mem->setCompressThreshold(2000,0.2); 
 $mem->set('key','hello',0,30); 
//        var_dump($mem->delete('key1')); 
 // $mem->flush(); 
// var_dump($mem->replace('hao','d')); 
// echo $mem->get('key'); 
 echo $mem->getServerStatus('127.0.0.1',12000); 
 echo $mem->get('key'); 
 echo '<pre>'; 
 print_r($mem->getExtendedStats()); 

  
?>

仰望本文所述对大家的php程序设计有所帮忙。

function application()
{
 $args = func_get_args(); //获取输入参数
 if (count($args) >2 || count($args) < 1) return;
 $ssid = session_id(); //保存当前session_id
 session_write_close(); //甘休当前session
 ob_start(); //禁止全局session发送header
 session_id("xxx"); //注册全局session_id
 session_start(); //开启全局session
 $key = $args[0];
 if (count($args) == 2) //要是有第一个参数,那么表示写入全局session
 {
  $re = ($_session[$key] = $args[1]);
 }
 else // 假使唯有三个参数,那么重返该参数对应的value
 {
  $re = $_session[$key];
 }
 session_write_close(); //截止全局session
 session_id($ssid); //重新注册上面被中断的非全局session
 session_start(); //重新开启
 ob_end_clean(); //甩掉刚刚由于session_start爆发的一些header输出
 return $re;
}

index.php 

企望本文所述对大家的PHP程序设计具备援救。

本文由ca88发布,转载请注明来源

关键词: ca88网址