Não é possível gravar arquivos no CentOS

2

Eu tenho um VPS rodando no CentOS 6 e apache2 como servidor web. Eu tenho vários scripts PHP em execução no meu servidor e tudo corre bem, exceto para a gravação de arquivos. Por alguma razão, meus scripts PHP são incapazes de escrever ou criar arquivos.

Estou usando o local padrão /var/www/html/ , que pertence a root:root .

Eu tentei temporariamente CHMODing diretórios e arquivos, sem sucesso.
Eu também tentei definir as permissões de pasta para 777, mesmo resultado - sem sucesso.

Isso é muito estranho e eu sou iniciante quando se trata de gerenciar VPSs.

Eu adicionei a linha de log de erros do PHP ao php.ini e disse para armazenar o log em /var/log/

    
por Aborted 20.11.2013 / 22:51

2 respostas

2

O CentOS é um desses sistemas operacionais que geralmente vem com alguma forma de SELinux instalado. Existem várias guerras sagradas para saber se usar o SELinux é uma coisa boa ou um desperdício, mas é uma escolha que você terá que fazer.

Se você ainda é um iniciante, recomendo que passe algum tempo com o SELinux desativado e, depois de ter tudo em execução, você pode ativá-lo e começar a reconfigurar.

NB: A maneira do mundo real de fazer as coisas é o oposto: comece com um sistema completamente bloqueado e um por um, ative as coisas que você precisa.

    
por 26.11.2013 / 10:19
0

Você nunca deve usar /var/www/html para armazenar seus arquivos. Não é para ser usado como armazenamento temporário. Um script PHP deve retornar o html gerado, não escrevê-lo em um arquivo.

Se você realmente precisa armazenar dados em algum lugar, você deve criar uma nova pasta que tenha o direito permissões. No linux, muitas vezes, nobody é a conta de usuário que está executando o apache, mas também pode ser www-data ou apenas apache. Você pode dar acesso ao apache para essa pasta:

chown nobody:nobody <dirname>

Definir permissões demais em uma pasta também pode causar erros, se o apache for definido para impedir a execução de arquivos com as permissões do 777 (gravável pelo mundo).

Uma maneira muito fácil de fazer tudo certo é permitir que o PHP crie o diretório em si:

<?php
 $dir = 'path-to-folder/myFolder';
 if ( !file_exists($dir) )
   mkdir ($dir, 0777);
 file_put_contents ($dir.'/test.txt', 'Hello World');
    
por 23.11.2013 / 16:29