0

我正在调试一个我以前从未见过可操作的 PHP 文件(不是我的代码),但据说可以工作。

的示例代码片段myfile.php

<html>
<body>
<p>
<?
    echo $Year;
?>
</p>
</body>
</html>

从事物的连接方式来看,代码似乎设置为从查询字符串(HTTP GET)中提取年份:http ://server.com/myfile.php?Year=2010

据说这以前有效,但现在不再有效。

是否有 PHP 设置来控制它?这是在 PHP 版本中被禁用的“功能”吗?我从未见过在外部使用 GET 变量$_GET

4

2 回答 2

0

看起来以前的服务器设置为全局注册

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>
于 2013-09-20T01:59:12.933 回答
0

PHP 指令register_globals将打开/关闭自动将查询字符串解码为同名全局变量的工具。在许多人看来,这是一个可怕的想法,因为变量可能没有明显的来源或价值出现。

它曾经默认为,但在 PHP 4.2on中更改为。off您仍然可以在 PHP.INI 中启用它。自 PHP5.3 起已弃用,并在 PHP 5.4 中删除。

如果您的代码可以工作但现在不工作,请寻找版本更改(到 PHP 5.4),或检查 php.ini 中的内容。

无论如何,如果您正在查看代码,现在可能是更改对 的引用$_GET并禁用的好时机register_globals

于 2013-09-20T02:04:30.603 回答