PHP no Windows - erro ps_files_cleanup_dir

5

Eu estou ocasionalmente recebendo o seguinte erro ao carregar uma página do PHP:

PHP Notice:  session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No error (0) in C:\server\default.php on line 299

Arquivos sess_ com idade de um mês em C:\Windows\TEMP ainda existem.

Estou executando o PHP 5.6.5 no IIS no Windows 8.1.

Por que o PHP não consegue executar a coleta de lixo, e como eu corrijo isso?

    
por Mooseman 02.06.2015 / 12:21

2 respostas

5

Os arquivos temporários da sessão são criados neste diretório de acordo com a propriedade "session.save_path" no php.ini. Sem as permissões para excluir arquivos neste diretório, o PHP não pode remover esses arquivos como parte de seu processo normal de manipulação de lixo de sessão e, assim, eles se acumulam quando não são mais necessários e você verá ocasionalmente esse erro sempre que a coleta de lixo for executada. p>

O usuário do Pool de Aplicativos, que é o que realmente executa o executável PHP, precisa pelo menos modificar as permissões em C: \ Windows \ TEMP para executar a coleta de lixo (isso não é concedido por padrão). Se você não alterou este usuário do padrão, então ele deve ser 'DefaultAppPool', ou você pode usar o grupo Pool de Aplicativos, que será semelhante ao IUSRS.

A melhor prática é criar um novo pool de aplicativos para cada site. Ao fazer isso, o IIS criará um usuário do Windows ao qual você poderá conceder permissões de modificação. Você pode fazer o script ou fazer isso a partir da linha de comando usando o seguinte comando:

icacls c:\windows\TEMP\ /inheritance:e /grant "IIS APPPOOL\your-user:(OI)(CI)M" /t /c /Q

Atualização: Como o Gremio observa, você deve mover os arquivos da sessão para um diretório específico, para que você não conceda acesso de gravação para esse usuário (que pode ser explorado) ao que quer que o Windows armazene o diretório TEMP. Você pode modificar as configurações de salvamento de sessões no php.ini, globalmente ou especificamente para seu aplicativo em tempo de execução (detalhes aqui ).

    
por 17.03.2016 / 07:40
-1

Apenas dê permissões completas ao usuário "IUSR" no diretório "C: \ Windows \ Temp". Talvez apenas listagem e exclusão de diretórios seja suficiente ... mas em um sistema não produtivo, isso não deve ser um problema.

    
por 08.09.2015 / 14:23