这几天在研究一个ASP的程序,想移植到PHP下。
这个ASP里面频繁使用Application对象,该对象对访问ASP站点的所有页面来说,是个超级全局对象,在PHP中暂时没有这个东西。
要用PHP实现这个也不难,把对象的内容保存到数据库中,再实现一下lock()和unlock()操作就可以了。
创建一个表,保存Application对象,对象的大小为20K,如下:
CREATE TABLE application (
session varbinary(20480)
)
lock()操作用 lock table application write 实现,unlock()操作为
unlock table application
。
只是简单实现,还没有在实际使用。完整代码如下:
class Application {
var $dbconn;
function __construct() {
$db = &$this->dbconn;
$db = opendb();
}
function __destruct() {
$db = &$this->dbconn;
$db->close();
}
function lock() {
$db = &$this->dbconn;
$sql = "lock table application write";
$result = @$db->query($sql);
if($result==null) {
return(false);
}
return(true);
}
function unlock() {
$db = &$this->dbconn;
$sql = "unlock table application";
$result = @$db->query($sql);
if($result==null) {
return(false);
}
return(true);
}
function set($name,$value) {
$db = &$this->dbconn;
$initflag = 0;
$sql = "select session from application";
$result = @$db->query($sql);
if($result==null) {
return(false);
}
$data = @$result->fetch_array();
if($data==null) {
if($db->errno) {
return(false);
} else {
$initflag = 1;
}
}
$session = $data[0];
$application = unserialize($session);
$application[$name] = $value;
$session = serialize($application);
if($initflag) {
$sql = "insert into application values ('$session')";
} else {
$sql = "update application set session='$session'";
}
$result = @$db->query($sql);
if($result==null) {
return(false);
}
return(true);
}
function get($name) {
$db = &$this->dbconn;
$sql = "select session from application";
$result = @$db->query($sql);
if($result==null) {
return(null);
}
$data = $result->fetch_array();
if($data==null) {
return(null);
}
$session = $data[0];
$application = unserialize($session);
$value = "";
if(array_key_exists($name,$application)) {
$value = $application[$name];
}
return($value);
}
}
这个ASP里面频繁使用Application对象,该对象对访问ASP站点的所有页面来说,是个超级全局对象,在PHP中暂时没有这个东西。
要用PHP实现这个也不难,把对象的内容保存到数据库中,再实现一下lock()和unlock()操作就可以了。
创建一个表,保存Application对象,对象的大小为20K,如下:
CREATE TABLE application (
session varbinary(20480)
)
lock()操作用 lock table application write
只是简单实现,还没有在实际使用。完整代码如下:
class Application {
var $dbconn;
function __construct() {
$db = &$this->dbconn;
$db = opendb();
}
function __destruct() {
$db = &$this->dbconn;
$db->close();
}
function lock() {
$db = &$this->dbconn;
$sql = "lock table application write";
$result = @$db->query($sql);
if($result==null) {
return(false);
}
return(true);
}
function unlock() {
$db = &$this->dbconn;
$sql = "unlock table application";
$result = @$db->query($sql);
if($result==null) {
return(false);
}
return(true);
}
function set($name,$value) {
$db = &$this->dbconn;
$initflag = 0;
$sql = "select session from application";
$result = @$db->query($sql);
if($result==null) {
return(false);
}
$data = @$result->fetch_array();
if($data==null) {
if($db->errno) {
return(false);
} else {
$initflag = 1;
}
}
$session = $data[0];
$application = unserialize($session);
$application[$name] = $value;
$session = serialize($application);
if($initflag) {
$sql = "insert into application values ('$session')";
} else {
$sql = "update application set session='$session'";
}
$result = @$db->query($sql);
if($result==null) {
return(false);
}
return(true);
}
function get($name) {
$db = &$this->dbconn;
$sql = "select session from application";
$result = @$db->query($sql);
if($result==null) {
return(null);
}
$data = $result->fetch_array();
if($data==null) {
return(null);
}
$session = $data[0];
$application = unserialize($session);
$value = "";
if(array_key_exists($name,$application)) {
$value = $application[$name];
}
return($value);
}
}