![需要安全的解决方案来使用 PHP 获取目录的大小](https://linux22.com/image/1351575/%E9%9C%80%E8%A6%81%E5%AE%89%E5%85%A8%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E6%9D%A5%E4%BD%BF%E7%94%A8%20PHP%20%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E7%9A%84%E5%A4%A7%E5%B0%8F.png)
我有一个由 postfix 管理的 vmail 目录,其权限设置如下:
- 用户:vmail
- 群组:vmail
- 权限 700
我需要使用 PHP 获取该目录的大小。为此,我使用以下代码:
$io = popen('/usr/bin/du -sk '.$directory, 'r');
它对于 PHP 管理的目录运行得很好,但由于权限问题,它对于 vmail 目录则运行不佳。
我想到最好的解决方案是将 vmail 目录的用户更改为 www-data。
我想知道的是你们对这个解决方案有何看法,以及您是否认为有一个更好的解决方案可以在不降低安全性的情况下做到这一点?
答案1
我不建议直接从 PHP 调用 du 之类的命令。问题是它的执行可能需要几分钟,并且在它完成之前,你的 php 的执行超时或 Web 服务器的某些超时可能会达到。
我更建议以某种异步方式执行此操作。例如,有一个夜间 cronjob,可以以任何特权用户身份运行,执行 du 并将结果写入文件。然后 PHP 只会在需要知道大小时读取此文件。
当然,这样一来,数字可能会过期 24 小时。但至少您可以确保您的 PHP 能够快速执行,并且不会让任何工作人员等待缓慢的 du。