申し訳ありませんが、問題の原因がわからないため、これが正しいフォーラムであるかどうかはわかりません。私は直面しています。
NextCloudをRaspbian(Stretch 9)にインストールし、データディレクトリをマウントされたNFSフォルダーに移動しました。 NextCloudにアクセスしようとすると、エラーメッセージ「データディレクトリは書き込み可能ではありません」が表示されます。
だから私はもっと深く掘り下げて、最終的に問題をPHP7.0とNFSの間の相互作用に分離することができました:
何らかの理由で、アプリケーションcanはディレクトリに書き込むことができますが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();
?>
結果はそれです
is_writable
はfalseを返します NFSディレクトリを使用した「debug.php」のスクリーンショットディレクトリを\tmp
のようなローカルディレクトリに変更すると、すべて問題ありません / tmpディレクトリを使用した「debug.php」のスクリーンショット
私の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/
Dir dataが適切に書き込み可能であることをどのようにして知ることができますか?
結果は何ですか:
namei -l /var/churros/data/nextcloud/
また、私はどのように興味があります
if (touch($dirname.'/chkpt.tmp')) {...
上記のスクリプトで動作した場合、/ var/churros/data/nextcloud // chkpt.tmpで動作するはずです(dir:nextcloudとfilename chkpt.tmpの間の二重スラッシュに注意してください)。
私は時々タイプミスを含めました...そして、正確にコピー/貼り付けする代わりにタイプミスしたスクリプトさえ...私のポイントは、一見すると、特定の会議中にエラーの原因となっているOPの不整合があるように見えます条件が偶然に一致するか、または非常に単純に、最初の変数宣言を変更して.../web/nextcloud /を読み取り、前述の実際のdir要件を満たす必要があります。