我有一个带有符号链接的目录树。它们用require_once 调用,但有时用'm' 和有时用'mydir' 来引用它们。'm' 和 'mydir' 是符号链接的,但是当 require_once 被调用两次时,它会将它们视为不同的文件和代码错误。
require_once("m/myfile.php");
require_once("mydir/myfile.php);
我只希望文件包含一次,但它会尝试执行两次。
几年后,在 Windows 10 下,我遇到了类似的问题:
问题是,符号链接被创建为“文件”符号链接,但指向目录。删除符号链接并手动重新创建它们后
mklink /D link target
一切都按预期工作。
如果完全 OO http://php.net/manual/en/language.oop5.autoload.php或修复路径函数,我将使用我自己的 require 函数/自动加载 。
IE
//custom require
function myRequireOnce($filePath)
{//ensure only one version of sym path is ever used
$filepath = str_replace('mydir', 'm' , $filepath); //possibly too simple
require_once($filepath);
}
//fix path function
_fp($path)
{
return str_replace('mydir', 'm' , $filepath);
}
require_once(_fp("m/myfile.php"));
在所有情况下,目标是确保实际上只需要一个路径,并且在替代版本上进行转换。
Windows 中没有符号链接,抱歉。
如果您已经从 github 签出或下载了代码,然后将其放到 NTFS 文件系统中,您的下载程序可能会为链接创建文件两次,为链接文件创建一次。我经常看到这个