我有一个与 OS 的 CLI 交互的 PHP 脚本,我希望这个脚本可以在不同的 Linux 发行版上运行,所以我必须以不同的方式与不同的 Linux falvours 交互才能实现某些目标,但我找不到方法让 PHP 区分它们。
我试过使用 php_uname('s')
和 PHP_OS
它们都返回 Linux
;这对我没有任何用处(我在 Arch Linux 上测试)
我问这个问题,因为 - 例如 - 如果我想在 Ubuntu 中管理服务/守护进程,我将使用 service
命令,而在 Arch 中我将使用 systemctl
命令,所以在不知道哪个 Linux 发行版正在运行我的 PHP 脚本的情况下,我无法处理此类问题。
最佳答案
我找到了解决这个问题的灵活方法。这是通过从/etc 目录查找发布文件(而不是打印文件内部的实际内容),所以如果我在 Arch Linux 上运行这个脚本,它会检查 arch-release
文件在 /etc
目录,等等其他 Linux 发行版。
代码如下:
重要说明:
PHP 不会扫描
/etc
目录,如果你不修改php.ini
文件并允许对其进行文件操作(修改open_basedir
选项,在末尾添加:/etc/
。)以下代码中的可识别发行版列表很容易扩展,您只需要发行版的漂亮名称(例如 Ubuntu)及其发行文件的名称(例如
lsb-release
)。有关著名 Linux 发行版的完整列表,click here .function getLinuxDistro() { //declare Linux distros(extensible list). $distros = array( "Arch" => "arch-release", "Debian" => "debian_version", "Fedora" => "fedora-release", "Ubuntu" => "lsb-release", 'Redhat' => 'redhat-release', 'CentOS' => 'centos-release'); //Get everything from /etc directory. $etcList = scandir('/etc'); //Loop through /etc results... $OSDistro; foreach ($etcList as $entry) { //Loop through list of distros.. foreach ($distros as $distroReleaseFile) { //Match was found. if ($distroReleaseFile === $entry) { //Find distros array key(i.e. Distro name) by value(i.e. distro release file) $OSDistro = array_search($distroReleaseFile, $distros); break 2;//Break inner and outer loop. } } } return $OSDistro; } }
关于php - 如果 PHP 在 Linux 上运行;如何获取特定的发行版(Ubuntu、fedora 等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334577/