符号链接PHP脚本的工作目录

时间:2013-06-05 16:15:26

标签: php symlink working-directory

我有一个带有一些PHP文件的文件夹project2,扩展了一些我作为符号链接添加到另一个文件夹project的通用文件。例如:

project/index.php 
project/config.php 
project/templates/...
...

project2/project2_functions.php
project2/config.php
project2/index.php -> ../project/index.php
project2/templates/...
...

但是,如果我浏览project2/index.php,它似乎使用project/config.php并从project/templates/等提供内容。看起来PHP甚至在设置工作目录之前解析了符号链接,用于传递内容并查找要包含的文件。然后将其设置为错误的位置。有没有办法绕过这种行为?

1 个答案:

答案 0 :(得分:1)

这完全取决于您如何包含这些文件:

$ mkdir {a,b}
$ echo 'in A' > a/file
$ echo 'in B' > b/file
$ echo '<?php echo file_get_contents(__DIR__."/file"); echo file_get_contents("./file");' > a/idx.php        
$ ln -s ../a/idx.php b/
$ cd a
$ php idx.php 
in A
in A
$ cd ../b
$ php idx.php 
in A
in B

请注意remark about __FILE__(对__DIR__也有效):

  

自PHP 4.0.2起, FILE 始终包含已解析符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径。