我刚刚升级到 PHP 5.3,并开始为新客户端支持旧网站。它似乎使用了相当奇怪的 PHP 代码,我以前从未遇到过。
在尝试访问 $_GET 或 $_REQUEST 变量时,开发人员使用了以下内容:${"variable_name"}
我收到由于 undefined variable 而生成的通知(可能是因为 PHP 未解析 ${"variable_name"} 样式代码)。
将其更改为 $_REQUEST['variable_name'] 按预期工作,但我无法查看他们的所有代码并更改它,因为该网站很大并且使用专有的布局方法。
有谁知道是否可以打开对这些标签/代码块的支持?我查看了 PHP.ini,其中提到了 ASP 样式标签和短标签,但启用这些没有效果(无论如何它们看起来完全不同,我只是认为值得一试)。
最佳答案
我认为该语法没有什么新内容:
$a = 10;
var_dump(${"a"});
工作得很好;-)
您的问题可能是由于之前 register_globals
已启用(默认情况下,如果 PHP <= 4.something),现在已禁用 - 这对安全性有好处!
将 register_globals 设置为 On 时,$_REQUEST
中的任何变量都会作为变量自动注入(inject)到您的应用程序中——实际上,这取决于 variables_order
配置选项,但这个几乎总是包括 Get、Post 和 Cookie,至少如此。
例如,如果有一个像 $_GET['my_var']
这样的变量,那么您也会有一个 $my_var
变量...而且这个也可以使用语法 ${'my_var'}
考虑到 register_globals
默认情况下是 Off
,因为 PHP 4.2 之类的东西,并且应该在 PHP 6 中消失(如果我没记错的话),我建议不要重新激活它...至少,如果您有时间纠正/测试代码...
关于PHP 5.3 支持奇怪的 '${}' 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1323623/