从Linux操作系统返回PHP的用户配额

ecfdbz9o  于 2022-11-22  发布在  Linux
关注(0)|答案(2)|浏览(126)

我需要找出当前用户的配额详细信息,
我试过exec(“quota 'username'”,$retParam)和system(),但是什么都没有返回。
有什么想法吗?

  • 谢谢-谢谢
mw3dktmi

mw3dktmi1#

运行PHP的用户可能不被允许获得其他用户的配额--甚至可能不被允许获得自己的配额,或者甚至不被允许执行外部命令。(例如删除safe_mode)并提升PHP用户的权限,但我不知道这样做是否明智。您必须与您的提供者讨论是否可以采取任何措施。
This blog entry概述了一种巧妙的方法来绕过PHP的限制,方法是在外部cron作业的文本文件中收集所有配额,然后用PHP解析该文件。当然,只有当您有权访问服务器,或者可以使用比PHP用户更自由的权限设置cron作业时,才能使用。

ddrv8njm

ddrv8njm2#

给予一个代码示例并扩展上述答案
您需要root访问权限+Web服务器可读的目录。
执行crontab -e
及添设了

0 * * * * quota -u -s someusername | grep /dev > /path/to/webserver/quota.txt

上面的行将每小时将用户someusername的配额保存在位于webserver文件夹中的quota.txt中。
然后编写一个PHP文件来显示它

$quota_txt= file_get_contents("quota.txt");
$quota_arr = explode("   ",$quota_txt);
function rm_g($str){
return intval(substr_replace($str, "", -1));

}
echo "total quota: ". $quota_arr[4]."<br>";
echo "used: ". $quota_arr[3]."<br>";
$free =(rm_g($quota_arr[4]))-rm_g($quota_arr[3]);
echo "free: " . $free . "G";

并不完美,如果您使用的是人类可读格式不是G(千兆字节)的用例,则需要对其进行调整,在这种情况下,请删除-s并解析字节,然后将字节输出转换为PHP中的人类可读格式
此外,正如您可能已经猜到的,cron作业是每小时一次的,这意味着用户没有获得实时统计信息,可能存在一些不一致。您可能需要增加cron的频率。
另一种强化的方法是像上面那样获取配额,但是每次都要执行du以获取真正使用的空间。(在这里查找“get folder size with PHP efficient”,您将找到代码)。这将获得实时的剩余配额

相关问题