我有一个看起来像这样的文件夹
/optik
|- shadow
- auth.ini
|- htdocs
|- index.php
我有一个实际的目录
/
|- skel
|- include.php
现在,我从skel创建了一个符号链接阴影,所以我在skel中放置的内容将出现在shadow文件夹中。我这样做是因为我在skel中有动态文件,我会不时更改,所以我不想在每个用户文件夹中保留skel内容的重复副本。所以我想到了一个快捷链接。
但是现在我想看看我的index.php是否可以做这样的事情
的index.php
<?
include "/optik/shadow/include.php";
// content
和我的include.php
<?
include "../auth.ini";
// some stuff with auth.ini
我的目标是,我想知道我是否可以像PHP中的实际目录一样使用符号链接。从符号链接的角度来看,它需要在1个目录中访问auth.ini,但在实际的skel目录中该文件不存在,我需要指定我的auth.ini的整个目录路径。但是,由于用户文件夹都不同,因此无法知道要指定的目录路径。
我怎样才能让这样的事情发挥作用?
答案 0 :(得分:3)
PHP应该尊重符号链接并遵循它们,就好像它们是标准目录一样。
但是,您仍在使用index.php
所在的原始目录。这意味着include "../auth.ini";
调用将在/optik
(上面的htdocs
目录)而不是上面包含的文件所在的目录中查找。
您可以使用realpath()和dirname()的组合来计算您想要获取的文件的实际规范路径。
答案 1 :(得分:1)
根据您的示例,要包含optik/auth.ini
文件中的optik/shadow/include.php
index.php
,您可以使用以下内容
// optik/htdocs/index.php
// First, add the `optik` directory to the include path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(dirname(dirname(__FILE__))),
get_include_path()
));
include 'shadow/include.php';
// optik/shadow/include.php
include 'auth.ini';
由于index.php
是父文件,因此将包含路径从那里级联设置为任何其他包含的文件。
现在,关于符号链接,你提出的建议应该可以正常工作。您必须记住的(这是一个庞大的PITA)是__FILE__
和__DIR__
常量将解析符号链接。 PHP绝对无法确定符号链接文件或目录的未解析路径。
为了说明这一点,即使您通过include.php
符号链接添加了shadow
文件,在该文件中使用__FILE__
也会始终返回/skel/include.php