PHP脚本-检测是否在Linux或Windows下运行?
我有一个PHP脚本,可以放在windows系统上,也可以放在linux系统上。在这两种情况下我都需要运行不同的命令。
如何检测我所处的环境? (最好是 PHP,而不是聪明的系统黑客)
更新
澄清一下,脚本是从命令行运行的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
检查
PHP_OS
常量的值 文档。它将为您提供 Windows 上的各种值,例如
WIN32
、WINNT
或Windows
。另请参阅:可能的值:PHP_OS 和
php_uname
文档:Check the value of the
PHP_OS
constantDocs.It will give you various values on Windows like
WIN32
,WINNT
orWindows
.See as well: Possible Values For: PHP_OS and
php_uname
Docs:您可以检查目录分隔符在 Windows 上是否为
/
(对于 unix/linux/mac)或\
。常量名称是DIRECTORY_SEPARATOR
。You can check if the directory separator is
/
(for unix/linux/mac) or\
on windows. The constant name isDIRECTORY_SEPARATOR
.似乎比接受的答案更优雅一些。不过,上述使用 DIRECTORY_SEPARATOR 的检测是最快的。
seems like a bit more elegant than the accepted answer. The aforementioned detection with DIRECTORY_SEPARATOR is the fastest, though.
从 PHP 7.2.0 开始,您可以使用常量
PHP_OS_FAMILY
检测正在运行的操作系统:请参阅 官方 PHP 文档 了解其可能的值。
Starting with PHP 7.2.0 you can detect the running O.S. using the constant
PHP_OS_FAMILY
:See the official PHP documentation for its possible values.
请注意,PHP_OS 报告 PHP构建的操作系统,其中不一定是当前运行的操作系统。
如果您使用的是 PHP >= 5.3,并且只需要知道您是否在 Windows 上运行,则测试 Windows 特定常量 的定义可能是一个不错的选择,例如:
Note that PHP_OS reports the OS that PHP was built on, which is not necessarily the same OS that it is currently running on.
If you are on PHP >= 5.3 and just need to know whether you're running on Windows or not-Windows then testing whether one of the Windows-specific constants is defined may be a good bet, e.g.:
根据 预定义常量:用户贡献笔记 Volker 和 rdcapasso 解决方案,您可以简单地创建像这样的帮助器类:
用法:
According to Predefined Constants: User Contributed Notes Volker's and rdcapasso solution, you can simply create helper class like this:
Usage:
php_uname 函数可用于检测这一点。
The php_uname function can be used to detect this.
这应该适用于 PHP 4.3+:
This should work in PHP 4.3+:
要检测它是 Windows、OS X 还是 Linux:
在这种特殊情况下,
stripos
比substr
慢一点,但对于如此小的任务来说,它足够高效,而且更优雅。To detect whether it's Windows, OS X or Linux:
stripos
is a bit slower thansubstr
in this particular case, yet it's efficient enough for such a small task, and more elegant.您可以检查 PHP >5.3.0 中是否存在常量(手册)
此前,Symfony 中使用过此方法。现在他们使用不同的方法:
You can check if a constant exists in PHP >5.3.0 (manual)
Previously, this method was used in Symfony. Now they use a different method:
核心预定义常量: https://www.php .net/manual/en/reserved.constants.php,其中包含
PHP_OS(字符串)
常量。或者,如果您想检测客户端的操作系统:
来自 https:// /www.php.net/manual/en/function.get-browser.php
根据您的编辑,您可以参考此重复的命令行中的 PHP 服务器名称
可以使用
您
可以为您解决这个问题,请参阅此处 http://php.net/manual /en/function.php-uname.php
Core Predefined Constants: https://www.php.net/manual/en/reserved.constants.php which has the
PHP_OS (string)
constant.Or if you want to detect the OS of the client:
From https://www.php.net/manual/en/function.get-browser.php
According to your edit you can refer to this dublicate PHP Server Name from Command Line
You can use
So
Would do the trick for you, see here http://php.net/manual/en/function.php-uname.php
如果您想检查是否在 Linux 下运行,只需测试 if
(PHP_OS === 'Linux')
即可。无需使用 strtolower() 和 substr()。If you want to check if running under Linux, just test if
(PHP_OS === 'Linux')
. No need to use strtolower() and substr().