喜悦国际村 » 喜悦原创 » php自写application功能相当于asp中的application

页: [1] 2
piaofengnet2006-11-4 04:22 AM
php自写application功能相当于asp中的application

<?php
/*
程序设计: 林建炫(飘枫设计室)
made in 广州 by 2006-11-04 日(今天刚好是毕业证照相日哦)
QQ: 5818500
Email: [email]linzhenxuan@163.com[/email]
尊重他人也尊重自己!请勿删除该版权信息
如果你使用、修改请保留该信息!
*/
Function application($x,$y='')
{
//初始化
$files="temp/idr/application.php";
$file = substr($files,strrpos($files,"/")+1,strlen($files));
$dir = substr($files,0,strrpos($files,"/"));
$dir = explode("/",$dir);
$i=0;
//建立目录
foreach($dir as $a)
{
if($i==0)
{
$temp .= $a;
}
else
{
$temp .= "/".$a;
}

if(!is_dir($temp))
{
mkdir($temp);
};
$i++;
}
$file = realpath($temp)."\\".$file;
//建立文件
if (!file_exists($file))
{
$fp = fopen($file,w);
fputs($fp,"<?php\n\$application = array(\n");
fputs($fp,");?>");
fclose($fp);
}
//start
if(!$y)
{
include ($file);
$find = false;
foreach($application as $k => $j)
{
if($k==$x)
{
return $j;
$find=true;
break;
//找到了
}
if(!find)
{
return false;
}
}
}
else
/*
找到$x并给他的值$y
2种情况:
1.array没有任何东西
2.array有东西
*/
{
$fp = fopen($file,"r+");
$fs = file_get_contents($file);
@require($file);
$i=0;
$find = false;
$temp = "<?php\n\$application = array(\n";
foreach ($application as $a=>$b)
{
if($i==0)
{
if($a==$x)
{
$temp .= "'$x'=>'$y'\n";
$find = true;
}
else
{
$temp .= "'$a'=>'$b'\n";
}
}
else
{
if($a==$x)
{
$temp .= ",'$x'=>'$y'\n";
$find = true;
}
else
{
$temp .= ",'$a'=>'$b'\n";
}
}
$i++;
}
if($i==0)
{
if(!$find){$temp .= "'$x'=>'$y'";}
}
else
{
if(!$find){$temp .= ",'$x'=>'$y'";}
}
$temp .= ");?>";
ftruncate($fp, '0');
fputs($fp,$temp);
unset($fp);
}

}
//用法如下
application("user","2006-01-01");
echo application("user");
?>

qh6632006-11-4 06:16 AM
值得借鉴一下,只加数据时有用。

漠北怪叟2006-11-5 05:30 AM
为了一个全局变量.这样写很多打开关闭操作.会不会影响效率?

你这个原理同discuz的模板有相同之理!

漠北怪叟2006-11-5 05:31 AM
我个人有个设想!
能不能用session对象模似出来呢?

