【发布时间】:2012-09-11 08:37:12
【问题描述】:
在我正在构建的页面上,我要求它根据 URL 末尾的变量将文件加载到页面的一部分中。例如,如果页面 URL 是 test.php?page=lp 那么页面将包含文件 lp.php ......现在这工作了一段时间,但突然停止了,我只是好像文件不存在一样返回错误。然后我对脚本进行了“美化”,这样如果文件“未找到”,则会显示一条消息,如下所示:
<?php $times = substr_count($_SERVER['PHP_SELF'],"/");
$rootaccess = "";
$i = 1;
while ($i < $times) {
$rootaccess .= "../";
$i++;
}
$y = date("Y");
$ymo = $y-1;
//$rootaccess.
if(!file_exists($page.".php")){
echo "The file requested (www.websitename.co.uk$rootaccess$page.php) was not found, or an error occured";
}
else {include($rootaccess.$page.".php");} ?>
所有发生的事情都是如果找不到文件就会被抛出......所以对于 test.php?page=lp 的示例,返回消息“请求的文件 (www.websitename.co. uk/lp.php) 未找到,或发生错误”。但事情是这样的,文件就在那里,因为页面也使用 AJAX,如果我使用 AJAX 链接在完全相同的位置加载完全相同的文件,它就可以工作! (同样,如果我在错误中输入地址显示,它会起作用)我使用 GET 来让脚本确定 $page 是否已设置,因为这也会更改页面的其他元素,所以我知道这是有效的。 ..但由于某种原因它不再想要包含该文件 - 那么解决方法是什么? (我也尝试过没有rootaccess位,但仍然失败) 谢谢。 (另外,如果有人对为什么 include($rootaccess.$page.".php") 会在一天工作然后在下一天停止工作有任何想法,那么我很想知道,因为目前我只是对着页面大喊让它工作!!!)
【问题讨论】:
-
我打赌你的主机曾经打开过
register_globals,所以你可以直接作为全局访问$page。请改用$_GET['page']。但请注意,除非您根据../之类的字符串值对其进行过滤,否则您很容易受到目录遍历攻击,可能会将文件系统上的任何可读文件暴露给网络。
标签: php variables if-statement include urlvariables