Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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
PHP7.1寄存器\全局_Php_Centos - Fatal编程技术网

PHP7.1寄存器\全局

PHP7.1寄存器\全局,php,centos,Php,Centos,这里还有一个奇怪的问题。我最近参与了从PHP5到PHP7.1的大规模升级,还参与了CentOS的升级 我们有很多页面(事实上几乎所有页面)在代码中使用了register全局快捷方式 $_SESSION['username'] = $data['username']; $_SESSION['password'] = $data['password']; $_SESSION['accountid'] = $data['accountid']; $_SESSION['role'] = $data['r

这里还有一个奇怪的问题。我最近参与了从PHP5到PHP7.1的大规模升级,还参与了CentOS的升级

我们有很多页面(事实上几乎所有页面)在代码中使用了register全局快捷方式

$_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,以便我们能够启动并运行功能

我已经查看并尝试了以下解决方案: 但不幸的是,它们不起作用,这并不奇怪,因为它们是3年前写的

我的Google Fu在这方面也帮不了我:/

感谢您的帮助,提前谢谢

您可以从GPC创建自己的全局文件:

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

免责声明:永远不要这样做。

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

我们在几乎所有包含函数、数据库连接等的页面中都经常使用include

我开始列出我们在那里到处使用的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 = "";

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

我认为您无法重新打开register globals。PHP7.1的唯一选项是继续重写。坦白地说,我不会在生产环境中运行任何依赖于register globals的应用程序。我在您的代码中看不到任何register globals问题?@mkaatman这里的问题我继续并通过添加GET解决了它。我加上那行是为了让它在这里工作。但是很多代码只是通过$item或$service引用它(因为对于register\u globals,它只会假设这是get变量)@hassan如果我有任何发言权的话,我们现在会重新编写,但管理为王……是的,我认为这是一个解决方案,但我试图让它更安全一点:)你不能有全球注册和安全。选择一个。
foreach(['outsource'、'item'、'orderby']作为$var){$$var=$\u GET[$var]??;}
这就更干净了!非常感谢。