你如何让PHP,Symlinks和__FILE__很好地协同工作?

Aar*_*run 41 php linux symlink

在localhost上.我有以下目录结构:

/share/www/trunk/wp-content/plugins/otherfolders

/share/www/portfolio/wp-content/symlink

symlink符号链接在哪里/trunk/.../plugins/.基本上,这是因为我需要测试多个WordPress安装并设置它们,但我不想移动插件并将它们复制并粘贴到任何地方.

但是,有时我需要爬行目录树以包含配置文件:

 $root = dirname(dirname(dirname(dirname(__FILE__))));
      if (file_exists($root.'/wp-load.php')) {
          // WP 2.6
          require_once($root.'/wp-load.php');
      }
Run Code Online (Sandbox Code Playgroud)

该文件夹始终解析为:

/share/www/trunk

即使正在执行插件并将其包含在内

/share/www/portfolio/.

在PHP中是否可以将share/www/portfolio目录中的文件从符号链接中执行的脚本包含到/share/www/trunk/.../plugins目录中?

虽然这个问题只发生在我的测试服务器上,但我希望有一个安全可分发的解决方案,因此不能选择爬上额外的级别.

pfe*_*ate 31

我在您的代码中看到的问题是__FILE__自动解决符号链接问题.

来自Magic Constants的PHP手册

...自PHP 4.0.2起,__FILE__始终包含已解析符号链接的绝对路径...

您可以尝试使用$_SERVER["SCRIPT_FILENAME"].

$root = realpath(dirname(dirname(dirname(dirname($_SERVER["SCRIPT_FILENAME"])))));
  if (file_exists($root.'/wp-load.php')) {
      // WP 2.6
      require_once($root.'/wp-load.php');
  }
Run Code Online (Sandbox Code Playgroud)

请注意,我将该realpath()函数添加到根目录.根据您的设置,您可能需要也可能不需要它.

编辑:使用$_SERVER["SCRIPT_FILENAME"]而不是$_SERVER["PHP_SELF"]文件系统路径.