2013-06-05 32 views
1

我有一個文件夾project2與一些PHP文件,擴展與一些通用文件,我作爲符號鏈接添加到另一個文件夾project。例如:符號鏈接的PHP腳本的工作目錄

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.phpproject/templates/等它看起來像PHP有些甚至解決之前,工作目錄設置符號鏈接,它用於提供內容提供內容並找到要包含的文件。然後將其設置到錯誤的位置。有什麼辦法可以規避這種行爲嗎?

+0

符號鏈接只是一個鏈接而不是實際的文件。正在運行的腳本位於/ project中,而不在/ project2中,因爲它實際上運行的不是鏈接文件。想象一個象路標那樣的符號鏈接,而不是像這樣去這裏。 – Anigel

+1

我認爲這並不容易。通常,符號鏈接對於不關心符號鏈接的應用程序是不可見的。它應該爲用戶表達(我的個人意見)。因此,如果PHP只是'打開'給定的路徑,它將得到PHP腳本,並且如果Apache或PHP將使用給定路徑的'dirname'更改爲目錄,則它將在project2中結束。但出於某種原因,PHP實際上完成了你自己說的話,例如。它會以某種方式「關心」符號鏈接,並在進一步處理之前解決它們,例如更改工作目錄,從而導致錯誤的位置。 – dronus

回答

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總是包含解析符號鏈接的絕對路徑,而在較早的版本中,它包含在某些情況下的相對路徑。

+0

那麼,你的例子結果是'好',因爲第二個例子中的當前工作目錄實際上是'b'。 但這並不是我在網絡服務器上遇到的情況。在這裏,工作目錄'。'指向已解析路徑指向的文件夾,而不是指向腳本從中調用的目錄。 – dronus

+0

您確定工作目錄也是被調用的_first_/original文件中的解析路徑,而不是其他包含/必需的文件嗎? – Wrikken

相關問題