返回顶部
首页 > 资讯 > 操作系统 >在 Linux 中使用 PHP 返回用户配额
  • 331
分享到

在 Linux 中使用 PHP 返回用户配额

2024-02-27 20:02:27 331人浏览 独家记忆
摘要

用户配额是一个术语,用于显示 linux 操作系统中特定用户的磁盘使用情况和限制。 在本篇文章中,我们将学习在 Linux 操作系统中使用 PHP 获取或返回配额给用户的不同方法。 默认情况下,服务

用户配额是一个术语,用于显示 linux 操作系统中特定用户的磁盘使用情况和限制。 在本篇文章中,我们将学习在 Linux 操作系统中使用 PHP 获取或返回配额给用户的不同方法。

默认情况下,服务器被授权只打印用户配额,因为所有文件系统的其他配额报告都列在 /etc/mtab 中,您可以调用服务器机器上的 rpc.rquotad 来获取挂载 NFS 的文件系统的信息。

如果配额以非零状态退出,学习如何对一个或多个文件系统进行过度配额是很重要的,你会在 /etc/mtab 中找到默认文件系统,在文件系统根目录中找到 quota.user 或 quota.group 配额文件。

由于配额可以保护用户免受无意的滥用,最大限度地减少数据泄露,并保护用户资源免于过度使用,因此将它们返回以供用户管理、更新或查看以及限制磁盘空间量或 用户可以使用或访问的文件数。

配额对于限制或跟踪特定用户使用的磁盘空间和文件数量至关重要,并且它们应用于特定的卷或 Qtree。

在使用 php 返回用户配额之前,您可能必须禁用 SELinux 作为要求,您可以使用 [root@managed2 ~]#setenforce 0 之类的东西来做到这一点。


在 Linux 操作系统中使用 crontab -e 通过 PHP 返回用户配额

需要重点考虑的是,用户(控制 PHP 代码的用户)无法在 Linux 操作系统上执行外部命令来提取用户配额,因为他限制了获取配额的权限。

要获得访问权限或取消系统获取用户配额的限制,用户可以根据他的服务器设置更改 PHP 的配置,例如,通过删除 safe_mode,这在用户使用共享主机的情况下也是不可能的 并且需要通过 PHP 调用与提供者通信来获得访问权限。

通过在外部 cron 作业的 .txt 文件中收集配额很容易绕过 PHP 限制,但这仅适用于有权设置 cron 作业或有权访问服务器的用户。

我们可以使用 PHP 中的 crontab -e 命令获得 root 访问权限和 WEB 服务器的可读目录,以将用户 _username 的用户配额保存在位于每小时更新的 Web 服务器文件夹中的 quota.txt 文本文件中。

要在可读格式不是 G 的用户情况下采用此方法,请删除 -s 并解析字节,然后将它们转换为 PHP 中的人类可读格式。

用户必须了解 cronjob 是每小时一次的,每次访问用户配额时,它不会包含用户配额信息的实时统计信息,并且可能包含一些不一致; 但是,可以通过增加 cron 的频率来频繁更新网络服务器配额文件来避免这种情况。


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php

        // use `echo "The time is " . date("h:i:sa");` to implement cronjob in your PHP project

        

        function get_Quotainfo_User($_user) {
            $user_quota = exec("quota -s -u ".$_user);            // query server
            $user_quota = preg_replace("/[\s-]+/", ' ', $user_quota); // clear spaces
            $arr = explode(' ', $user_quota);

            $_free_space = str_replace('M', '', $arr[3]) - str_replace('M', '', $arr[2]);

            return array(
            "total" => $arr[3],
            "used"  => $arr[2],
            "free"  => $_free_space.'M'
            );

        }

        

        ?>
    </body>
</html>

输出结果如下:


* display text from the `quota.txt` file

在 Linux 操作系统中使用 repquota -a 命令通过 PHP 返回用户配额

这是一个 Linux 命令,用于返回有关存储使用情况的用户配额报告,我们可以在 PHP 中采用它。 但是,编辑配额的主要命令是 edquota,它使我们能够编辑日常关键配额文件,例如 /etc/fstab

通过发出命令 yum install quota 安装配额工具并接受可能需要的任何依赖项,然后让安装完成。 之后,使用 quotacheck -cu /home 创建数据库文件并再次运行此命令,将 -c 替换为 -av(新命令将类似于 quotacheck -avu),其中 -a 将检查所有本地挂载的启用配额的分区 并且 -v 将使用详细输出。


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php

        function execCommand($command, $log) {

            if (substr(php_uname(), 0, 7) == "windows")
            {
                //windows
                // write alternative command for Windows
            }
            else
            {
                //linux
                shell_exec( $command . "repquota -a" );
            }

            // or
            

            return false;
        }

        ?>
    </body>
