标签:php
我现在搜索了很长一段时间,但是我找不到问题的明确答案,因为常量PHP_OS包含OS构建或运行的OS.
php_uname(http://php.net/manual/de/function.php-uname.php)的php文档说明:
“对于操作系统的名称,请考虑使用PHP_OS常量,但请记住,此常量将包含PHP构建的操作系统.”
但是,在同一页面上有一条2006年的评论说明:
“与上一篇文章相反,PHP_OS确实显示当前运行的PHP PHP,[…]这与PHP构建的系统无关.”
我无法在网上找到任何关于这个问题的明确答案(topis关于php_uname和PHP_OS主要只涉及os检测和类似主题).现在是什么 – 文档或评论?
pear-core软件包使用PHP_OS来确定它在类Unix系统或Windows上运行,因此可以安全地假设文档确实是错误的吗?
解决方法:
我看了一下源代码. configure脚本执行此操作:
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中的PHP_OS是C代码中的php_os,这是由configure脚本构造的头文件的#defined,它由配置时运行uname决定.
因此,它是您构建的系统,而不是您运行的系统.
Windows有一些特殊的代码:如果定义了WIN32,main.c将php_os设置为“WINNT”.但是,同样,这是在构建时,而不是在运行时,即使您设法在Unix上编译并在Windows上运行,反之亦然.
标签:php
来源: https://codeday.me/bug/20190729/1573446.html