PHP 后置变量

Act*_*DEV 3 php

在我的旧项目中,发布变量用作 $var_name 而不是 $_post["var_name"]。所以我需要更改所有文件中的代码。那么我想在 php.ini 中更改任何内容((自动提取选项))来处理此问题而不更改编码吗?谢谢。

eri*_*sco 5

您的旧项目使用了现已弃用(自 5.3 起)并删除(自 5.4 起)的功能,称为“注册全局变量”。请阅读为什么删除此功能:http://php.net/manual/en/security.globals.php

简而言之,不,您不想更改 php.ini 以便您的旧应用程序可以工作。相反,您更有可能希望修复旧应用程序以在不注册全局变量的情况下工作。


也就是说,如果这不是面向公众的应用程序或者安全性不是问题,那么您可以通过一种方法配置 php.ini,甚至对于 PHP 5.4 也可以让您的应用程序正常工作。

警告:这涉及更改 php.ini 文件,以便模拟寄存器全局变量的效果。这意味着所有PHP 脚本都将受到寄存器全局变量的影响,而 不仅仅是您想要的脚本。

如前所述,extract($_REQUEST);将基本上完成寄存器全局变量过去的用途。现在,使用该auto_prepend_file指令,您可以在每个脚本之前运行这行代码。

也就是说,将此文件保存在某处(最好在您的 PHP 包含路径中),然后将其命名为register_globals.php.

<?php
extract($_POST);
Run Code Online (Sandbox Code Playgroud)

现在php.ini,在 中添加此行(该路径可能相对于您的 PHP 包含路径)。

auto_prepend_file = "register_globals.php" ; emulates register_globals
Run Code Online (Sandbox Code Playgroud)

此更改的效果是require("register_globals.php");在任何脚本运行之前发生。