Назад | Перейти на главную страницу

PHP is_writable всегда ложно на NFS

Извините, я не уверен, правильный ли это форум, потому что я не знаю причину проблемы, с которой я столкнулся.

Я установил NextCloud на Raspbian (Stretch 9) и переместил каталог данных в смонтированную папку NFS. Когда я пытаюсь получить доступ к NextCloud, я получаю сообщение об ошибке "Каталог данных не доступен для записи".

Итак, я копнул получше и смог, наконец, изолировать проблему от взаимодействия между PHP7.0 и NFS:

Почему-то приложение жестяная банка написать в каталог но is_writable возвращает false.

Я создал следующий сценарий 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();
?>

В результате

Когда я перехожу в каталог в локальный каталог, например \tmp все хорошо Снимок экрана debug.php с каталогом / tmp

Моя NFS смонтирована как

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)

и, очевидно, отображение пользователя и права доступа верны:

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

Наконец, в командной строке я как пользователь www-data могу получить доступ к каталогу и писать в него.

Итак: любая идея, почему PHP is_writable не работает в каталоге NFS?

В вашем коде вы указываете

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

Однако, когда вы демонстрируете разрешения ниже, вы показываете

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

Откуда мы знаем этот режиссер данные правильно записывать?

каков результат:

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

???

Кроме того, мне любопытно, как

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

работал в приведенном выше сценарии, он должен был действовать в /var/churros/data/nextcloud//chkpt.tmp (обратите внимание на двойную косую черту между dir: nextcloud и именем файла chkpt.tmp).

Я иногда включал опечатки ... и даже скрипты с опечатками вместо копирования / вставки точно так, как есть ... Я хочу сказать, что на первый взгляд кажется, что в OP есть несоответствия, которые либо способствуют возникновению ошибки при соблюдении определенных условия случайно, или очень просто первое объявление переменной необходимо изменить для чтения ... / web / nextcloud /, чтобы удовлетворить фактические требования к каталогу, как указано ...