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"]
文件系统路径.