这里有另一个奇怪的问题。我最近已经从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也没有在这里帮助我:/
感谢任何帮助,提前谢谢!
答案 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 = "";
这不是最干净的解决方案,它不是最好的解决方案,但它“有效”。