【问题标题】:get current directory of symlink'd php script and not actual php script获取符号链接的 php 脚本的当前目录,而不是实际的 php 脚本
【发布时间】:2012-05-18 13:06:36
【问题描述】:

我有一个从一个文件夹符号链接到另一个文件夹的脚本

/var/www/default/index.php

符号链接到

/var/www/mysite/index.php

但是,当我从 mysite 调用 DIR 时,路径会解析为默认情况下的原始路径。我如何让它返回 mysite 路径(符号链接文件夹,而不是实际文件夹)

【问题讨论】:

  • 您可以var_dump($_SERVER) 看看是否有任何路径变量包含您需要的路径。

标签: php directory symlink


【解决方案1】:

对于 Web 服务器请求

dirname($_SERVER['SCRIPT_FILENAME']) 会给你你所需要的。

$_SERVER['PHP_SELF'] 甚至 REQUEST_URI 可能无法满足您的需求,具体取决于您的服务器配置。

对于 CLI(命令行)

这在 cli(命令行)脚本中不起作用,因为 $_SERVER 是由 Web 服务器添加的。

幸运的是,使用 cli 脚本要容易得多(因为没有网络服务器可以搞砸事情)。

您只需阅读启动脚本的命令行:http://php.net/manual/en/reserved.variables.argv.php。第一个参数 $argv[0] 始终是用于运行脚本的名称。

【讨论】:

  • 感谢罗比的建议。使用你所说的我想出了这个适用于 web 和 cli 的方法。定义('ROOT', 目录名($_SERVER['SCRIPT_FILENAME']));
  • 不错的解决方案,罗比。你能改正dir_name中的错字吗(应该是dirname
  • 当然不是 - $_SERVER 是由 Web 服务器添加的。幸运的是,使用 CLI 脚本要容易得多,因为 Web 服务器不会弄乱路径。您只需阅读启动脚本的命令行:php.net/manual/en/reserved.variables.argv.php。我会补充回答。
  • 读者,当心! “$_SERVER['PHP_SELF'] 甚至 REQUEST_URI 都会有它。”部分完全不正确。它们是URL 路径,与脚本的实际文件系统(dir)路径无关。他们可能不小心有一些匹配的部分,但仅此而已。例如。 $_SERVER['PHP_SELF']$_SERVER['REQUEST_URI'] 的快速测试包含 /prj/tag-test/prop-autotest/,而实际目录是:/srv/szabi/prj/ALL/devtools/test/prop-autotest,根据 Web 服务器配置...
  • @sz - 感谢您的评论 - 对于第一个选项不起作用并且您需要后备的情况,它被添加为替代选项。我添加了“可能”这个词并澄清它取决于服务器配置。
【解决方案2】:

如果您正在寻找 cli 脚本的完整未解析系统路径,则 SCRIPT_PATH 将不够用。

php -f symlink/script.php

SCRIPT_FILENAME 将包含 symlink/script.php

我创建了一个 gets the unresolved path to the php file. 的 php/gist

这是函数的结果:

 $ php -f subdir/mysymlink/subdir/mysymlink/subdir/mysymlink/app.php
 PWD: /tmp/phpcode                                                                           
 SCRIPT_FILENAME: subdir/mysymlink/subdir/mysymlink/subdir/mysymlink/app.php                 
___FILE__ : /tmp/phpcode/app.php                                                             
 getSymlink(): /tmp/phpcode/subdir/mysymlink/subdir/mysymlink/subdir/mysymlink               

【讨论】:

    【解决方案3】:

    如果您想通过符号链接获取当前路径,您可以询问您的主机操作系统:

    $path = exec('pwd');

    【讨论】:

      【解决方案4】:

      可能有用:

      var_dump($_SERVER['PWD']);
      

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 2011-11-10
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多