作者MrMarcus (请勿忘记密码)
看板PHP
标题Re: [请益] 伺服器变数
时间Thu Mar 20 14:24:07 2008
※ 引述《JoeHorn (狮子男)》之铭言:
: ※ 引述《JoeHorn (狮子男)》之铭言:
: : 基本上,要硬干也是可以的。
: : 推 arzbar:问题还是一样 就算每支都require 但是资料还是没办法带到 03/20 04:00
: : → arzbar:别的user 身上... 03/20 04:01
: : → arzbar:只能靠 file or db 去传递现在值 03/20 04:01
: 你们对「user」的定义是啥?
: 如果「user」是单一 PHP 系统的 web wlient ,那根本就不用来问伺服器级变数,
: 随便找个开放源码的 PHP 系统(phpBB、OSC、Gallery、...)都可以看到作法。
: 「user」这个角色必须针对的是系统开发,或是应用者,伺服器级的变数才有意义。
: (ex:某 A 在伺服器上面放 phpBB、某 B 在同一台伺服器放了 Gallery)
: 而且,auto_prepend_file 的档案可以连接资料库,也可以放 Class、...。
我不知道各位有没有写过ASP或者ASP.net。ASP/ASP.net的Application变数
是一种在同一个Application范围内的所有页面,所有使用者,都可以存取
得到的变数。这里的使用者指的是前来浏览这个Application范围内网页的
访客,不是主机作业系统上的使用者。
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层级变数不同的地方。
PHP如果要做到对某个参数的变更,所有访客都看得到,那势必必须自己
实作一些方式把这些资料储存在某个地方(档案或者资料库或者甚至存在
shared memory),另外也要自己实作一些方式去读取这些共用资料。
为什麽得自己实作?就是因为PHP本身没有提供咩。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.153.19
1F:→ gpmm:所以最後一句想表达什麽? 03/20 14:58