作者buganini (霸格尼尼)
看板PHP
标题Re: PHP 的 application 变数?
时间Thu Feb 8 01:57:36 2007
※ 引述《JoeHorn (狮子男)》之铭言:
: ※ 引述《PsMonkey (痞子军团团长)》之铭言:
: : 恩... 这是来自 Database 版的问题
: : 有人说,不知道 PHP 有像 JSP/ASP 的 application 层级的变数
: : 我大概查了一下,好像有 global 跟 static 这两个东西可以做到类似的事情?
: : 不过我本身不写 PHP 囧>
: : 所以还是上来问一下比较保险...
: : 还请各位大大指教 Orz
: 这页应该有比较接近的答案:
: http://www.php.net/manual/en/language.variables.scope.php
: PHP 支援:
: * global variable
: * static variable
: * normal(dynamic) variable
其实有想过
如果令session id为某定值
这样每个client存取到的session其实应该是同一个?
如果是这样就可以共用了
不过有些问题
1. session会在browser关掉重开的时候被清除,指定很长的timeout不知是否可行,
或有办法强制server忽略browser传来的clear request
2. session无法储存所有型态的资料,最近好像有几篇文有提到
像resource这种无法searialize的资料都不形
3. 这样就没有真正的session可用了...
也许可以先
$sid=session_id();
session_id('appvar');
session_start();
然後拿
$_SESSION[$sid]
来当session(超大的一个session file....)
这样不确定是否可行
session id可能会跑掉...
有必要的话...自己开cookie来存吧
这样的话$sid=session_id();可能要改成$sid=$_COOKIE['sid']; blahblahblah
4. 不知道一般session写入硬碟的时机是什麽
我猜测他可能会在connection closed的时候才写入
这样的话....在多人同时存取的时候
可能会发生资料不同步的情形
或者也可以自己用searialize(),unserialize()
然後自己读写档案当session
不过效率可能比较慢吧
而且要写入之後其他人才读的到
------
写到这里现在觉得如果能达成以下条件的话
自己写档案也许还算可行
1. Clients不要太多.....(这废话)
2. 记忆体够大........(也是废话)
3. 用ramdisk放档案(这在unix like system底下很容易办到)
4.
function setAPP($key,$value){
$_APP=unserialize(file_get_contents($file_in_ram));
$_APP[$key]=$value;
$fp=fopen($file_in_ram,'w');
//Lock
fwrite($fp,serialize($_APP));
//UnLock
fclose($fp);
}
function getAPP($key){
$_APP=unserialize(file_get_contents($file_in_ram));
return $_APP[$key];
}
大概就这样
那个Lock/UnLock不知道是否必须
这样其实类似SHM
不过使用上方便多了.....
那个SHM给我的感觉跟malloc()一样....
这样完全没有PHP变数随便乱用的好处(坏处)啊
--
不过前面的方法似乎比较有趣
後面的方法比较暴力的感觉
不过在PHP底层session的存取应该也跟後者差不多吧....
而且同样有serialize()的限制
至少这在IO方面是不输session的(他是写硬碟)
个人考虑过後比较想用後者
问题比较少,情况明朗
且不require client开cookie
而且符合"既然没有,自己干一个"精神XDD
但如果程式中不需要用到session只想用app的话
前者是个不错的选择
(假如可行的话.....)
感觉第一种方法的第4点是个致命伤
------
赚完P币肚子饿了去吃东西....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.22.93.130
※ 编辑: buganini 来自: 163.22.93.130 (02/08 02:03)
※ 编辑: buganini 来自: 163.22.93.130 (02/08 02:05)
※ 编辑: buganini 来自: 163.22.93.130 (02/08 08:38)