Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更新不推荐使用的代码_Php - Fatal编程技术网

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>您在抱歉时得到的答案,没有得到它,研究也没有帮助,重新定义的问题。项目现在已解决,脚本正在运行。