繁体   English   中英

动态寻找路径,有没有更好的方法?

[英]Dynamically finding paths, is there a better way?

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

这是我想出的:

$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中,我必须回到根目录,这取决于方法,需要2-3步。 我想知道是否可以做这样的事情:

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

可能返回:C:/ root /

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

看一下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/zh/language.constants.predefined.php

我认为这是最安全的方法(在index.php中):

对于公共目录,请使用以下命令: realpath (dirname (__FILE__))

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

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM