0

在我的网络应用程序中,我有以下常量:

//set global path if not yet set
if(!defined('FILE_ROOT_PATH')){
    define('FILE_ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);
}

所以代码是可移植的,我可以包含/需要绝对路径。

现在有一些 PHP 文件必须可以从 CLI 和 CGI​​ 执行,当然 $_SERVER 在 CLI 中不可用。

所以我所做的是在使用 CLI 和 CGI​​ 执行的那些特殊文件中将其更改为以下代码:

//set global path if not yet set and set it via dirname for CLI
if(!defined('FILE_ROOT_PATH') && strlen($_SERVER['DOCUMENT_ROOT'])){
    define('FILE_ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);
}else{
    define('FILE_ROOT_PATH', dirname(dirname(__FILE__)));
}

因此 CGI 将执行第一个“定义”,而 CLI 将执行第二个。

这样做安全吗?在 CLI 上执行时,CGI 不会“覆盖”常量,对吧?谢谢你的想法。

4

1 回答 1

1

该常量仅在脚本的生命周期内存在。Web 实例和控制台实例不会交叉路径,因为它们在不同的进程中运行。做你正在做的事情是完全省钱的。

于 2013-07-05T08:34:12.853 回答