3

我现在搜索了很长一段时间,但我找不到明确的答案来回答常量 PHP_OS 是否包含操作系统 php 是在其上构建或运行的。

php_uname 的 php 文档 ( http://php.net/manual/de/function.php-uname.php ) 指出:“对于操作系统的名称,请考虑使用 PHP_OS 常量,但请记住这个常量将包含构建PHP 的操作系统。”

然而,在同一页面上,有一条 2006 年的评论指出:“与最后一条注释相反,PHP_OS 确实显示了 PHP 当前运行的操作系统,[...] 这与构建 PHP 的系统无关。 "

关于这个问题,我在网上的任何地方都找不到任何明确的答案(关于 php_uname 和 PHP_OS 的话题大多只涵盖操作系统检测和类似主题)。现在是什么 - 文档或评论?

pear-core 包使用 PHP_OS 来确定它是在类 Unix 系统上还是在 Windows 上运行,因此可以安全地假设文档确实是错误的吗?

4

2 回答 2

6

我看了一下源代码。配置脚本执行此操作:

PHP_OS=`uname | xargs`
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])

然后main.c这样做:

char *php_os;
php_os=PHP_OS;
REGISTER_MAIN_STRINGL_CONSTANT("PHP_OS", php_os, strlen(php_os), CONST_PERSISTENT | CONST_CS);

这意味着PHP_OS在PHP中是php_osC代码中的内容,即配置脚本构造的头文件中的#defined,由uname配置时运行确定。

所以,这是您构建的系统,而不是您运行的系统。

有一些适用于 Windows 的特殊代码:main.c设置php_os"WINNT"ifWIN32已定义。但是,同样,这是在构建时,而不是在运行时,即使您设法在 Unix 上编译并在 Windows 上运行,反之亦然。

于 2012-04-27T10:08:03.807 回答
3

PHP_OS(PHP 常量)是PHP 模块启动时定义的常量。它的值来自thePHP_WIN32PHP_OSC 常量(跟随线索最终导致this,但这不是回答问题所必需的)。

所以它描述的是构建 PHP 的系统

于 2012-04-27T09:57:33.560 回答