php - 如果 PHP 在 Linux 上运行;如何获取特定的发行版(Ubuntu、fedora 等)?

标签 php linux operating-system archlinux

我有一个与 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/

相关文章:

php - 如何在 PHP 中回显不同的计数?

mysql - 如何在 php 中创建备份数据库脚本并将其压缩

linux - 馅饼基地址在gdb中是固定的

linux - 无法在交互式命令行应用程序中对上一个命令使用箭头键

c - 不用 Malloc 动态分配内存

css - 文本在(几乎)相同操作系统的相同浏览器中的位置不同

linux - 与 Errno 的竞争条件

php - mysql 查询 : query nested (? )

linux - 在 "find"命令中使用 printf

php - HTML 表单验证