不同目录中php文件之间的硬链接,应该是__FILE__的预期行为

时间:2015-04-22 18:37:33

标签: php apache caching apc

我有两个结构相同的网站。 index.php文件需要根据提供页面的域生成不同的内容。我正在使用apache 2.2并使用/ var / www下的两个不同文件夹创建了两个虚拟主机(/var/www/site.domain.com和/var/www/site.domain.ca)

我正在使用 FILE 来获取执行index.php的完整路径,并根据路径输出正确的内容。

由于文件都是一样的,我想使用链接来编辑文件更容易,所以不是编辑index.php之一,而是将其复制到另一个目录,我想编辑其中一个文件来更新另一个。

我使用cp -al命令复制硬链接:

cp -al /var/www/site.domain.com /var/www/site.domain.ca

问题是,当我访问一个站点中的index.php文件而不是另一个站点时, FILE 变量不反映index.php文件正在执行的路径。根据我首先访问的域名,文件将反映该域的路径。

我会尝试使用getcwd来查看它是否有效,但有人可以解释为什么会这样。不应该 FILE 反映当前正在执行的脚本。

这些是硬链接,而不是软链接。

apache缓存脚本,APC是问题的根源吗?

更新:getcwd()工作,似乎总是返回正确的当前目录。

1 个答案:

答案 0 :(得分:0)

这就是硬链接的工作方式。系统不会扫描整个文件系统来尝试找出文件的替代名称。硬链接就是那么......很难。 “这是此文件的官方,不变,不可变的名称”。

e.g:

$ cat z.php
<?php
echo __FILE__, "\n"
$ mkdir subdir
$ cd subdir
$ ln ../z.php hardlink.php
$ ln -s ../z.php softlink.php
$ php hardlink.php
/home/marc/test/subdir/hardlink.php
$ php softlink.php
/home/marc/test/z.php

现在请注意,硬链接显示硬链接本身的位置,而软链接(aka symlink)显示链接的目标,而不是链接本身。

相关问题