我正在调试一个我以前从未见过的PHP文件(不是我的代码),但据说可以工作。
myfile.php
的示例代码片段:
<html>
<body>
<p>
<?
echo $Year;
?>
</p>
</body>
</html>
从连线方式来看,代码似乎设置为从查询字符串(HTTP GET)中提取年份:http://server.com/myfile.php?Year=2010
这应该以前有效,但现在不再有效了。
是否有 PHP 设置来控制这一点? 这是在PHP版本中被禁用的"功能"吗? 我从未见过在$_GET
之外使用的GET变量
看起来以前的服务器被设置为注册全局
http://www.php.net/manual/en/ini.core.php#ini.register-globals
http://php.net/manual/en/security.globals.php
注意:此功能已从 PHP 5.3.0 开始弃用,从 PHP 5.4.0 开始被删除。
与其更改服务器配置以支持已弃用且不安全的功能,不如通过访问全局$_GET
来修复代码:
<?php
$Year = isset($_GET['Year']) ? $_GET['Year'] : null;
?>
<html>
<body>
<p>
<?php
echo htmlspecialchars($Year);
?>
</p>
</body>
</html>
PHP 指令 register_globals
将打开/关闭一个工具,以自动将查询字符串解码为同名的全局变量。在许多人看来,这是一个可怕的想法,因为变量可能没有明显的来源或价值。
它曾经默认为on
,但在PHP 4.2中改为off
。您仍然可以在 PHP 中启用它。.INI。它已从 PHP5.3 开始弃用,并在 PHP 5.4 中删除。
如果您的代码可以工作,但现在不能工作,请查找版本更改(到 PHP 5.4),或检查 php.ini 中的内容。
无论如何,如果您正在查看代码,现在可能是更改为对$_GET
的引用并禁用register_globals
的好时机