我觉得这有点奇怪。使用 laravel Storage门面,如果我尝试移动文件:
Storage::move ($source_file, $dest_file);
我收到以下错误:
rename(/source/file/name1.docx, /dest/file/name2.docx): Permission denied
但是,如果我尝试显式获取文件的副本,将其写入目标,然后按如下方式删除原始文件:
$fcontents = Storage::get ($source_file);
Storage::put ($dest_file, $fcontents, 'public');
Storage::delete ($source_file);
它工作得很好。
我在 nginx CentOS 平台上运行 Laravel。一个稍微复杂的因素是底层文件系统是一个挂载的 Samba 共享。但是,这不会在命令行上引起任何问题。
从 shell 命令中,如果我执行移动(使用与运行 nginx 服务的用户相同的用户)mv /source/file/name1.docx /source/file/name2.docx
,它不会抱怨任何权限问题。
有人有线索吗?
编辑 20/02/2018 添加更多信息
samba 挂载如下所示/etc/fstab
//10.1.12.123;public /my/mount/point/public cifs credentials=/my/passfile,uid=1003,gid=1003 0 0
挂载工作正常,我可以在我的 Bash shell 中遍历文件系统。
@> ls -lFd /my/mount/point/public
drwxrwxrwx 11 webuser webgroup 0 Dec 4 13:30 /my/mount/point/public//
(我不确定上述行末尾的双斜杠是否重要)。
顺便说一句,777 特权显然是由安装过程定义的。我似乎没有能力改变这一点。我将把这个特权作为一种离线活动来减少,但是为了解决这个问题,我打算证明文件系统级别的权限似乎不是问题的原因。