我有一个相当大的php网站,它是为php4和register_globals启用的。这是旧的自定义CMS。现在我想在没有register_globals的php5主机上运行它。是否可以使用某些脚本自动将参数从$ id解析为$ _GET [“id”]?
我可以在此网站上从wget -r
获取参数名称。
它有几十个PHP脚本,手动更改并不是很容易。
PS:UPDATE:我想只转换GET变量。每个参数的附加行为$var_name = $_GET["var_name"]
。该行应该在脚本中插入很高,例如在最顶部添加一个新的<? ?>
部分。
答案 0 :(得分:4)
运行此类工具会增加在代码中引入错误的风险。
我建议在superglobals上运行extract(),这样就可以强制register_globals和aplication正常工作。
http://php.net/manual/pl/function.extract.php
接下来,当一切正常时,为输入参数编写一个OO包装器,将其打包到漂亮的DI Container中并开始手动将整个脚本转换为新样式。
答案 1 :(得分:1)
我不知道有哪些工具可以帮助您进行转换,但您有几种选择:
extract
)。虽然这是最快速且最简单的解决方案,但它会导致register_globals众所周知的安全问题,并且它对应用程序的性能没有帮助根据您的描述,解决方案1或2可能是最适合您的,因为cms似乎无论如何都不会更新(这是一种耻辱)。
答案 2 :(得分:0)
虽然实际发现/替换可能需要更多时间,但手动执行此操作很可能会导致更少的错误/奇怪的行为。
如果不是该应用程序的原作者,那么这个手动查找/替换也是一个让您比某些自动方法更熟悉代码库的机会。
自动:快速,几乎肯定会导致一些可怕的错误
手动:较慢(可能),几乎肯定会导致更好的理解,更少的错误 - 并且由于您更好的理解,所引入的任何错误都将更容易修复。