1

У меня есть каталог vmail, управляемый postfix, с такими правами доступа:

  • пользователь: vmail
  • группа: vmail
  • разрешение 700

Мне нужно получить размер этого каталога с помощью PHP. Для этого я использую этот код:

$io = popen('/usr/bin/du -sk '.$directory, 'r');

Это работает довольно хорошо для каталогов, управляемых PHP, но не с каталогом vmail из-за разрешений.

Лучшее решение, которое приходит мне в голову, - это изменение пользователя каталога vmail на www-data.

Я хотел бы знать, что вы, ребята, думаете об этом решении, и если вы думаете о лучшем решении сделать это без снижения безопасности?

1 ответ1

3

Я бы не рекомендовал вызывать команду типа du напрямую из PHP. Проблема заключается в том, что его выполнение может занять много минут, и до того, как он завершит выполнение вашего php-сервера time_timeout, или могут быть достигнуты некоторые тайм-ауты веб-сервера.

Я бы порекомендовал сделать это каким-то асинхронным способом. Как, например, иметь ночной cronjob, который может запускаться как любой привилегированный пользователь, выполняя du и записывая результат в файл. Тогда PHP будет читать этот файл только тогда, когда ему нужно знать размер.

Конечно, таким образом, номер может быть устаревшим до 24 часов. Но, по крайней мере, вы можете быть уверены, что ваш PHP будет работать быстро и не заставит кого-либо из рабочих ждать медленной работы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .