php 实现application,PHP中实现ASP中的Application 功能
〖PHP中实现ASP中的Application 功能〗
/*
作者: 何志强[hzq@chinaasp.com hhzqq@21cn.com]
主页: http://www.phpchina.com/
ICQ : 50721529
版本: 1.0
未经本人同意,不得以任何方式转载
注意PHP需要有Semaphore and shared memory functions支持:
从源代码安装PHP时,在./configure后面加上--enable-sysvsem和--enable-sysvshm
*/
if(!defined("__Class_Application")){
define("__Class_Application",1,1);
define("Semaphore_Key",1000,1);
define("SharedMem_Key",2000,1);
define("SharedMem_Size",65535,1); //共享内存大小
class Application{
var $SemaphoreID;
var $SharedMemID;
var $VarIndexes;
function Application(){
$this->SemaphoreID = sem_get(Semaphore_Key,1,0600);
$this->SharedMemID = shm_attach(SharedMem_Key,SharedMem_Size,0600);
$this->lock();
$this->VarIndexes = @shm_get_var($this->SharedMemID,0);
if(empty($this->VarIndexes)){
$this->VarIndexes = array();
shm_put_var($this->SharedMemID,0,$this->VarIndexes);
}
$this->unlock();
}
//在对共享内存进行操作前请调用该函数,防止多个进程同时对该共享内存进行操作
function lock(){
sem_acquire($this->SemaphoreID);
}
//在对共享内存操作完后请调用该函数,允许其它进程对该共享内存进行操作
function unlock(){
sem_release($this->SemaphoreID);
}
//取出存在共享内存中的某变量,返回false表示共享内存中无该变量
function read($name){
if(!isset($this->VarIndexes[$name])) return false;
$GLOBALS[$name] = shm_get_var($this->SharedMemID,$this->VarIndexes[$name]);
return true;
}
//读出存在共享内存中的所有变量
function readall(){
reset($this->VarIndexes);
while(list($name,$id)=each($this->VarIndexes))
$GLOBALS[$name] = shm_get_var($this->SharedMemID,$id);
}
//将指定变量存入共享内存
function save($name){
if(!isset($this->VarIndexes[$name])){
$this->VarIndexes[$name] = count($this->VarIndexes)+1;
shm_put_var($this->SharedMemID,0,$this->VarIndexes);
}
shm_put_var($this->SharedMemID,$this->VarIndexes[$name],$GLOBALS[$name]);
}
//保存在共享内存中的所有变量
function saveall(){
reset($this->VarIndexes);
while(list($name,$id)=each($this->VarIndexes)){
if(isset($GLOBALS[$name]))
shm_put_var($this->SharedMemID,$id,$GLOBALS[$name]);
}
}
//清空共享内存中的所有变量
function clear(){
reset($this->VarIndexes);
while(list($name,$id)=each($this->VarIndexes))
shm_remove_var($this->SharedMemID,$id);
$this->VarIndexes = array();
shm_put_var($this->SharedMemID,0,$this->VarIndexes);
}
}
}
?>
/*测试
class ClassTest{
var $name;
function ClassTest($name){
$this->name = $name;
}
}
$App = new Application();
$App->lock();
if($cmd=='clear') $App->clear();
if($App->read('count')) $count++;
else $count = 1;
$App->save('count');
if($App->read('array')){
echo '存放数组测试:
';
for($i=0;$i';
echo '
';
}
else{
$array = array('PHP','JSP','ASP');
$App->save('array');
}
if($App->read('MyClass')){
echo '存放Class测试:
';
echo ' '.$MyClass->name.'
';
echo '
';
}
else{
$MyClass = new ClassTest('何志强');
$App->save('MyClass');
}
$App->unlock();
echo 'this page has been visited '.$count.'
';
echo 'you can restart from here
';
*/
?>
责任编辑:
php 实现application,PHP中实现ASP中的Application 功能相关推荐
- 总结ASP.NET MVC Web Application中将数据显示到View中的几种方式
当我们用ASP.NET MVC开发Web应用程序的时候,我们都是将需要呈现的数据通过"Controllers"传输到"View"当中,怎么去实现,下面我介绍一下 ...
- 学习ASP.NET-初探Application状态
学习ASP.NET-初探Application状态 - 上一篇<浅谈TeeChart组件在ASP中的应用>下一篇<用IS6进行ASP软件的打包和自动安装(补充)>字体: 小|中 ...
- 简单快捷实现ASP在线发邮件功能
简单快捷实现ASP在线发邮件功能 在编写网上应用程序时,经常碰到需要在线发送邮件的问题,邮件内容是由程序动态决定的,如果你采用的是ASP方式来编写网上应用程序,如何简单.快捷地实现这一功能呢? 笔者在 ...
- 在 Linux“.NET研究” 操作系统中运行 ASP.NET 4 (下)
"在 Linux 操作系统中运行 ASP.NET 4 (中)"中已经配置好了 openSUSE 11.3 操作系统. 现在,我们进入"GNOME 终端",使用 ...
- 简单介绍ASP中Cache技术的应用
ASP从发布至今已经7年了,使用ASP技术已经相当成熟,自从微软推出了ASP.NET之后就逐渐停止了对ASP版本的更新.但是由于有很多人仍然习惯使用ASP来开发网站,所以,再次我将以一个简单的例子来说 ...
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
一,简介 Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送 ...
- .NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 End ...
- 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
最新文章
- Java条形码生成技术-Barcode4j
- flutter 日历_Flutter:一个更贴近真实项目的练习
- CapcityScheduler配置方法(还没弄完)
- MySQL 高级 ———— MySQL逻辑架构图简介
- 【LeetCode】【HOT】142. 环形链表 II(快慢指针)
- php和java的语法区别吗_php语法同java语法的基本区别(实例项目需求,php才能熟)...
- 《编码的奥秘》记录(二)
- adobe reader打开pdf闪退或自动关闭
- 王校长一分钟能吃多少热狗?| 小游戏 1
- matlab程控开关,基于单片机和FPGA设计的程控滤波器(MAX297+LTC1068)
- AVR 上的汇编圈圈操作系统
- 计算机系统集成项目工程师报名,2021年系统集成项目管理工程师报名流程
- 如何设置word的有效期
- 虚拟机安装win10 x64系统
- 概率论在实际生活的例子_日常生活中的概率统计
- 代码解读六 文件名“Ano_AltCtrl.c”
- Designing Data-Intensive Applications
- AWD比赛入门攻略总结
- NAPI(New API)的一些浅见
- tensorflow的slim调用预训练模型的权重进行迁移学习的一些感触