【问题标题】:Browser-side path of an included file in PHPPHP中包含文件的浏览器端路径
【发布时间】:2011-11-28 22:37:25
【问题描述】:

在 PHP 中,

  • $SERVER["PHP_SELF"] 给出了被调用 URL 的绝对“路径”部分;
  • __FILE__ 给出被包含文件的绝对本地路径

因此:

/* /MyServer/stuff/include.php */
<?php echo $SERVER["PHP_SELF"] . PHP_EOL; echo __FILE__ . PHP_EOL; ?>

/* /MyServer/index.php */
<?php include("stuff/include.php");
      echo $SERVER["PHP_SELF"] . PHP_EOL; echo __FILE__ . PHP_EOL; ?>

当我继续 http://www.example.com/index.php 时,我会得到:

/index.php /MyServer/stuff/include.php /index.php /MyServer/index.php

我的问题是:我如何获得“/stuff/include.php”,换句话说,我的包含文件的“http”页面?当然,我可以对其进行硬编码,或者以编程方式推断它,但我想要一种可靠的方式。理想情况下,这是我不知道的一些 PHP 魔法常数。

【问题讨论】:

  • 我有点困惑。你到底需要在运行时推断什么?
  • $_SERVER['SCRIPT_NAME'] 可能是您正在寻找的东西,不确定但请尝试一下,看看它是否返回您需要的东西。如果不是,也许$_SERVER['REQUEST_URI']?另见$_SERVER variables
  • 要查看您可用的所有信息,请在您的一个页面上执行print_r($_SERVER); 并查看提供的所有“魔法”。

标签: php path


【解决方案1】:

硬编码(配置文件)变体是最好的选择。 没有“神奇的常数”可以帮助你。

当您查看docs 时,您可以通过一些选项提取脚本路径。但是请注意,这些值取决于服务器配置/请求,因此您的“可靠方式”可能会适得其反。

【讨论】:

    【解决方案2】:

    试试这个:

    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http';

    $url = $protocol 。 $_SERVER['HTTP_HOST'] 。 $_SERVER['REQUEST_URI'];

    回显 $url;

    $arrUrl = parse_url($protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); print_r($arrUrl);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-31
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      相关资源
      最近更新 更多