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 的策略有点多余。对于初学者来说,DOCROOT
和COMMONSCRIPT
是没有用的——它们只是复制了一些已经是全局的数据。 (所有 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 中突出显示