【发布时间】:2011-02-17 06:45:15
【问题描述】:
我找到了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 上工作,但我不确定他们是如何找到如此优雅的解决方案的。
非常感谢您提供的所有提示和建议。
【问题讨论】: