Arquivos carregados temp do PHP não são excluídos no IIS devido a 'Acesso negado' para IUSR

1

Ao fazer o upload de um arquivo por um formulário HTML para um script PHP, o arquivo carregado permanecerá em upload_tmp_dir, mesmo quando o pedido terminar e esse arquivo não tiver sido removido explicitamente pelo código PHP.

Comportamento esperado: Arquivos temporários não usados, não movidos ou excluídos de um upload de arquivo são excluídos pelo PHP quando a solicitação é encerrada. Este também é o comportamento que o php.net descreve para uploads de arquivos: "O arquivo será deletado do diretório temporário no final da requisição se não tiver sido movido ou renomeado.", Veja: link

Isto é, aconteceu sob o capô:

O arquivo é criado em upload_tmp_dir. O arquivo não é tocado pelo código PHP. O pedido termina. O PHP tenta excluir o arquivo temporário, mas o acesso é negado.

Analisamos isso com procmon. O que você pode ver é que o processo do php-cgi.exe não parece representar a solicitação de exclusão, como em move_uploaded_file ().

Solução alternativa: se adicionarmos os direitos MODIFY ao grupo IIS_IUSRS no arquivo uploaded_tmp_dir, o arquivo será excluído depois que a solicitação terminar conforme o esperado.

Ambiente: PHP 5.3 / 5.4 via FCGI no IIS 7.x

Reproduzido no WS2012, WS2008 R2.

Estou discutindo isso no bugtracker do PHP, mas eles não acreditam em mim: link

Eu preciso de algum apoio deste tópico. Alguém pode reproduzir isso? O que estou fazendo errado.

    
por LucasF 11.12.2014 / 14:51

0 respostas