我现在搜索了很长一段时间,但是我找不到问题的明确答案,因为常量PHP_OS包含OS构建或运行的OS.
php_uname的php文档(http://php.net/manual/de/function.php-uname.php)指出:"对于操作系统的名称,请考虑使用PHP_OS常量,但请记住这个常量将包含PHP 构建的操作系统."
然而,在同一页面上有一条2006年的评论说:"与上一篇文章相反,PHP_OS确实显示当前运行的PHP PHP,[...]这与构建PHP的系统无关. "
我无法在网上找到任何关于这个问题的明确答案(topis关于php_uname和PHP_OS主要只涉及os检测和类似主题).现在是什么 - 文档或评论?
将梨核包使用PHP_OS确定羯羊它运行在类Unix系统或Windows,因此,它是安全的假设的文件确实是错了吗?
我看了一下源代码.configure脚本执行此操作:
PHP_OS=`uname | xargs`
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])
Run Code Online (Sandbox Code Playgroud)
然后main.c这样做:
char *php_os;
php_os=PHP_OS;
REGISTER_MAIN_STRINGL_CONSTANT("PHP_OS", php_os, strlen(php_os), CONST_PERSISTENT | CONST_CS);
Run Code Online (Sandbox Code Playgroud)
这意味着PHP_OS在PHP中是php_osC代码中的内容,这是由configure脚本构造的头文件的#defined,它由uname配置时运行决定.
因此,它是您构建的系统,而不是您运行的系统.
Windows有一些特殊的代码:main.c设置php_os为"WINNT"if WIN32定义.但是,同样,这是在构建时,而不是在运行时,即使您设法在Unix上编译并在Windows上运行,反之亦然.