2012-11-14 62 views
0

好吧,即时制作文件系统查看器。 虽然我坚持这一点,但我有一切工作正常,除非当我点击后退按钮我已经作出。php,substr编辑

所以我有一个像这样

http://www.grubber.co.nz/update/index.php?dir=../developer/_social_development

该脚本将进入文件夹/开发商/ _social_development

但当我想回去我按后退按钮和一个字符串它将返回顶部目录,因此它会一路返回到第一个'/',例如http://www.grubber.co.nz/update/index.php?dir=../ I使用此代码返回到l不工作

$dir = $_GET['dir']; 
$marker = "/"; 
echo $str = (substr($dir, 0, (strpos($dir, $marker) + strlen($marker)))); 

它所做的AST页面删除寄托都在第一“/”,但我希望它转到最后一个“/”例如,它是这个/开发商/ _social_development当我在以前的文件夹我希望它是/开发商也该字符串将取决于你是什么文件夹更改点击,所以我不能只是删除字符集量

感谢您的帮助

+1

你可以使用'爆炸()''哪个/开发/ _social_development'转换成数组那么容易,你可以去prev和next – GBD

+1

不是真的用你的问题去做,但你意识到你可以做到这一点不是吗?可能导致安全漏洞:http://www.grubber.co.nz/update/index.php?dir=../../../../../../../ – Adam

+0

@Adam hehehe我没有放弃:-D,我刚开始这个项目就像一个小时前的项目,所以我有一些错误:--D,生病很快就修复它们,但谢谢 – ryanc1256

回答

2

使用另一种方法海峡pos,你可以使用爆炸。这里完整代码:

$dir = '../developer/_social_development'; 
$marker = "/"; 
$arrDir = explode('/', $dir); 
array_pop($arrDir); 
$dir2 = implode('/', $arrDir); 
echo $dir2; 

结果:../developer

+0

非常感谢帮助 – ryanc1256

0

相反使用strpos()给你的位置n在字符串中首次出现字符时,应该使用strrchr(),这会给出字符串中最后一次出现位置的位置

0

不是一个非常好的解决方案,我个人使用RegEx方法,但如果你想使用STR位置,你可以这样做:

$dir = $_GET['dir']; 
$marker = "/"; 
echo $str = strrev(substr(strrev($dir), (strpos($dir, $marker) + strlen($marker)))); 

或者正则表达式基础的解决方案:

$dir = $_GET['dir']; 
echo $str = preg_replace("/\/[^\/]+$/", "", $dir); 
0
$path = '/foo/bar'; 
$path = $path . '/..'; // /foo/bar/.. 
echo realpath($path); // Shows /foo