PHP is_writable sempre falso no NFS

1

Desculpe, não tenho certeza se esse é o fórum correto porque não sei a causa do problema que estou enfrentando.

Eu instalei o NextCloud em um Raspbian (Stretch 9) e movi o diretório de dados para uma pasta NFS montada. Quando tento acessar o NextCloud, recebo a mensagem de erro 'O diretório de dados não é gravável' .

Então, eu pesquisei mais profundamente e finalmente consegui isolar o problema à interação entre o PHP7.0 e o NFS:

Por algum motivo, o aplicativo pode gravar no diretório , mas is_writable retorna false .

Eu criei o seguinte script PHP:

<?php
$dirname = '/var/churros/data/nextcloud/';
//$dirname = '/tmp/';

$myfile = fopen($dirname.'newfile.txt', "w") or die("Unable to open file!");
$txt = "John Doe\n";
fwrite($myfile, $txt);
fclose($myfile);
echo nl2br("File ".$dirname."newfile.txt written\n");

if (touch($dirname.'/chkpt.tmp')) {
   echo nl2br("touch(".$dirname."/chkpt.tmp) successful\n");
} else {
   echo nl2br("touch(".$dirname."/chkpt.tmp) failed\n");
}

if (is_writable($dirname)) {
        echo 'Directory '.$dirname.' is writable';
} else {
        echo 'Directory '.$dirname.' is not writable';
}

phpinfo();
?>

O resultado é que

Quando eu mudo para o diretório para um diretório local como \tmp , tudo está bem Screenshot do 'debug.php' com o diretório / tmp

Meu NFS é montado como

192.168.1.100:/volume1/pidata/donut on /var/churros type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.103,local_lock=none,addr=192.168.1.100)

e, obviamente, os direitos de mapeamento e acesso do usuário estão corretos:

namei -l /var/churros/web/nextcloud/
f: /var/churros/web/nextcloud/
drwxr-xr-x root     root     /
drwxr-xr-x root     root     var
drwxr-xr-x root     root     churros
drwxr-xr-x www-data www-data web
drwxrwxr-x www-data www-data nextcloud

Finalmente, na linha de comando, como usuário www-data, posso acessar o diretório e escrever também.

Então: Alguma idéia do porque o PHP is_writable falha no diretório NFS?

    
por allwi 05.06.2018 / 00:23

1 resposta

1

No seu código, você afirma

$dirname = '/var/churros/data/nextcloud/';

No entanto, quando você demonstra as permissões abaixo, você mostra

namei -l /var/churros/web/nextcloud/

Como sabemos que os dados dir são escritos corretamente?

qual é o resultado de:

namei -l /var/churros/data/nextcloud/

???

Além disso, estou curioso para saber como

if (touch($dirname.'/chkpt.tmp')) {...

trabalhou no script acima, ele deveria ter agido em /var/churros/data/nextcloud//chkpt.tmp (note double-slash entre dir: nextcloud e filename chkpt.tmp).

Eu incluí ocasionalmente erros de digitação ... e até scripts de digitação em vez de copiar / colar exatamente como é ... Meu ponto é, à primeira vista, parece que há inconsistências no OP que estão contribuindo para o erro enquanto cumpre certas condições coincidentemente, ou simplesmente a primeira declaração de variável precisa ser modificada para ler ... / web / nextcloud / para atender aos requisitos reais de dir como declarado ...

    
por 17.08.2018 / 13:16

Tags