2011-08-30 71 views
1

在我的旧项目中,post变量用作$ var_name而不是$ _post [“var_name”]。所以我需要更改所有文件中的代码。所以我想在php.ini中更改任何内容((自动提取选项))来处理此操作而不更改编码。谢谢。PHP Post变量

回答

4

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

总之,不,你不想改变php.ini,以便您的旧应用程序可以工作。相反,您将更有可能希望修复旧的应用程序,以使其不需要注册全局变量。


也就是说,如果这不是一个面向公众的应用程序或安全不是一个问题,有一个办法,你甚至可以为PHP 5.4配置php.ini中有你的应用程序的工作。

警告:这涉及到改变你的php.ini文件中,以便注册全局的影响进行了仿真。这意味着所有 PHP脚本将受到注册全局,只是你想要的人的影响。

如前所述,extract($_REQUEST);将基本上完成注册表全局变量的用法。现在,使用auto_prepend_file指令,您可以在每个脚本之前运行这一行代码。

也就是说,将该文件保存在某处(最好在您的PHP包含路径中),并且将其称为register_globals.php

<?php 
extract($_POST); 

现在php.ini,加入这一行(路径可能是相对于你的PHP包含路径)。

auto_prepend_file = "register_globals.php" ; emulates register_globals 

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

+0

警告 不要在不受信任的数据上使用extract(),如用户输入(即$ _GET,$ _FILES等)。如果你这样做,例如,如果你想运行临时依赖于register_globals的旧代码,确保你使用了一个非覆盖extract_type值,例如EXTR_SKIP,并且要知道你应该按照在variables_order中定义的相同顺序提取php.ini。 –

+0

我不明白Col. Shrapnel的一些事情。首先,暂时使用register_globals意味着什么?其次,如果对'extract'的调用是脚本中的第一件事情,那么使用非覆盖提取选项的意义是什么?但是,是的,我同意提取顺序(如果存在冲突)可能会发挥作用,但我不同意它必须与'variables_orders'匹配,除非与该指令的一致性至关重要。 – erisco

+0

所以,如果你不懂基本的东西,你最好问问答案。 –

2

我知道你不愿意改变很多代码,但不好的设计应该纠正,不管它意味着什么麻烦。改变你的全局变量到适当的后期变量,否则你会后悔的。有99%的机会你最终会自己得出这个结论,不妨现在就做。

+0

我想知道为什么没有人抨击创可贴的方法。 –

1

register_globals是一种以获取提交的值作为变量而不是post,get,request变量的旧方法。但是这在新版本中已被弃用。你需要用你的代码来接受$ _post ['email']而不是$ email。