Php 更新不推荐使用的代码
可能重复:Php 更新不推荐使用的代码,php,Php,可能重复: 在WAMP环境中运行脚本时,我得到以下响应: 警告:中为foreach()提供的参数无效 C:\wamp\www\GeCard\eCardScript\u ecards\ecard\u lib.php,第17行 警告:中为foreach()提供的参数无效 C:\wamp\www\GeCard\eCardScript\u ecards\ecard\u lib.php,第21行 这是我的代码: function getPostGetVars() { global $HTTP_
在WAMP环境中运行脚本时,我得到以下响应: 警告:中为foreach()提供的参数无效 C:\wamp\www\GeCard\eCardScript\u ecards\ecard\u lib.php,第17行 警告:中为foreach()提供的参数无效 C:\wamp\www\GeCard\eCardScript\u ecards\ecard\u lib.php,第21行 这是我的代码:
function getPostGetVars() {
global $HTTP_POST_VARS,$HTTP_GET_VARS;
foreach ($HTTP_POST_VARS as $key => $value) { //This is line 17
global $$key;
$$key = $value;
}
foreach ($HTTP_GET_VARS as $key => $value) { //This is line 21
global $$key;
$$key = $value;
}
}
我被告知此代码已被弃用。这段代码是否可以轻松更新以消除警告?尝试以下方法:
function getPostGetVars() {
global $_POST,$_GET;
foreach ($_POST as $key => $value) { //This is line 17
global $$key;
$$key = $value;
}
foreach ($_GET as $key => $value) { //This is line 21
global $$key;
$$key = $value;
}
}
分别使用
$\u POST
和$\u GET
而不是$HTTP\u POST\u VARS
和$HTTP\u GET\u VARS
function getPostGetVars() {
foreach ($_POST as $key => $value) { //This is line 17
global $$key;
$$key = $value;
}
foreach ($_GET as $key => $value) { //This is line 21
global $$key;
$$key = $value;
}
}
如果您查看手册页面中的和,您将看到它们更详细的对应项已被弃用
我忍不住注意到,您试图使用此代码所做的操作实际上反映了的功能。我要提醒您不要这样做,因为攻击者可以通过请求重写基本变量(例如,
$isLoggedIn
),并利用服务器进行攻击。如果您继续这样做,我建议使用一个标志,例如EXTR\u PREFIX\u ALL
,这样就不会发生冲突。例如,可以在get变量前面加上get
,在post变量前面加上post
但是,除非您真正知道自己在做什么,否则在生产环境中使用这种提取(或您的方法)是非常危险的。我建议完全不要使用它,而是使用适当的超全局变量访问$\u GET
和$\u POST
变量
有关更多信息,请参阅。此代码基本上实现了
register\u globals=on
的功能,只是更糟(优先于POST)。您应该完全删除此代码并更新脚本,以使用适当的变量$\u POST['field']
或$\u GET['field']
来访问POST/GET数据,而不是仅使用$field
代码停止工作的原因是$HTTP\u*\ u VARS
被$\u*
超全局替换,因此要修复它,请删除全局$HTTP\u POST\u VARS,$HTTP\u GET\u VARS
并将$HTTP\u POST\u VARS
替换为$\u POST
(同样,对于$HTTP\u GET\u VARS
)
但是,您也可以通过完全删除函数并用
extract($\u REQUEST)替换对它的调用来修复它代码>(假设函数总是在全局范围内调用,而不是在函数内部调用)。是的,使用$u POST['variable\u name']代替$HTTP\u POST\u VARS的全局$HTTP\u POST\u和$u GET['variable name'],$HTTP\u GET\u VARS的$u GET[/p>您在抱歉时得到的答案,没有得到它,研究也没有帮助,重新定义的问题。项目现在已解决,脚本正在运行。