动态查找路径,有更好的方法吗?

时间:2010-11-19 13:04:17

标签: php path

我希望能够移动我的代码并能够发现路径以影响某些变量的值。这将放在变量初始化的页面中。

以下是我提出的建议:

$path_array = explode('/', $_SERVER['SCRIPT_FILENAME']);

$out = "";
// -3 represents the number of folders and files to go back to reach the wanted path

for($i=0; $i < count($path_array) - 3; $i++){
    $out .= $path_array[$i].'/';
}

然后,作为一个例子,我可以做以下事情:

$dyn_path_1 = $out . 'folder1/';
$dyn_path_2 = $out . 'folder2/something_else/';
$dyn_path_3 = $out . 'folder3/';

是否存在我可能遗漏的内置功能会导致这种功能过时?

ps:这将使我们能够拥有多个代码的工作副本,而无需在检查代码时担心这些变量。

编辑#1:

变量文件的路径:root / folderA / folderB / var.php

在var.php中,我必须回到root,这是2-3步,具体取决于方法。我想知道是否有可能做这样的事情:

echo some_function("../../file_I_know.php");

哪个可以返回:C:/ root /

3 个答案:

答案 0 :(得分:0)

嘿,您可能想尝试__FILE__,这是您所在文件的绝对路径。而dirname(__FILE__)可能正是您所需要的。

答案 1 :(得分:0)

看看PHP的“魔术常量”定义,大多数人使用dirname( FILE )来获取最初执行脚本的目录,将其绑定到常量并使用它作为所有其他目录引用的基础。从而使您的脚本位置独立。

这是我通常使用的:

if (!defined('SITE_BASE_PATH')) {
  $baseDir = dirname(__FILE__); // Get directory of THIS file
  $baseDir = str_replace("\\", "/", $baseDir); // Replace backslashes with forward incase we're in Windows
  $baseDir = realpath($baseDir); // Convert relative path to real path (no '..' etc)
  $baseDir .= "/"; // Add trailing slash - so that we can append filenames directly
  define('SITE_BASE_PATH', $baseDir); // define the constant
}

或简称:

define(SITE_BASE_PATH, realpath(str_replace("\\", "/", dirname(__FILE__))) . '/');

有关详细信息,请参阅以下帮助: http://php.net/manual/en/language.constants.predefined.php

答案 2 :(得分:0)

我认为这是一种防止boollet的方式(在index.php中):

对于公共目录使用此: realpath (dirname (__FILE__))

用于应用程序库目录: realpath (dirname (__FILE__). "/../")

希望有所帮助。