我需要找出当前用户的配额详细信息,我试过exec(“quota 'username'”,$retParam)和system(),但是什么都没有返回。有什么想法吗?
mw3dktmi1#
运行PHP的用户可能不被允许获得其他用户的配额--甚至可能不被允许获得自己的配额,或者甚至不被允许执行外部命令。(例如删除safe_mode)并提升PHP用户的权限,但我不知道这样做是否明智。您必须与您的提供者讨论是否可以采取任何措施。This blog entry概述了一种巧妙的方法来绕过PHP的限制,方法是在外部cron作业的文本文件中收集所有配额,然后用PHP解析该文件。当然,只有当您有权访问服务器,或者可以使用比PHP用户更自由的权限设置cron作业时,才能使用。
ddrv8njm2#
给予一个代码示例并扩展上述答案您需要root访问权限+Web服务器可读的目录。执行crontab -e及添设了
crontab -e
0 * * * * quota -u -s someusername | grep /dev > /path/to/webserver/quota.txt
上面的行将每小时将用户someusername的配额保存在位于webserver文件夹中的quota.txt中。然后编写一个PHP文件来显示它
someusername
$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”,您将找到代码)。这将获得实时的剩余配额
-s
du
2条答案
按热度按时间mw3dktmi1#
运行PHP的用户可能不被允许获得其他用户的配额--甚至可能不被允许获得自己的配额,或者甚至不被允许执行外部命令。(例如删除safe_mode)并提升PHP用户的权限,但我不知道这样做是否明智。您必须与您的提供者讨论是否可以采取任何措施。
This blog entry概述了一种巧妙的方法来绕过PHP的限制,方法是在外部cron作业的文本文件中收集所有配额,然后用PHP解析该文件。当然,只有当您有权访问服务器,或者可以使用比PHP用户更自由的权限设置cron作业时,才能使用。
ddrv8njm2#
给予一个代码示例并扩展上述答案
您需要root访问权限+Web服务器可读的目录。
执行
crontab -e
及添设了
上面的行将每小时将用户
someusername
的配额保存在位于webserver文件夹中的quota.txt中。然后编写一个PHP文件来显示它
并不完美,如果您使用的是人类可读格式不是G(千兆字节)的用例,则需要对其进行调整,在这种情况下,请删除
-s
并解析字节,然后将字节输出转换为PHP中的人类可读格式此外,正如您可能已经猜到的,cron作业是每小时一次的,这意味着用户没有获得实时统计信息,可能存在一些不一致。您可能需要增加cron的频率。
另一种强化的方法是像上面那样获取配额,但是每次都要执行
du
以获取真正使用的空间。(在这里查找“get folder size with PHP efficient”,您将找到代码)。这将获得实时的剩余配额