PHP 7.1 Register_Globals

时间:2017-03-28 15:53:40

标签: php centos

这里有另一个奇怪的问题。我最近已经从PHP 5升级到Php 7.1以及CentOS升级。

我们有很多页面(实际上几乎所有页面都使用了代码中的寄存器全局快捷方式)。

$_SESSION['username'] = $data['username'];
$_SESSION['password'] = $data['password'];
$_SESSION['accountid'] = $data['accountid'];
$_SESSION['role'] = $data['role'];

$getCompany = mysqli_query($mysqli_con,"SELECT * FROM companies WHERE companyid='$data[accountid]'");
$dataCompany = mysqli_fetch_array($getCompany);

$delinquent = $dataCompany['delinquency'];

// Here I fixed it
$item = $_GET['item'];
// But generally variables are just referenced by $whatevergetparameter
if($delinquent == 0){
switch($item)
{
    // Settings
    case "cannedresponses":
        include("/master/inc/settings/list-cannedresponse.inc");
    break;

    case "serviceboard":
        include("/master/inc/settings/list-serviceboard.inc");
    break;

    case "pending-direct":
        include("/master/inc/direct/pending.inc");
    break;

当然这会造成很多问题。特别是因为它无处不在。

有计划重新编写作品,但与此同时我想知道是否有人知道模仿的解决方法或"启用" register_globals所以我们可以启动并运行功能。

我看过并尝试了解决方案: http://php.net/manual/en/security.globals.php 但不幸的是,他们没有工作,因为他们是在3年前写的,所以并不令人惊讶。

我的Google-Fu也没有在这里帮助我:/

感谢任何帮助,提前谢谢!

2 个答案:

答案 0 :(得分:1)

可以从GPC创建自己的全局变量:

foreach (['_GET', '_POST', '_COOKIE'] as $source) {
    foreach ($$source as $key => $value) {
        $GLOBALS[$key] = $value;
    }
}

免责声明:实际上并没有这样做。

答案 1 :(得分:0)

所以我在此期间想出了一个临时解决方案。

我们几乎在所有页面中都经常使用include,包括函数,db连接等。

我开始列出我们在那里使用的GET / POST变量。

if(isset($_GET["outsource"]))
        $outsource = $_GET["outsource"];
else
    $outsource = "";

// Our Selector for a lot of our Select case Usage
if(isset($_GET["item"]))
        $item = $_GET["item"];
else
    $item = "";

// Order Stuff
if(isset($_GET["orderby"]))
        $orderby = $_GET["orderby"];
else
    $orderby = "";

这不是最干净的解决方案,它不是最好的解决方案,但它“有效”。