Precisa de uma solução segura para obter o tamanho de um diretório com PHP

1

Eu tenho um diretório de vmail gerenciado pelo postfix com as permissões configuradas assim:

  • usuário: vmail
  • group: vmail
  • permissão 700

Eu preciso obter o tamanho desse diretório com o PHP. Para fazer isso, estou usando esse código:

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

Funciona muito bem para os diretórios gerenciar pelo PHP, mas não com o diretório do vmail por causa das permissões.

A melhor solução que me vem à mente é mudar o usuário do diretório do vmail para www-data.

O que eu gostaria de saber é o que vocês acham dessa solução e se você pensa em uma solução melhor para fazer isso sem reduzir a segurança?

    
por Nicolas BADIA 16.02.2013 / 11:28

1 resposta

3

Eu não recomendaria chamar um comando como du diretamente do PHP. O problema é que sua execução pode levar muitos minutos, e antes de terminar o execution_timeout do seu php ou alguns timeouts do servidor web podem ser alcançados.

Eu prefiro recomendar isso de alguma forma assíncrona. Como, por exemplo, ter um cronjob noturno, que poderia rodar como qualquer usuário privilegiado, executando o du e gravando o resultado em um arquivo. Em seguida, o PHP só lerá este arquivo quando precisar saber o tamanho.

É claro que, dessa forma, o número pode estar até 24 horas desatualizado. Mas pelo menos você pode ter certeza que seu PHP irá executar rapidamente, e não faz nenhum dos trabalhadores esperar por um tempo lento.

    
por 16.02.2013 / 11:32