</html>

输出结果如下:


* it will run the `repquota -a` command in PHP code and show the user quota

具有共享 Mysql 和 PHP 托管的 Linux 服务器的非特权访问权限的用户可以执行 sudo -u 命令来获取用户配额。 我们可以在 sudoers 文件中授予此权限并以非特权用户身份执行此命令。

它类似于#repquota -a 和#repquota /home,分别显示所有配置的配额和特定分区上的配额。 此外,可以使用 # quota -u user# quota -g group 等 Linux 命令来显示适用于特定用户或用户组的配额。


在 Linux 操作系统中使用 du -bs 命令通过 PHP 返回用户配额

由于 PHP 无法输出配额,因此您需要一种更简单的方法来利用 Linux 命令,使用 explode 是将字符串拆分为字符串以将字符串转换为 PHP 中的字符串数组的完美示例。 但是,我们可以使用 crontable 将配额输出到 /temp 并在 PHP 中使用 $var = exec("cat /tmp/quotas | grep domz | tail -n 1 | awk '{print $4}'"); 之类的东西获取它 。

此外,使用 mysql 返回用户配额需要不同的方法。 它通过检查每个数据库的大小并撤销超过给定大小限制的数据库的插入和创建权限来工作。

由于配额是一个数据库而不是基于用户的,它不适用于拥有全局权限的用户,但在大多数环境中,权限是在“db”表中给出的,可以在 PHP 中使用 Mysql 对其进行修改。


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php

        $conn_server = $db_host;
        $conn_user = $db_user;
        $user_passwrd = $db_pass;
        $conn_database = "root_cwp";

        // Create a connection
        $conn = new mysqli($conn_server, $conn_user, $user_passwrd, $conn_database);

        class user_quota_spaceused
        {
            private $conn;

            public function __construct($conn)
            {
                $this->conn = $conn;
            }

            public function calculate()
            {
                $quota['home'] = $this->user_homeQuota();
                $quota['mysql'] = $this->user_MySQL_Quota();

                return $quota;
            }

            public function user_homeQuota()
            {
                $user_quota = shell_exec("du -bs /home

    $host_mysql  = 'localhost';

    // do not change the `$nysql_user` because root access is required
    $user_mysql  = 'root';
    $pass_mysql  = '';

    // to check not just the Db but the Db with the user quota table
    $database_mysql    = 'quotadb';
    $table_mysql = 'quota';

    

    $conn_debug = 0;

    // connection to MySQL Server
    if (!mysql_connect($host_mysql, $user_mysql, $pass_mysql))
    {
        echo "Connection to MySQL-server failed!";
        exit;
    }

    // database selection process
    if (!mysql_select_db($database_mysql))
    {
        echo "Selection of database $database_mysql failed!";
        exit;
    }

    // to check the quota in each entry of the quota table from the selected database
    $query_mysql = "SELECT * FROM $table_mysql;";
    $result = mysql_query($query_mysql);

    while ($db_row = mysql_fetch_array($result))
    {
        $database_quota = $db_row['db'];
        $limit_userquota = $db_row['limit'];
        $exceeded_quota = ($db_row['exceeded']=='Y') ? 1 : 0;

        if ($conn_debug){
            echo "Checking quota for '$database_quota'...
            ";
        }

        $show_mysqlQuery = "SHOW TABLE STATUS FROM $database_quota;";
        $query_result = mysql_query($show_mysqlQuery);

        if ($conn_debug){
            echo "SQL-query is `$show_mysqlQuery`
            ";
        }

        $size_userQuota = 0;

        while ($query_row = mysql_fetch_array($query_result))
        {
            if ($conn_debug)
            {
                echo "Result of query:
                "; var_dump($query_row);
            }

            $size_userQuota += $query_row['Data_length'] + $query_row['Index_length'];
        }

        if ($conn_debug){
            echo "Size is $size_userQuota bytes, limit is $limit_userquota bytes
            ";
        }

        if ($conn_debug && $exceeded_quota){
            echo "Quota is marked as exceeded.
            ";
        }

        if ($conn_debug && !$exceeded_quota){
            echo "Quota is not marked as exceeded.
            ";
        }

        if (($size_userQuota > $limit_userquota) && !$exceeded_quota)
        {
            if ($conn_debug){
                echo "Locking database...
                ";
            }

            // save the infORMation in the quota table
            $user_infoQuery = "UPDATE $table_mysql SET exceeded='Y' WHERE db='$database_quota';";
            mysql_query($user_infoQuery);

            if ($conn_debug)
            {
                echo "Querying: $user_infoQuery
                ";
            }

            // dismissing the CREATE and INSERT privileges for the database
            mysql_select_db('mysql');
            $user_infoQuery = "UPDATE db SET Insert_priv='N', Create_priv='N' WHERE Db='$database_quota';";
            mysql_query($user_infoQuery);

            if ($conn_debug)
            {
                echo "Querying: $user_infoQuery
                ";
            }

            mysql_select_db($database_mysql);
        }

        if (($size_userQuota <= $limit_userquota) && $exceeded_quota)
        {
            if ($conn_debug){
                echo "Unlocking database...
                ";
            }

            // to save info in the user quota table
            $user_infoQuery = "UPDATE $table_mysql SET exceeded='N' WHERE db='$database_quota';";
            mysql_query($user_infoQuery);

            if ($conn_debug){
                echo "Querying: $user_infoQuery
                ";
            }

            // granting the CREATE and INSERT privileges for the database
            mysql_select_db('mysql');
            $user_infoQuery = "UPDATE db SET Insert_priv='Y', Create_priv='Y' WHERE Db='$database_quota';";
            mysql_query($user_infoQuery);

            if ($conn_debug){
                echo "Querying: $user_infoQuery
                ";
            }

            mysql_select_db($database_mysql);
        }
    }
?>

输出结果如下:


* Select the MySQL user quota from the MySQL database

在 Linux 操作系统中使用 imap_get_quota 函数通过 PHP 返回用户配额

它帮助管理员用户检索每个邮箱的用户配额设置或配额使用统计。 imap_get_quota 函数适用于管理员用户,该组的非管理员用户版本是 imap_get_quotaroot(),他们可以将其用于类似目的。

使用此函数并为 IMAP 或连接实例包含 $imap,并为邮箱包含 $quota_root 作为 user.name 形式的名称。 最终确定的函数类似于 imap_get_quota(IMAP\Connection $imap, string $quota_root): array|false,它返回一个整数数组,其中包含给定用户的存储限制和使用情况。

此函数的返回值表示特定邮箱或用户允许的空间总量(由限制表示)和用户的当前容量或容量使用情况(由使用情况表示)。 如果用户或邮箱信息不正确,或者在任何其他无法从用户配额中检索容量使用信息的情况下,它会返回 false 并显示错误。


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
            $userQuota_checkMail = imap_open("{imap.example.org}", "admin_mailaddress", "your_passWord", OP_HALFOPEN)
                or die("Caution! can't connect to the server: " . imap_last_error());

            $accessuserQuota_checkValue = imap_get_quota($userQuota_checkMail, "user.hassankazmi");

            if (is_array($accessuserQuota_checkValue))
            {
                echo "User's usage level: " . $accessuserQuota_checkValue['usage'];
                echo "User's storage limit: " . $accessuserQuota_checkValue['limit'];
            }

            imap_close($userQuota_checkMail);
        ?>

        // use the following PHP example for `imp_get_quota` 4.3 or greater

        
        }

        imap_close($userQuota_checkMail);
        */
    </body>
</html>

输出结果如下:


* user quota info from the mailbox

User's usage level: 32.66 GB
User's storage limit: 60 GB

出于向后兼容的原因,PHP 中原有的用户配额访问或返回方法可用; 自 PHP 4.3 起,imap_get_quota 函数仅适用于 c-client2000 或更高版本库的用户。 只有在用户管理员为用户打开 imap 时才有用; 否则,它将不起作用。

重要的是要注意在脚本完成后使用 imap 函数时出现 Notice: Unknown Error(Quota root does not exist (errflg=2) 或类似错误)。 在关闭 imap 流之前调用 imap_error() 函数以清除错误堆栈以停止接收错误通知。

此外,我们的 IMAP 服务器必须具有 getquota 能力才能使用此功能,我们可以通过直接使用 telnet <mail server> <port> 登录来检查这一点。 例如,使用 telnet mail.myserver.com 143 并看到类似于 0 CAPABILITY 的内容。

--结束END--

本文标题: 在 Linux 中使用 PHP 返回用户配额

本文链接: https://lsjlt.com/news/569034.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在 Linux 中使用 PHP 返回用户配额
    用户配额是一个术语,用于显示 Linux 操作系统中特定用户的磁盘使用情况和限制。 在本篇文章中,我们将学习在 Linux 操作系统中使用 PHP 获取或返回配额给用户的不同方法。 默认情况下,服务...
    99+
    2024-02-27
  • php中怎么使用引用返回
    php中怎么使用引用返回,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。说明引用返回用于当你想用函数找到引用应该绑定在哪个变量上时。将函数的返回与变量绑定起来,这样在修改变量...
    99+
    2023-06-20
  • linux如何返回用户主目录
    要返回Linux用户的主目录,您可以使用以下命令:```bashcd ~```这将使当前工作目录更改为当前用户的主目录。符号`~`在...
    99+
    2023-08-28
    linux
  • Linux 中怎么使用Shell函数返回值
    这篇文章将为大家详细讲解有关Linux 中怎么使用Shell函数返回值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1) return 语句shell函数的返回值,可以和其他语言的返回值一样...
    99+
    2023-06-09
  • 使用php如何返回json数据
    使用php如何返回json数据?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampSer...
    99+
    2023-06-14
  • 如何在Java中使用executeQuery()获取返回值
    在Java中使用executeQuery()方法获取查询结果需要以下步骤:1. 创建一个数据库连接对象,例如使用JDBC连接数据库:...
    99+
    2023-09-28
    Java
  • 在springmvc中使用controller如何实现返回值
    这篇文章将为大家详细讲解有关在springmvc中使用controller如何实现返回值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。使用@RequestBody 比如代码如下:@...
    99+
    2023-05-31
    springmvc controller roller
  • 用户 findOne 返回 nil,但数据存在于 Go Fiber Go Mongo 中
    问题内容 我遇到了一个问题,我试图通过执行以下操作来获取用户详细信息 err := usercollection.findone(ctx, bson.m{"email": input....
    99+
    2024-02-06
  • PHP中怎么用array_search()返回的键名
    在 PHP 中使用array_search()函数,可以通过指定第三个参数来返回键名。 例如: $array = array(&#x...
    99+
    2024-04-02
  • PHP返回目录中的可用空间
    这篇文章将为大家详细讲解有关PHP返回目录中的可用空间,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 返回目录中的可用空间 引言 获取目录的可用空间对于管理文件系统和规划存储空间至关重要。PHP 提...
    99+
    2024-04-02
  • PHP 中使用 void 类型返回值有什么意义?
    在 php 中,void 类型返回值表示函数不返回任何值,通常用于更新记录等不需要返回值的操作。声明 void 函数时使用 void 关键字;调用 void 函数时,不得将结果分配给变量...
    99+
    2024-04-10
    php void
  • 使用php怎么查询返回记录数
    使用php怎么查询返回记录数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。PHP查询语句,有两种方法获得查询的总记录数。MySQLi 面向过程的方式$sql =&nb...
    99+
    2023-06-15
  • 函数返回值在 C++ 中的用途
    在 c++++ 中,函数可以通过 return 关键字返回值,可以是任何数据类型,包括数值和对象。返回值用于将信息或计算结果传给调用方,可用于检查错误、优化性能,并实现单一职责原则。 ...
    99+
    2024-04-30
    c++ 函数返回值 关键词
  • 怎么在python中使用time.asctime()函数返回字符串
    怎么在python中使用time.asctime()函数返回字符串?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python有哪些常用库python常用的库:1.reque...
    99+
    2023-06-14
  • 怎么在python中使用f.read()方法返回字符串
    这篇文章将为大家详细讲解有关怎么在python中使用f.read()方法返回字符串,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python可以做什么Python是一种编程语言,内置了许多有...
    99+
    2023-06-14
  • 在AOP中使用@Around后无返回值如何解决
    这篇文章给大家介绍在AOP中使用@Around后无返回值如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。改成如下即可:@Around("point_update()")public ...
    99+
    2023-06-06
  • React onBlur回调中怎么使用document.activeElement返回body
    这篇文章主要讲解了“React onBlur回调中怎么使用document.activeElement返回body”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React ...
    99+
    2023-07-06
  • 如何在 Kubernetes 中返回自定义的用户友好错误消息?
    在 Kubernetes 中,当出现错误时,默认返回的错误消息通常是技术性的、难以理解的,对于普通用户来说并不友好。然而,通过一些简单的配置和自定义操作,我们可以在 Kubernete...
    99+
    2024-02-09
  • 在Linux中如何使用bd命令快速返回到特定的父目录
    这篇文章主要介绍了在Linux中如何使用bd命令快速返回到特定的父目录,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是 bd 命令?bd 命令允许用户快速返回 Linux...
    99+
    2023-06-16
  • 怎么在linux中使用命令删除用户
    本篇文章给大家分享的是有关怎么在linux中使用命令删除用户,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作