我有两个结构相同的网站。 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()工作,似乎总是返回正确的当前目录。
答案 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)显示链接的目标,而不是链接本身。