gpt4 book ai didi

php - 从层次结构中较深的文件调用 $_SERVER ['SCRIPT_NAME' ]

转载 作者:可可西里 更新时间:2023-11-01 12:18:00 25 4
gpt4 key购买 nike

(初步说明:这个问题似乎已经有很多变体,但它们似乎都集中在物理 PHP 文件本身的文件系统位置,而不是网络 事物的 URL 位置,这就是我所追求的。)


简介 1:

我有一个小型“网站”,其物理文件系统结构如下:

variable.php
folder
test.php

(换句话说,variable.php 在顶层,test.php 在文件夹 folder 中。)

文件内容如下:

<?php
//variable.php
$basePath = dirname($_SERVER['SCRIPT_NAME']);
?>

<?php
//test.php
include("../variables.php");
echo $basePath;
?>

简介 2:

在本地开发这个“网站”时,在这个地址:

http://localhost/~noob/test-website

问题:

问题是,如果我将 http://localhost/~noob/test-website/folder/test.php 放入我的浏览器,它会打印出 /~noob/test -网站/文件夹/

我希望它打印出 /~noob/test-website(variable.php 的“网络位置”)。换句话说,我希望从所有文件(甚至文件系统层次结构中更深的文件)到 /~noob/test-website 进行全局访问。我该如何实现?

我显然不想硬编码这条路径。原因是当我将它上传到生产服务器时,位置会更改为更合理的位置,例如 http://example.com/ (而且我不想在上传到服务器后修改这个硬编码路径,因此当然会出现这个问题)。

最佳答案

这里的问题是,您的网络服务器(以及 PHP)不知道您的测试根目录是由子目录提供的,事实上它们都不关心。

显而易见的解决方案是在每个服务器上提供一个配置脚本,其中包含硬编码的相对根目录。正如您已经说过的,您不想这样做。 (提供特定于服务器的配置文件实际上并不是一件坏事,很多人做了更荒谬的事情)

为了解决这个问题,解决方案必须依赖于可用于特定请求的引用点。这些引用点是:

  • variables.php 的文件系统位置
  • 所请求脚本的文件系统位置。
  • 文件系统位置,即提供页面的根目录

(我知道您强调的是不是文件系统 - 继续阅读,我们使用这些来获取您的值(value))

有了这些值,目录结构就会有重叠。这就是您所追求的值(value)。

例子:

  • 您的测试站点位于:http://localhost/c/
  • 请求:http://localhost/c/d/myscript.php
  • variables.php 位于:/a/b/c/variables.php
  • myscript.php 位于:/c/d/myscript.php 包括 ../variables.php

如您所见,路径与 /c/ 目录重叠。

在您的 variables.php 中,您可以使用以下代码来计算重叠。

$fsRoot = __DIR__; // dirname(__FILE__) for PHP < 5.3 (and shame on you!)
$webRoot = str_replace($_SERVER['PHP_SELF'], '', $_SERVER['SCRIPT_FILENAME']);
$urlRoot = str_replace($webRoot, '', $fsRoot);

你永远不应该依赖 DOCUMENT_ROOT 它很容易是不正确的,所以我们自己计算它($webRoot 变量)。

这会获取站点根目录中 variables.phpfilesystem 目录,并删除作为基础的 filesystem 目录该页面是从中提供的。剩下的就是实际网络根目录和您的子目录网络根目录之间的所有内容。

myscript.php 中,您可以执行以下操作。

print $urlRoot . '/filename.js';

示例的输出为 /c/filename.js

关于php - 从层次结构中较深的文件调用 $_SERVER ['SCRIPT_NAME' ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com