(talvez esta pergunta seja adequada para SO, mas não acho que esteja vinculada ao meu código).
Estou usando o SQLite3 como um mecanismo de banco de dados para meu aplicativo Web.
Eu o implantei recentemente no servidor de produção e não está funcionando conforme o esperado.
Estou usando o PDO (uma interface PHP DB) para acessar este DB, mas sempre que tento escrever algo nele, recebo o erro:
SQLSTATE[HY000]: General error: 8 attempt to write a readonly database
O servidor de produção é um Centos 8 rodando Httpd (so Apache). Eu configurei os direitos para 777 para toda a pasta (este é apenas um teste, não me culpe), mas ainda estou recebendo o erro.
Eu li muitas coisas sobre esse erro, mas nenhuma delas funcionou para mim.
Coisa engraçada, ao executar:
php -r 'var_dump(
$db=new PDO("sqlite:/var/www/myProjetFolder/db/myProjetDb.sqlite"),
$q=$db->query("SELECT * FROM sqlite_master"),
$q->fetchAll()); '
Na raiz do servidor Web, recebo o conteúdo do meu banco de dados, então acho que os direitos são bons.
Como precisão, meu projeto é armazenado em /var/www/myProjectFolder/
.
Não criei nenhum vHost no momento, simplesmente editei o httpd.conf e alterei o arquivo DocumentRoot
.
Por que isso está acontecendo?
Por padrão o SELinux não permite que o servidor web escreva nenhum arquivo (uploads, seu banco de dados SQLite, etc). Você precisa informar quais arquivos e diretórios devem ser graváveis pelo servidor web.
Para tornar um único arquivo gravável:
Para tornar um diretório inteiro gravável:
Em seguida, redefina os contextos de arquivo no arquivo ou diretório afetado.