LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1132|回复: 7

[PHP]基础:两三行代码让你的程序向上兼容(另一种打开register_globals的方法)

[复制链接]
发表于 2005-5-22 13:19:05 | 显示全部楼层 |阅读模式
基本上这里对关于register_globals的问题实在太多了,其实这类问题本不应用,但是无奈大家手上的简体中文php教程除了php_manual以外都基本是2001年甚至以前的东西了,你会'惊喜'的发现表单值不能传递,URL或者cookie没法用的状况,例如:


[PHP]<?
//这样没用,比如一个表单,URL,cookie或者session的名称为username

echo $username;

//这样才行

echo $_POST[username];
echo $_GET[username];
echo $_COOKIE[username];
echo $_SESSION[username];


?>[/PHP]

不要埋怨这种方法麻烦,因为出于安全性和强调性来考量,比如session和post方法各有一个username值时session会强制覆盖post的值,不行诸位可以试试,覆盖顺序是E(nv)G(et)P(ost)C(ookie)S(ession)(越往后越优先)

说那么多,可大家写程序还是喜欢生搬硬抄教材过来的,遗漏在所难免,此时解决的方法,也许大家都会在php.ini中打开register_globals....可是如果把程序放web服务器上呢??

so,解决方法还有一种.........
[PHP]<?

import_request_variables("GPC", "");
extract($_SERVER);
@extract($_SESSION);

?>[/PHP]

把这几行放在文件头或者include进来,你会发现就算不打开register_globals,也能通过访问$username去获得值了....

另,register_globals关闭的情况下,另一个函数系列session_register是不能用的,怎么办捏?哈哈,其实没有session_register更好

[PHP]<?
session_start();
//旧版方法
session_register("username", "nbx");


//新版方法,直接放进$_SESSION数组
$_SESSION['username'] = "nbx";




//销毁$_SESSION
session_unregister("username");

//这个方法是不是更好?
unset($_SESSION['username']);
?>[/PHP]



php4.2以后,register_globals默认即为off,不推荐大家在服务器上动太多手脚,ini_set是不能设定register_globals的,请大家还是多用$_POST和$_GET等方式,如果觉得麻烦,那大概是因为你自己写function和class的能力为0吧.......
发表于 2005-5-22 18:10:23 | 显示全部楼层
看到了~
回复 支持 反对

使用道具 举报

发表于 2005-5-31 17:18:54 | 显示全部楼层
global $php_self_url;
这样可以不???
回复 支持 反对

使用道具 举报

发表于 2005-6-9 18:48:44 | 显示全部楼层
多谢了,好东西!
回复 支持 反对

使用道具 举报

发表于 2005-6-9 20:11:23 | 显示全部楼层
搞笑啊,asp 怎么会不支持这种方式了?request对象也可以指定从哪里request,即使不指定,也有优先选择规律啊

拜托不了解就不要说啦,sql injection不是因为这个好不好,php也有sql injection问题啦,水平问题而已啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-9 20:58:05 | 显示全部楼层
Post by 懒猫
搞笑啊,asp 怎么会不支持这种方式了?request对象也可以指定从哪里request,即使不指定,也有优先选择规律啊

拜托不了解就不要说啦,sql injection不是因为这个好不好,php也有sql injection问题啦,水平问题而已啦



Ctrl+C & Ctrl+V的结果...........
回复 支持 反对

使用道具 举报

发表于 2005-6-10 08:28:12 | 显示全部楼层
哈哈。

nbx来这里献美拉。我也进来学习学习

:thank  :thank  :thank
回复 支持 反对

使用道具 举报

发表于 2005-6-30 03:19:40 | 显示全部楼层
支持用$_POST,$_GET...
1.美观
2.变量来源清楚
3.体现PHP特色
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表