gpt4 book ai didi

PHP 在 Windows 上的 Xampp 中正确获取 "Application Root"

转载 作者:行者123 更新时间:2023-12-04 06:53:28 27 4
gpt4 key购买 nike

我找到了 this thread on StackOverflow关于如何从我的网络应用程序内部获取“应用程序根”。

但是,该线程中建议的大多数方法几乎无法应用于我在 Windows 上的 Xampp。说,我有一个“common.php”,它保留在我的网络应用程序的应用程序目录中:

/
/app/common.php
/protected/index.php

在我的 common.php 中,我得到的是这样的:
define('DOCROOT', $_SERVER['DOCUMENT_ROOT']);
define('ABSPATH', dirname(__FILE__));
define('COMMONSCRIPT', $_SERVER['PHP_SELF']);

在我需要/protected/index.php 中的 common.php 之后,我发现了这个:
C:/xampp/htdocs     //<== echo DOCROOT;
C:\xampp\htdocs\comic\app //<== echo ABSPATH
/comic/protected/index.php //<== echo COMMONSCRIPT

所以最麻烦的部分是路径分隔符不通用,另外,似乎所有
$_SERVER[] asso 数组中的超全局变量,例如 $_SERVER['PHP_SELF'],与“调用者”脚本相关,而不是“被调用者”脚本。

看来只能靠 dirname(__FILE__)以确保这始终返回到 common.php 文件的绝对路径。

我当然可以解析 DOCROOT 和 ABSPATH 的返回值,然后计算正确的“应用程序根”。例如,我可以比较 htdocs 之后的部分并用斜杠替换所有反斜杠以获得类似 unix 的路径

我想知道这是处理这个问题的正确方法吗?如果我在 LAMP 环境中部署我的 Web 应用程序会怎样?这种依赖环境的方法会让我失望吗?

坦率地说,我使用了一些 PHP 框架,例如 CakePHP 和 CodeIgniter,它们只适用于 LAMP 或 WAMP,但我不确定它们是如何实现如此优雅的解决方案的。

非常感谢您提供的所有提示和建议。

最佳答案

dirname(__FILE__)是获取路径的常用方法。实际上,如果您的脚本只能在 PHP 5.3 或更高版本上运行,__DIR__会做同样的事情,而且打字要短一些。

我认为您涉及 common.php 的策略有点多余。首先,DOCROOTCOMMONSCRIPT没用——它们只是复制一些已经是全局的数据。 (所有 PHP 开发人员都知道 $_SERVER['PHP_SELF'] 是什么,但我个人不去查就不会知道 COMMONSCRIPT 是什么意思。)

其次,它可能比它的值(value)更麻烦。比较一些不同的获取路径的方法 /protected/protected2.php来自 /protected/protected.php :

ABSPATH . "/../protected/protected2.php";
"protected2.php"
dirname(__FILE__) . "/protected2.php";

所有这些都是有效的,但有些比其他更容易。这只是说明您所要求的(获取应用程序根目录)可能并不总是您所需要的。所以我想说,没有魔法路径子弹可以解决你所有的问题。如果您发现自己处于以下情况 ABSPATH常数可以帮助你,使用它。

问题的第二部分:正斜杠可以在 Windows 上使用,甚至可以与反斜杠混合使用。例如:
include("c:\whatever\whatever/something/anything.php");

将在 Windows 上的 PHP 中工作(至少在任何 5.0+ 版本上;不确定 4.x)。反斜杠在 Unix 上不起作用,因此只需始终键入正斜杠,您就可以跨平台安全。

如果您正在编写跨平台脚本,您永远不想在驱动器号中编码。相反,像这样写:
include("/whatever/whatever/something/anything.php");

初始 /将在 Windows 上被 PHP 解释为 c:\ . (我不知道如何以跨平台的方式指向不同的驱动器号。)

HTH

关于PHP 在 Windows 上的 Xampp 中正确获取 "Application Root",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796217/

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