作者MrMarcus (请勿忘记密码)
看板PHP
标题Re: [请益] 伺服器变数
时间Thu Mar 20 16:54:58 2008
※ 引述《JoeHorn (狮子男)》之铭言:
: ※ 引述《MrMarcus (请勿忘记密码)》之铭言:
: : 我不知道各位有没有写过ASP或者ASP.net。ASP/ASP.net的Application变数
: : 是一种在同一个Application范围内的所有页面,所有使用者,都可以存取
: : 得到的变数。这里的使用者指的是前来浏览这个Application范围内网页的
: : 访客,不是主机作业系统上的使用者。
: 我之前的文章有说到这段:
: 如果「user」是单一 PHP 系统的 web wlient ,那根本就不用来问伺服器级变数,
: 随便找个开放源码的 PHP 系统(phpBB、OSC、Gallery、...)都可以看到作法。
: 把资料放在 Config 档,或是放在後端 DB ,都可以解决。
: 有必要一定得用 application variables ?
: : PHP透过auto_prepend_file在每个程式前面插入该程式,这虽然可以让每个
: : 程式(以及使用者)共享某些资料,但是问题在於这些资料是不能被改变的。
: : ASP/ASP.net程式可以用类似以下的方式读取Application变数:
: : TotalUserLabel.Text = Application["TotalUser"].ToString();
: : 但是除了读取,还可以把资料写到Application层级去:
: : Application.Add("TotalUser", 100);
: : 或者
: : Application["TotalUser"] = 101;
: : 整个app范围内的所有使用(访客)都会看到这个变数的改变。PHP的
: : auto_prepend_file没有办法做到这个。虽然可以在这个档案里面放入一些
: : 变数让每个程式(以及访客)都读取得到,但是当程式试图去「变更」这些
: : 变数的资料的时候,这些变更影响的范围都只限於该支程式,该程式执行
: : 完毕,下次执行的时候就又恢复成以前未变更的值了。或者顶多透过
: : SESSION变数,让同一个访客浏览的多个页面都能看到之前的变更。
: : 但是重点在於「其他访客」并无法看到这些「变更」。这也就是Application
: : 层级变数跟session层级变数不同的地方。
: 您在这边讲「整个app范围内的所有使用(访客)都会看到这个变数的改变。PHP的
: auto_prepend_file没有办法做到这个。」,下一段似乎直接驳斥了这一段的说法?
我不认为後面那段自己驳斥了这一段。
任何缺少的功能我们当然可以自己想办法做出来。以这个例子来讲,也许我们可以
做出自己的lib来达到或者模拟ASP/ASP.net的application变数的功能。但是这跟
auto_prepend_file有什麽关系?这个功能是因为auto_preprend_file才做出来的吗?
不是吧。auto_prepend_file只是会自动把某个档案的内容塞到每一个php程式前面
而已。好,就算我把自己做出来的class放在这个档案里面好了,这样我不需要在
程式里面用include或者require把这个class叫进来,方便多了。但是这样我会说
这个app变数的功能是因为auto_prepend_file才做出来的吗?不会吧。
: : PHP如果要做到对某个参数的变更,所有访客都看得到,那势必必须自己
: : 实作一些方式把这些资料储存在某个地方(档案或者资料库或者甚至存在
: : shared memory),另外也要自己实作一些方式去读取这些共用资料。
: : 为什麽得自己实作?就是因为PHP本身没有提供咩。
: 办法是人想出来的,自己实做会比较差?
我可没说自己做的东西就会比较差。请不要自己猜。我只是说,PHP本身没有
提供类似ASP/ASP.net的application变数这项功能。这有错吗?没有就是没有。
至於引申出「自己做的就会比较差」这个,那可不是我讲的。我也没有暗示
「自己做的就会比较差」这件事。
说实在话,今天我也得感谢PHP,才能挣口饭吃。说PHP的坏话对我来说有什麽
好处?没有啊。只不过刚好我也有一部份得感谢ASP/ASP.net。我不会在这里
说PHP好还是ASP/ASP.net好,那也不是我能评论的。今天只不过是有人问了
PHP有没有类似app变数的功能,答案是没有。就这样。原发问者会因为这样就
不用PHP吗?这我不晓得。不过在现实环境下,如果真的需要这功能而且就是
得用PHP,我想原作者会去找到可用的函式库或者自己想办法生出来的。我们
都是这样走来的不是吗。
: 我在网路上看过一段话,意思大概是这样:
: 「如果你写的 code、应用的 library、使用的软体都是 well documented 的,
: 那你的成果并不是什麽了不起的旷世锯作。」
: 共勉之~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.153.19
1F:推 arzbar:功能一样能达到 只是原PO 问有没有APP 这样的东西 我也是 03/20 16:58
2F:→ arzbar:ASP 转过来的 为了APP 我也翻了一堆文章 最後只能靠纪录的 03/20 16:59
3F:→ arzbar:方式来达到ASP 的 APP变数功能 J先生是不是太敏感了? 03/20 16:59
4F:→ gpmm:怎办?我也跟 J 大一样觉得不太苏湖耶…我也太敏感了吗? 03/20 17:02
5F:推 arzbar:或许吧 因为ASP 的APP太方便了 来到PHP 总是会不习惯 03/20 17:11
6F:推 JoeHorn:一楼,麻烦您去看看您在之前文章的推文。 03/20 17:13
7F:→ JoeHorn:尤其是我提 auto_prepend_file 的那篇文章。 03/20 17:14
8F:推 arzbar:我真不知道有什麽好火药味的 没有像ASP 的 APP 的变数 03/20 17:14
9F:→ JoeHorn:变数不能带到别的 user 身上? 03/20 17:15
10F:→ arzbar:你只能用变通的方式来做 这不就是答案? 03/20 17:15
11F:→ arzbar:我不清楚J大有没有用过ASP 的 APP 但是我可以理解他要的 03/20 17:15
12F:→ arzbar:并不是要变通的作法 只是单纯问个答案而已 03/20 17:16
13F:→ JoeHorn:JAVA、.NET、PHP 我都玩过了, App 级变数是很好用.. 03/20 17:16
14F:→ JoeHorn:重点是「为什麽非用不可?」,.NET 的 App 级变数效能好? 03/20 17:17
15F:→ JoeHorn:你们要不要去看看他们的底层实作方式? 03/20 17:18
16F:推 arzbar:他只有问有没有这个变数吧? 没有说非用不可阿 03/20 17:18
17F:→ arzbar:也没提到效能阿? 而且 我也没有要打笔仗阿 只是想表达 03/20 17:19
18F:→ JoeHorn:所以你们找都不找,直接丢个「没有」? 03/20 17:19
19F:→ arzbar:PHP 没有APP这个变数 就这样而已 03/20 17:20
20F:推 JoeHorn:如果这种变数是相反的(PHP 支援,.NET 不支援)。 03/20 17:23
21F:→ JoeHorn:你们找到的 .NET implement 的 class 要收钱才能下载~ :p 03/20 17:24
22F:→ arzbar:我其实也不是很想笔战 但如过下面那篇真的能用的话那真的 03/20 17:34
23F:→ arzbar:是太好了 我记得原PO还有提到 伺服器关闭 变数消失 03/20 17:35
24F:→ arzbar:若依照我们後来变通的方式 应该是没办法达到那个需求吧? 03/20 17:35
25F:→ arzbar:还是说各位大大有其他的变通方式? 我是想不到啦 有劳指导 03/20 17:36
26F:推 starjou:战起不相干的东西了....... 03/20 18:34