获取符号链接的当前工作目录

我有一台 Apache 服务器,它为一个站点(例如 example.com,位于 /var/www/html/)和另一个站点(例如 othersite.com,位于 /home/michael/public_html/)提供服务。我在后一个目录中有一个符号链接,它指向前一个文件。这是一个示例目录结构,为我要执行的操作提供一些上下文。

/var/www/html/:
    header.php
    a.php
    mydir/:
        b.php
    

/home/michael/public_html/:
    header.php -> /var/www/html/header.php
    a.php
    mydir/:
        b.php

header.php 包括行 require('a.php');。我期望的是,如果我正在访问 example.com,此 require 将加载到位于 /var/www/html/a.php 的文件中,但如果我在 othersite.com,它将加载 {{ 1}}。

为了更加清楚,假设这两个 /home/michael/public_html/a.php 文件具有以下内容:

a.php

如果我将浏览器指向 example.com/header.php,我会看到“我在 example.com”。同样,转到 othersite.com/header.php,我看到“我在 othersite.com”。到目前为止一切顺利。

这是我的问题。两个站点中的文件 /var/www/html/a.php: echo("I'm on example.com"); /home/michael/public_html/a.php: echo("I'm on othersite.com"); 都有 mydir/b.php 行,以便加载 require('../header.php')。再次,我希望看到不同的字符串,具体取决于我所在的站点我来访。但是在我的浏览器中,当我同时访问 example.com/mydir/b.php othersite.com/mydir/b.php 时,我看到“我在 example.com 上”。

通过阅读 require/include 的文档,我很确定我明白发生了什么。

  • 当我转到 othersite.com/header.php 时,当前工作目录是 header.php。因此 /home/michael/public_html/ 行正确加载了 require('a.php');,因为它能够在当前工作目录中找到它。
  • 当我转到 othersite.com/mydir/b.php 时,当前工作目录是 /home/michael/public_html/a.php。在这种情况下,/home/michael/public_html/mydir/ 不在当前工作目录中,因此不会从那里加载。相反,PHP 会检查调用脚本的目录中是否有 a.php。由于 a.php 是指向 /home/michael/public_html/header.php 的符号链接,因此它始终将“调用脚本的目录”视为 /var/www/html/header.php,因此它始终加载 /var/www/html/

那是很多细节,但我希望一切都清楚。

我想要的是让 /var/www/html/a.phpothersite.com/mydir/b.php 加载的某种方式。在我的脑海中,我想我正在寻找某种方法来获取 /home/michael/public_html/a.php 的父目录,例如 header.php,但它也可以检测脚本何时被符号链接调用,并返回父目录链接的目录。然后,我可以在调用 dirname(__FILE__) 之前chdir(...) 到我想要的目录,然后再切换回来。

当然,我对其他建议持开放态度,但我肯定希望它们只涉及更改 a.php 而不是 header.php。这是因为 mydir/b.php 确实代表了几个不同目录级别的数百个页面,其中许多页面我没有管理,并且编辑所有这些页面是不可行的。

这可能吗?

xiong_yingwen 回答:获取符号链接的当前工作目录

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/15219.html

大家都在问