2012-09-19 45 views
0

在我正在构建的页面上,我需要它根据URL末尾的变量将文件加载到页面的一部分。例如,如果页面URL是test.php?page = lp,那么该页面将包含lp.php文件......现在这个工作已经有一段时间了,但突然停止了,我只是得到一个错误,就好像文件不存在一样。然后我“prettied”了脚本,以便如果文件“未找到”,那么将显示一条消息这样说,是这样的:PHP包含URL变量出错

<?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)或发生了错误”。但是,这里是文件IS THERE,因为该页面也使用AJAX,并且如果我使用AJAX链接在完全相同的位置加载完全相同的文件,它可以工作! (同样,如果我在错误中输入地址显示,它将起作用)我已经使用了GET,以便脚本确定是否已设置$ page,因为这也改变了页面的其他元素,所以我知道这是行得通的。 ..但由于某种原因,它不再需要包含该文件 - 那么对此的解决方法是什么? (我试过它没有rootaccess位以及它仍然失败) 谢谢。 (也是,如果有人有任何想法,为什么包括($ rootaccess。$ page。“。php”)将有一天工作,然后停止工作,然后我很想知道,因为此刻我是只是在页面上大喊大叫才能正常工作!!!)

+1

我打赌你的主机曾经有'register_globals'打开,所以你可以直接访问'$ page'作为全局。改用'$ _GET ['page']'。但是要小心,除非你用像'../'这样的字符串值来过滤它,否则你会被目录遍历攻击所掩盖,可能会将文件系统中的任何可读文件暴露给Web。 –

回答

0

我想我以前曾经遇到过同样的问题。尝试使用:

$foo = trim($page.".php"); 

if(!file_exists($foo)) { 
    : 
} else { 
    include(trim($rootaccess.$foo)); 
} 
+0

这似乎工作。我仍然在页面刷新时出现错误,但这可能与AJAX有一些奇怪的冲突......只要禁用JS的人可以获取文件加载,那么我很高兴。 –