【问题标题】:Comparison failing after PHP upgradePHP升级后比较失败
【发布时间】:2012-09-07 17:21:27
【问题描述】:

此代码曾经在 PHP4 的早期版本中工作,但现在托管服务器已升级到 PHP5,因此不再在我的网站上工作。有什么简单的方法可以更改此代码以使其再次工作?

<?
if ($info == "file1") {include ("file1.html");}
if ($info == "file2") {include ("file2.html");}
if ($info == "file3") {include ("file3.html");}
if ($info == "file4") {include ("file4.html");}
if ($info == "file5") {include ("file5.html");}
?> 

编辑:是的,这是我在最终网站上的代码(这里不是 PHP 专业人士)。我只是在一个简单的链接中调用“$info=_”(我想返回 www.website.com/?info=file),即:

<a href="?info=file1">Click here to read File 1</a> 

【问题讨论】:

  • 你得到什么错误信息?
  • 那么$info 来自哪里?您不希望它通过 register_globals 来自查询字符串,是吗? (如example.com/index.php?info=file5
  • 是的,$info 从何而来? PHP4 和 PHP5 之间的代码没有区别。
  • 缺少.。在您的file5 中也...
  • @Bgi - 没有错误,现在什么也没有显示(不包括文件)

标签: php if-statement include php4


【解决方案1】:

如果这是实际代码,您的问题是在 PHP 块的开头使用了短标签 &lt;?。 PHP5 默认不再支持这些。而是使用

<?php ...code here... ?>

或者,您可以要求您的提供商在 php.ini 中设置“short_open_tag”选项。

【讨论】:

  • 是的,这是实际代码。是不是代码结构不好?还是根本不合适?几年前,我最初实现了它。我也尝试过使用开头的“
【解决方案2】:

根据您的编辑,问题似乎在于您在 php.ini 文件中的旧版本 php 中启用了 register_globals

register_globals 提取所有全局变量,因此在您通常使用$_GET['info'] 的地方,打开register_globals,您可以简单地使用$info

此功能在 php 5.3 中已弃用,并从 php 5.4 中删除,因为它会带来巨大的安全风险。

为了解决你的问题,你可以在你的条件之前设置变量:

$info = $_GET['info'];
if ($info == "file1") {include ("file1.html");}
...

【讨论】:

  • 幸运的是,如果它们都包含在 if 语句中,则可以减轻目录遍历攻击
  • @Michael Berkowski 我刚刚删除了我关于清理输入的评论,因为它在这里并不合理......
  • @jeroen - 你这个男人的天才!谢谢!这正是问题所在。谢谢你的解释......所以使用“$info = $_GET['info'];”安全吗?
【解决方案3】:

默认不启用短标签&lt;? ?&gt;

在不知道您的错误的情况下,尝试使用&lt;?php 而不是&lt;?

更新:由于您显然包含带有短打开标签的页面,因此在您的调用页面中,您可以调用:

ini_set('short_open_tag', '1');

我怀疑您的服务提供商会为您设置短开放标签属性。

【讨论】:

  • 感谢您的回复。我也尝试过使用开头的“
  • 没有错误,内容只是现在不显示(文件不包括在以前的位置)。
【解决方案4】:

您的代码中有错误。改变这个:

if ($info == "file5") {include ("file5html");}

到这里:

if ($info == "file5") {include ("file5.html");}

【讨论】:

  • 很明显不是他的生产代码,只是一个例子(或者至少我希望如此)
  • 哇,你们这些投反对票的人太可笑了。我们无法知道这是否是生产代码。上面的答案甚至说,“如果这是实际代码……”
  • 他没有说问题只出在file5上!他会提到的。
  • @Bgi:更正:他可能提到过。同样,没有办法知道,所以我先回答了最明显的问题。
  • 这可能是也可能不是答案,所以我认为不需要对此投反对票。也许评论这个问题,看看它是否是实际的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 2021-04-14
  • 2020-06-30
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多