4

在我的 php 项目中,我想确保代码保持可移植性和服务器独立性。

所以我添加了一个“config.php”,它包含在每个 php 文件中,其中配置了几个 config-var。

我包括它

include_once('config.php');

我的问题是,这个 config.php 中的第一个变量是:

global $path;
$path = $_SERVER['DOCUMENT_ROOT'];

使所有包含/需要绝对和“便携”。

这当然适用于 include_once('config.php'); 之后的所有包含。- 但我怎样才能使这个具体包括绝对?

我现在的“解决方案”是这段代码:

//set global path if not yet set
if(!isset($path)){
    global $path;
    $path = $_SERVER['DOCUMENT_ROOT'];
}

我会在每个 php 文件中添加它。

有没有更优雅的解决方案?谢谢!

4

5 回答 5

3

另一种方法是,使用 $path 作为静态变量定义,如

define('PATH', $_SERVER['DOCUMENT_ROOT']);

然后您就可以将 PATH 用作普通变量

echo 'directory: '.PATH;

变量区分大小写,使它们不区分大小写,以便您可以使用 PATH 或 path 或 Path .. 在末尾添加 true :

define('DOCROOT', $_SERVER['DOCUMENT_ROOT'], true); 

一个常见的用例是我缩短 DIRECTORY_SEPARATOR:

define('DS', DIRECTORY_SEPARATOR, true); 

问候, 马克斯

于 2013-07-03T08:25:39.627 回答
2

另一种方法是,使用 $path 作为定义,例如

define('PATH',$_SERVER['DOCUMENT_ROOT']);
于 2013-07-03T08:20:59.717 回答
1

那应该没问题!如果有更好的方法我不太确定。如果您的代码依赖于 config.php,我建议使用 require_once('config.php'); 好像没有找到或包含该文件,那么脚本将被终止,导致致命错误,并且在那之后不再继续!

于 2013-07-03T08:10:45.793 回答
0

如果你不使用 php 框架.. 这是最好的解决方案.. 除非你想把它放在 $_SESSION var 但我不推荐它..

于 2013-07-03T08:12:27.580 回答
0

全局变量确实是通往地狱的好方法。使用它们很可能是任何程序员所能做的最糟糕的事情。您如何在第一次看到并且需要分析的大型项目中找到它???根本不会。Ctrl+f 好的,但是,您确定要 ctrl+f 您的项目吗?另外,您通常无法访问所有项目文件,或者您只是没有将它们全部保存在本地磁盘上。这就像每幅拼贴画的第一课:永远不要使用全局变量。听说过静态变量和 OOP 吗?这就是要走的路。太糟糕了,PHP 不允许您将任何变量分配给常量甚至静态变量(它非常适用于静态方法 - 我刚刚测试过 - 为什么不是静态变量然后作者?)但是伙计,你为什么要重命名变量. 因为这就是你正在做的一切。您正在重命名名为 ' $_SERVER['DOCUMENT_ROOT']' 到另一个名为 'PATH' 的位置,好吧它更短,但这样做有什么意义呢?更短!=更好。$_SERVER 已经是超级全球性的了(这也很糟糕),但至少这几个超全球性是众所周知的,我敢打赌 PHP 的作者无法取代它们,因为人们会活生生吃掉它们:D(以及与旧版本的兼容性问题)版本)

于 2014-12-04T23:33:35.217 回答