我正在使用PHP和Javascript制作一个小文件浏览脚本,我遇到了一个小问题。当当前目录位于基础中时,当前目录作为GET存储为index.php?dir=/projects/jphp
。然后我使用:
$scandir
中
$scandir = $_GET['dir'];
因为fiels列在一个表中,所以用户可以看到它们,文件夹是这样的超链接:
<td><a style="color: red;" href="edit.php?pid=<?php echo $project['id'] ?>&dir=<?php echo $scandir . "/" . $thisfile; ?>"><?php echo $thisfile; ?></a></td>
变量$thisfile
使用foreach()
循环填充,该循环遍历目录中的每个文件。
当用户开始浏览文件夹和文件时,文件地址变得混乱,例如,在浏览文件一分钟后,$_GET['dir'];
看起来像
projects/jphp/js/../js/../../../projects/jphp
有没有办法保持路径简单,因为上面的路径与
完全相同projects/jphp
如果你知道如何将顶部隐藏到底部,那就太棒了,谢谢!我可能没有解释得这么好,所以让我知道你我没有意义。
答案 0 :(得分:2)
函数realpath()
可以满足您的需求。如果您没有收到任何结果,请检查您的文件夹权限:
The running script must have executable permissions
on all directories in the hierarchy, otherwise
realpath() will return FALSE.
答案 1 :(得分:0)
我认为您可以使用&dir=/some/path/../
替换&dir=/some/
之类的链接,因此只需链接到/some/path/../
,而不是/some/
,它们是相同的。
<强> UPD:强>
例如:
<?php
$dir = $scandir;
if( $dir=='..' ){
if( $scandir=='' || $scandir=='/' ){
// skip this entry using continue or something else
}
if( substr($scandir,-1)=='/' ){
$dir = dirname(substr($scandir,0,-1)).'/';
}else{
$dir = dirname($scandir).'/';
}
if( $dir=='' ){
$dir = '/';
}
}else{
$dir = $scandir.'/'.$thisfile;
}
?>
<td><a style="color: red;" href="edit.php?pid=<?php echo $project['id'] ?>&dir=<?php echo $dir; ?>"><?php echo $thisfile; ?></a></td>