当前位置: 编程技术>php
本页文章导读:
▪利用Memcached在php下实现session机制 替换PHP的原生session支持
方法文件 session实现文件:memcachedsession.php 实现原理(也是PHP内部session的实现原理): 1.先判断客户端有没有sessionid, a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组.........
▪ThinkPHP中实例Model方法的区别说明
在TP中,我们可以用下面两种方法去创建一个数据表的映射对象(我暂时用到的) 第一种:$Test = D('Test') 第二种:$Test = new Model('Test') 虽然这两种都可以对数据进行select,insert,delete,udpate操作.........
▪PHP 数组基础知识小结
php函数有很多,需要时查询api。 代码如下: <?php /* #数组 没有限制大小:$arr[0]=1;$arr[1]=2; $arr=array("0","1");$list($num1,$num2)=$arr; array range(int low,int high[,int step]) low最小数,high最高数,step步长 int.........
[1]利用Memcached在php下实现session机制 替换PHP的原生session支持
来源: 互联网 发布时间: 2013-11-30
方法文件
session实现文件:memcachedsession.php
实现原理(也是PHP内部session的实现原理):
1.先判断客户端有没有sessionid,
a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组做session容器
b.如果客户端有sessionid,则利用这个sessionid去memcached里面查数据。
2.用户在页面执行过程中可以自行修改session容器里的session值
3.页面最后会把用户的session容器作为值,以用户的sessionid作为键,把这个键值对保存到
memcached里面
<?php
//memcached服务器连接地址
$_MEMCACHEAUTH = array(
'host' => 'localhost'
, 'port' => 11211
);
/*
获取一些初始化设置值
*/
$_SESSION_NAME = ini_get("session.name"); //sessionid的名称
$_SESSION_TIME = ini_get("session.cookie_lifetime"); //sessionid这个cookie的最大保存时间
$_SESSION_EXPIRE = ini_get("session.gc_maxlifetime"); //session键值对在memcached里面的过期时间
$_SESSION_MEMKEY = ""; //sessionid值
/*
自定义的_session_start()方法,替换PHP的原生session_start()方法
逻辑应该是比较清楚的
*/
function _session_start()
{
global $_SESSION_NAME, $_SESSION_TIME, $_SESSION_MEMKEY;
global $_SESSION;
global $_MEMCACHEAUTH, $_sessionmem;
$_sessionmem = memcache_connect($_MEMCACHEAUTH['host'], $_MEMCACHEAUTH['port']);
if ( empty($_COOKIE[$_SESSION_NAME]) )
{
$_SESSION_MEMKEY = md5( uniqid() );
setcookie($_SESSION_NAME, $_SESSION_MEMKEY , $_SESSION_TIME, "/");
$_SESSION = array();
}
else
{
$_SESSION_MEMKEY = $_COOKIE[$_SESSION_NAME];
$_SESSION = memcache_get($_sessionmem, $_SESSION_MEMKEY );
if ( $_SESSION === FALSE )
{
$_SESSION = array();
}
}
//注册一个handler,这个函数会在页面执行完的时候执行
register_shutdown_function("_session_save_handler");
}
/*
页面最后执行的方法,用于保存session值,以及关闭memcached连接
*/
function _session_save_handler()
{
global $_sessionmem;
global $_SESSION, $_SESSION_NAME, $_SESSION_EXPIRE, $_SESSION_MEMKEY;
memcache_set($_sessionmem, $_SESSION_MEMKEY, $_SESSION, 0, $_SESSION_EXPIRE);
memcache_close($_sessionmem);
}
?>
测试文件:
设置session值
<?php
/*
设置session值文件:session_set.php
*/
include_once "memcachedsession.php";
_session_start();
$_SESSION['a'] = time();
?>
获取session值
<?php
/*
获取session值文件:session_get.php
*/
include_once "memcachedsession.php";
_session_start();
function getsession()
{
echo $_SESSION['a'];
}
getsession();
?>
Memcached的缓冲应用还是非常不错滴,呵呵,,,
转载:jincon's 包 blog http://www.yi1.com.cn
session实现文件:memcachedsession.php
实现原理(也是PHP内部session的实现原理):
1.先判断客户端有没有sessionid,
a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组做session容器
b.如果客户端有sessionid,则利用这个sessionid去memcached里面查数据。
2.用户在页面执行过程中可以自行修改session容器里的session值
3.页面最后会把用户的session容器作为值,以用户的sessionid作为键,把这个键值对保存到
memcached里面
代码如下:
<?php
//memcached服务器连接地址
$_MEMCACHEAUTH = array(
'host' => 'localhost'
, 'port' => 11211
);
/*
获取一些初始化设置值
*/
$_SESSION_NAME = ini_get("session.name"); //sessionid的名称
$_SESSION_TIME = ini_get("session.cookie_lifetime"); //sessionid这个cookie的最大保存时间
$_SESSION_EXPIRE = ini_get("session.gc_maxlifetime"); //session键值对在memcached里面的过期时间
$_SESSION_MEMKEY = ""; //sessionid值
/*
自定义的_session_start()方法,替换PHP的原生session_start()方法
逻辑应该是比较清楚的
*/
function _session_start()
{
global $_SESSION_NAME, $_SESSION_TIME, $_SESSION_MEMKEY;
global $_SESSION;
global $_MEMCACHEAUTH, $_sessionmem;
$_sessionmem = memcache_connect($_MEMCACHEAUTH['host'], $_MEMCACHEAUTH['port']);
if ( empty($_COOKIE[$_SESSION_NAME]) )
{
$_SESSION_MEMKEY = md5( uniqid() );
setcookie($_SESSION_NAME, $_SESSION_MEMKEY , $_SESSION_TIME, "/");
$_SESSION = array();
}
else
{
$_SESSION_MEMKEY = $_COOKIE[$_SESSION_NAME];
$_SESSION = memcache_get($_sessionmem, $_SESSION_MEMKEY );
if ( $_SESSION === FALSE )
{
$_SESSION = array();
}
}
//注册一个handler,这个函数会在页面执行完的时候执行
register_shutdown_function("_session_save_handler");
}
/*
页面最后执行的方法,用于保存session值,以及关闭memcached连接
*/
function _session_save_handler()
{
global $_sessionmem;
global $_SESSION, $_SESSION_NAME, $_SESSION_EXPIRE, $_SESSION_MEMKEY;
memcache_set($_sessionmem, $_SESSION_MEMKEY, $_SESSION, 0, $_SESSION_EXPIRE);
memcache_close($_sessionmem);
}
?>
测试文件:
设置session值
代码如下:
<?php
/*
设置session值文件:session_set.php
*/
include_once "memcachedsession.php";
_session_start();
$_SESSION['a'] = time();
?>
获取session值
代码如下:
<?php
/*
获取session值文件:session_get.php
*/
include_once "memcachedsession.php";
_session_start();
function getsession()
{
echo $_SESSION['a'];
}
getsession();
?>
Memcached的缓冲应用还是非常不错滴,呵呵,,,
转载:jincon's 包 blog http://www.yi1.com.cn
[2]ThinkPHP中实例Model方法的区别说明
来源: 互联网 发布时间: 2013-11-30
在TP中,我们可以用下面两种方法去创建一个数据表的映射对象(我暂时用到的)
第一种:$Test = D('Test')
第二种:$Test = new Model('Test')
虽然这两种都可以对数据进行select,insert,delete,udpate操作,在数据验证上有很大的不同,
我们来看看效果,先创建一个 TestModel
class TestModel extends Model{
protected $_validate = array{
array('title','require','请输入标题',1),
array('content','require','请输入内容',1),
}
}
创建一个TestAction
class TestAction extends Action{
public function Dtest(){
$test = D('Test'); //第一种情况
$test = new Model('Test'); //第二种情况
if($test->Create()){
$test->Add();
}else{
$test->getError();
}
}
}
在运行的时候,大家会发现,用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);如果用第二种就没有了·····
第一种:$Test = D('Test')
第二种:$Test = new Model('Test')
虽然这两种都可以对数据进行select,insert,delete,udpate操作,在数据验证上有很大的不同,
我们来看看效果,先创建一个 TestModel
代码如下:
class TestModel extends Model{
protected $_validate = array{
array('title','require','请输入标题',1),
array('content','require','请输入内容',1),
}
}
创建一个TestAction
代码如下:
class TestAction extends Action{
public function Dtest(){
$test = D('Test'); //第一种情况
$test = new Model('Test'); //第二种情况
if($test->Create()){
$test->Add();
}else{
$test->getError();
}
}
}
在运行的时候,大家会发现,用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);如果用第二种就没有了·····
[3]PHP 数组基础知识小结
来源: 互联网 发布时间: 2013-11-30
php函数有很多,需要时查询api。
<?php
/*
#数组 没有限制大小:$arr[0]=1;$arr[1]=2; $arr=array("0","1");$list($num1,$num2)=$arr;
array range(int low,int high[,int step])
low最小数,high最高数,step步长
int array_unshift(array array,mixed vari) 数组前面插入
array_push 数组尾添加
array_shift 数组头部删除
array_pop 数组尾部删除
#定位数组
boolean in_array(mixed needle,array haystack,[,boolean strict])
boolean array_key_exists(mixed key,array array) 搜索关键键
array_search() 搜索关联数组值
array_keys()返回数组,包含所搜索的的所有键
array_values()返回数组所有值。
#遍历数组
mixed key(array array)
current(array array) 获取当前数组值
array each(array array) 返回当前键、值对
next(array array) 指向下一个
prev(array array) 移到前一个
reset(array array)移到第一个
end(array array)移到最后一个
#向函数传递数组值
boolean array_walk(array &array,callback function,[,mixed userdata])
#确定数组的大小及唯一性
integer count(array array[,int mode]) 类似sizeof()
array array_count_values(array array) 分组统计每个值出现的次数
array_unique() 删除重复值,保持唯一性
#排序
array_reverse()顺序逆置
array_flip() 对换键与值
void sort(array array[,int sort_flags])
sort_flgs{[SORT_NUMBERIC数值排序],[SORT_REGULAR 按ASCII排序],[SORT_STRING]}
asort()升序
rsort()逆序
arsort()逆序
natsort()自然排序
natcasesort()不区分大小写自然排序
ksort()键值排序
krsort()逆序键值排序
void usort(array array,callback function name) 用户自定义排序
#合并,拆分,结合,分解数组
array_merge_recursive() 合并
array_merge_combine() 追加
array_merge()连接到新数组
array_slice(array array,int offse[,int length]) 拆分
array_intersect()、array_intersect_assoc()数组交集
array_diff()、array_diff_assoc()差集
array_rand()、shuffle()随机数组
array_sum()求和
array_chunk 分成多维数组
*/
//创建0-20的偶数数组,2为步长
$even=range(0,20,2);
//打印数组
print_r($even);
//判断是否为数组
printf("this number is an array:%s<br/>",(is_array($even)?"true":"false"));
echo "<br>";
//数组头部添加子项,并打印
array_unshift($even,522,54);
print_r($even);
//定义一变量,然后在数组中搜索,存在时显示找到该变量。
$sa=522;
if(in_array($sa,$even)){
echo "find it $sa";
};
echo "<br/>";
//搜索数组关键键
if(array_key_exists(4,$even)){
echo $even[4]." exists.";
}
echo "<br/>";
print_r(array_values($even));
//遍历打印数组
while($key=key($even)){
echo "<br/>".$key;
next($even);
}
//统计数组大小
echo "<br/>";
echo count($even);
//排序
echo "<br>";
sort($even);
print_r($even);
?>
代码如下:
<?php
/*
#数组 没有限制大小:$arr[0]=1;$arr[1]=2; $arr=array("0","1");$list($num1,$num2)=$arr;
array range(int low,int high[,int step])
low最小数,high最高数,step步长
int array_unshift(array array,mixed vari) 数组前面插入
array_push 数组尾添加
array_shift 数组头部删除
array_pop 数组尾部删除
#定位数组
boolean in_array(mixed needle,array haystack,[,boolean strict])
boolean array_key_exists(mixed key,array array) 搜索关键键
array_search() 搜索关联数组值
array_keys()返回数组,包含所搜索的的所有键
array_values()返回数组所有值。
#遍历数组
mixed key(array array)
current(array array) 获取当前数组值
array each(array array) 返回当前键、值对
next(array array) 指向下一个
prev(array array) 移到前一个
reset(array array)移到第一个
end(array array)移到最后一个
#向函数传递数组值
boolean array_walk(array &array,callback function,[,mixed userdata])
#确定数组的大小及唯一性
integer count(array array[,int mode]) 类似sizeof()
array array_count_values(array array) 分组统计每个值出现的次数
array_unique() 删除重复值,保持唯一性
#排序
array_reverse()顺序逆置
array_flip() 对换键与值
void sort(array array[,int sort_flags])
sort_flgs{[SORT_NUMBERIC数值排序],[SORT_REGULAR 按ASCII排序],[SORT_STRING]}
asort()升序
rsort()逆序
arsort()逆序
natsort()自然排序
natcasesort()不区分大小写自然排序
ksort()键值排序
krsort()逆序键值排序
void usort(array array,callback function name) 用户自定义排序
#合并,拆分,结合,分解数组
array_merge_recursive() 合并
array_merge_combine() 追加
array_merge()连接到新数组
array_slice(array array,int offse[,int length]) 拆分
array_intersect()、array_intersect_assoc()数组交集
array_diff()、array_diff_assoc()差集
array_rand()、shuffle()随机数组
array_sum()求和
array_chunk 分成多维数组
*/
//创建0-20的偶数数组,2为步长
$even=range(0,20,2);
//打印数组
print_r($even);
//判断是否为数组
printf("this number is an array:%s<br/>",(is_array($even)?"true":"false"));
echo "<br>";
//数组头部添加子项,并打印
array_unshift($even,522,54);
print_r($even);
//定义一变量,然后在数组中搜索,存在时显示找到该变量。
$sa=522;
if(in_array($sa,$even)){
echo "find it $sa";
};
echo "<br/>";
//搜索数组关键键
if(array_key_exists(4,$even)){
echo $even[4]." exists.";
}
echo "<br/>";
print_r(array_values($even));
//遍历打印数组
while($key=key($even)){
echo "<br/>".$key;
next($even);
}
//统计数组大小
echo "<br/>";
echo count($even);
//排序
echo "<br>";
sort($even);
print_r($even);
?>
最新技术文章: