gpt4 book ai didi

php - 如何让 PHP、Symlinks 和 __FILE__ 很好地协同工作?

转载 作者:IT老高 更新时间:2023-10-28 12:37:14 31 4
gpt4 key购买 nike

在本地主机上。我有以下目录结构:

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

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

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

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

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

文件夹总是解析为:

/share/www/trunk

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

/share/www/portfolio/.

是否可以在 PHP 中将文件包含在 share/www/portfolio 目录中的文件,该文件是在指向 /share/www/trunk/.../plugins 的符号链接(symbolic link)中执行的脚本目录?

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

最佳答案

我在您的代码中看到的问题是 __FILE__ 会自动解析符号链接(symbolic link)。

来自 Magic Constants 上的 PHP 手册

... Since PHP 4.0.2, __FILE__ always contains an absolute path with symlinks resolved ...

您可以尝试改用 $_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');
}

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

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

关于php - 如何让 PHP、Symlinks 和 __FILE__ 很好地协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221771/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com