为此,我通常使用简单而愚蠢的方法,例如:
如果用户可以从应用程序的不同入口点不确定地访问,则入口点应该知道相对于应用程序根的“它们在哪里”。
首先,我应该知道我当前脚本 wr 应用程序根目录的相对位置,所以我静态写入脚本,即;对于应该在的脚本
...approotdirname/appsubdir1name/appsubdir2name/here.php
.
$relPath = 'approotdirname/appsubdir1name/appsubdir2name';
- 请注意,如果您的脚本位于应用程序根目录,则下面计算的 $curPath 将直接是您在服务器上的应用程序位置。
其次,我应该以统一的格式从 Php 中学习当前的脚本文件路径:
$curPath = str_replace('\\','/',dirname(__FILE__));
(str_replace 用于将 \ 替换为 / 以防它们存在。)事实上,$relPath 的副本(如果计算正确)应该存在于 $curPath 的末尾。
然后我会在$curPath中找到$relPath的位置:
$p = stripos($curPath, $relPath, 0);
if(($p === false)||($p < 0)){echo "Relative path: $relPath is invalid."; exit(0);}
现在,当我们从 $curPath 中减去 $relPath 时,我们得到了我们的应用程序根在服务器上的位置,并进行了一些检查。
$rootPath = ($p > 0)? substr($curPath, 0, $p-1): '/';
我希望这有帮助。
请注意,通过单个点(如应用程序根目录的 index.php)限制用户访问通常被认为是一种更好的做法。在入口点你可以得到
$rootPath = str_replace('\\','/',dirname(__FILE__)).'/';
并通过您的应用程序将其全部用于文件访问和包含。作为奖励,您可以在不破坏其文件关系的情况下移动整个应用程序。