漠北怪叟2006-11-5 05:43 AM
<?
function application($key,$val=''){
         
        $old_session_id=session_id();                        //把用户session_id赋值
        session_id($common_session_id="dsafsfsfsdfsdfsfsdfsdfsf";//自行设定实际是一个md5结果
        if ($val){
                setcookie($key, $val,time()+352000);
        }else{
                $val=$_COOKIE[$key];
        }
        session_id($old_session_id);

}
?>
刚才随手写了个.没经过测试,不知是否能用~~~

piaofengnet2006-11-5 11:20 AM
不可以啊!
因为我的application是全局用的
可以用这个来聊天室。
session只是对单个用户来说的!
如果一样的话那我就不弄application了!
呵呵!

piaofengnet2006-11-5 11:22 AM
我并没有看过discuz的代码之类的!
我学php不到一个月!
[url]http://www.piaofen.cn/myphp/book[/url]
这个是我开发的。
其中那个在线的就是用这样的原理!
不过比现在这个application复杂了很多

漠北怪叟2006-11-5 03:51 PM
<?
function application($key,$val=''){
         
        $old_session_id=session_id();                        //把用户session_id赋值
        session_id($common_session_id="dsafsfsfsdfsdfsfsdfsdfsf";//自行设定实际是一个md5结果
        if ($val){
               // setcookie($key, $val,time()+352000); //前面回帖时不知想什么.写错了行了...报歉!!
              $_SESSION[$key,$val];                  
       }else{
                $val=$_SESSION[$key];  //这行也错了
        }
        session_id($old_session_id);

}
?>
刚才随手写了个.没经过测试,不知是否能用~~~

漠北怪叟2006-11-5 03:54 PM
[quote]原帖由 [i]piaofengnet[/i] 于 2006-11-5 07:20 PM 发表
不可以啊!
因为我的application是全局用的
可以用这个来聊天室。
session只是对单个用户来说的!
如果一样的话那我就不弄application了!
呵呵! [/quote]

说明你对session的原理不了解.

这个有别于asp的..
我上面的程序.大家公用一个session_id,则实现了公共session也就是application的目的.

即设定一个公用session_id
取值或者写值后.
再把用户的预先保留的session_id还给用户.

piaofengnet2006-11-6 01:47 AM
上面的程序经过测试不能用。
Parse error: parse error, unexpected ',', expecting ']' in D:\AppServ\www\book\tt.php on line 8
还有那个
session_id($common_session_id="dsafsfsfsdfsdfsfsdfsdfsf";
改成
session_id($common_session_id="dsafsfsfsdfsdfsfsdfsdfsf");

pizzro2006-11-14 02:41 AM
[quote]原帖由 [i]漠北怪叟[/i] 于 2006-11-5 11:51 PM 发表
<?
function application($key,$val=''){
         
        $old_session_id=session_id();                        //把用户session_id赋值
        session_id($common_session_id="dsafsfsfsdfsd ... [/quote]



你的这种办法 不太可能实现。比如你要保存一个用户现有的SID的话,你就必须先调用session_start().
然而你下面要对sid进行设置,又必须在session_start()之前,2者矛盾,所以要实现不太可能,
你的这种方法只适用于,客户端本身可能不需要用到session的程序里,也就是说不用保存old_session_id的程序中。

sanders_yao2006-11-14 05:06 AM
谁能告诉我asp的application对象的功能是什么?

piaofengnet2006-11-14 06:29 AM
就是=同于一个全局函数!
就是你弄了什么东西在里面大家都可以看到
可以用这个原理做成一个聊天室!

sanders_yao2006-11-14 06:41 AM
php脚本中在类型外面声明的函数本来不是全局的吗?
楼主是说做一个全局的变量吧?如果要一个变量让大家都可以访问 我更倾向于序列化后保存文件或者保存到数据库中
我没有做过聊天室 我有个思路 不知道是否可行 :将聊天信息保存为静态的rss 不知道是不是可以这样设计

piaofengnet2006-11-14 09:07 AM
实际上也是读写操作文件了!
把文件include
才实现了全局
这样读写追加都可以用。
写成rss也没问题吧
原理都一样都是写文件
只是我觉得这样的application
比较好吧!
除了写聊天室外
还可以弄些其他东西。
比如缓存技术那些了。
有些东西没必要整天读数据库。
根据了解,读写文本比读写数据库快。
这个是我从网上了解到的
不然我不那么麻烦早就用mysql了!

akstrom2006-11-15 08:24 AM
[quote]原帖由 [i]piaofengnet[/i] 于 2006-11-14 05:07 PM 发表
实际上也是读写操作文件了!
把文件include
才实现了全局
这样读写追加都可以用。
写成rss也没问题吧
原理都一样都是写文件
只是我觉得这样的application
比较好吧!
除了写聊天室外
还可以弄些其他东西 ... [/quote]

呵呵 谁说的,你试试用1m的文件读读看,然后再都相当于1m的数据库,看谁快
这个只是相对的,内容的多少跟操作的方式影响到相关的速度

[[i] 本帖最后由 akstrom 于 2006-11-15 04:36 PM 编辑 [/i]]

piaofengnet2006-11-15 09:02 AM
一般很难达到1M的东西量吧。
就算达到1M的东西也不怎么慢。
如果达到10M以上就可怕了!
最近研究把它放在内存中。
写好了再次发步吧。

caoyuqing2006-11-20 06:55 PM
hehe
\

piaofengnet2006-11-21 07:48 AM
?什么意思呢?

rf1232006-11-22 01:41 AM
不知道ASP的application是怎么实现的,但楼主你这个充其量就是个共享文件,

只能读文件,多用户并发写入怎么处理呢?

而且做聊天室的话数据很容易就很大,每次都读入一个很大的文件,还要写数据,排队等等,服务器受不了啊

做聊天室的话用mysql的内存表是个很好的方法


查看完整版本: php自写application功能相当于asp中的application


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.006829 second(s), 2 queries