【问题标题】:PHP include code for if file exists and what to do if it doesn'tPHP包含文件是否存在的代码以及如果文件不存在该怎么办
【发布时间】:2014-08-20 00:44:32
【问题描述】:

很久以前,这段代码可以正常工作,但现在似乎有什么东西阻止了它正常运行。我希望有人能告诉我发生了什么事。我担心升级到 PHP 已经杀死了这段代码。还是有?

我使用这段代码(发布在下面)来检查是否存在 html 文件,如果存在,它将使用它。如果没有,它将使用文件 index2.html。

<?php if ((file_exists("$id.html")) == true) { require ("$id.html"); } else { require ("index2.html"); } ?>

我在我的主页 index.php 上使用此代码。但是由于一些奇怪的原因,当我输入一个链接时:example: index.php?id=exampleurlhere,代码没有检查文件是否存在并且自动使用 index2.html 文件,尽管我的代码告诉如果文件存在(它确实存在),则需要使用它。为什么它现在无视我的命令?

多年来一直使用此代码,直到最近才出现任何问题。有什么建议可以解决吗?

【问题讨论】:

  • 这只是您使用的代码吗? $_GET['id'] 是否已分配给 $id
  • 尝试使用if(file_exists("$id.html") == true) 而不是if ((file_exists("$id.html")) == true) - 有时,额外的括号可能会耍花招。
  • 但是,这个require ("$id.html") - 那个.html 文件里面有什么?需求通常与类/函数等有关。
  • 遗憾的是没有变化。为了回答您的问题,这些 html 文件中包含图片和文本。不,没有 $_GET 代码,而且从来没有,即使它正在工作。也许这已经改变了?
  • 那么,$id 是如何定义的?

标签: php file-io include require


【解决方案1】:

我认为问题在于“register_globals”设置。这曾经在(非常)旧版本的 PHP 中默认启用,但在较新的版本中已被删除,因为这会在旧 PHP 中造成大量变量注入攻击。

您的 $id 直接来自 URL 中的值。现在它不再自动注册,您可以添加一行“$id=$_GET['id'];”就在这条线之上,让它再次工作。

这只是一个快速修复。建议你重写程序,这样就不会改变用户非法使用URL访问文件的情况了。

【讨论】:

  • 谢谢。那个代码成功了。我不是一个 php 编码器,我只是碰巧遇到了那个代码年 agi 并且从那以后一直在使用它。所以我一点也不知道如何重写该代码以使其更安全。但我明白你关于它不安全的观点,所以他们关闭了它。再次感谢您的信息。
猜你喜欢
  • 2022-06-13
  • 2013-08-10
  • 1970-01-01
  • 2011-04-15
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多