PHP 在 Windows 上的 Xampp 中正确获取“应用程序根目录”

Posted

技术标签:

【中文标题】PHP 在 Windows 上的 Xampp 中正确获取“应用程序根目录”【英文标题】:PHP get "Application Root" in Xampp on Windows correctly 【发布时间】:2011-02-17 06:45:15 【问题描述】:

我找到了this thread on *** 关于如何从我的网络应用程序中获取“应用程序根”的信息。

但是,该线程中建议的大多数方法很难应用于我在 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 上工作,但我不确定他们是如何找到如此优雅的解决方案的。

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

【问题讨论】:

【参考方案1】:

dirname(__FILE__)是获取路径的常用方法。实际上,如果您的脚本只能在 PHP 5.3 或更高版本上运行,__DIR__ 将执行相同的操作,并且键入时间会短一些。

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

其次,它可能比它的价值更麻烦。比较从/protected/protected.php 获取到/protected/protected2.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 中正确获取“应用程序根目录”的主要内容,如果未能解决你的问题,请参考以下文章

如何在不安装在 Windows 10 上的情况下知道与特定 XAMPP 版本关联的 php 版本?

在 Windows 上的 xampp 上使用 cakeresque

在 Mac 上的 XAMPP 上安装 PHP 国际化扩展 (Intl)

Pygments 代码中的行号在 Windows 上的 xampp 中突出显示

在 xampp Windows 7 上安装时必须加载 PHP 扩展“curl”

无法访问 xampp WINDOWS 上的 phpmyadmin 错误