文件在NFS上锁?

我的服务器使用NFS(networking文件系统),我无法使用PHP的flock()function。 有没有办法在NFS上locking文件或是否需要这样做?

flock()在Linux NFS上工作得很好,包括来自PHP的。 我们广泛使用它,并已经过彻底的testing,以validation其工作是否符合要求。 检查是否正在客户端和服务器上运行所有必要的服务。 寻找“portmapper”和“rpc.statd”。 如果他们没有运行,你需要找出哪个init脚本在你的发行版上启动它们。 在基于Debian的发行版中,它是“ /etc/init.d/portmap ”和“ /etc/init.d/nfs-common ”。

从客户端运行“ rpcinfo -u $NFSSERVER status ”,看看是否得到回应。 在我的设置上,我得到了“编程100024版本1准备好并等待”作为结果。

哦,还要记住,在某些情况下,如果客户端和服务器之间没有可靠的主机名称,NFS和statd可能会变得不安。 仔细检查两台机器上的/etc/hosts

我不知道PHP flock()函数是如何实现的,但假设它是flock()系统调用的接口,那么它在NFS上不起作用。 从flock()手册页:

  flock(2) does not lock files over NFS. Use fcntl(2) instead: that does work over NFS, given a sufficiently recent version of Linux and a server which supports locking. 

而且,当然,无论多么过时,一个网页所说的一切都是最终的真理。

这是为了评论詹尼布的答案,但是我当时并没有名誉:

手册页已经过时了很久,但是已经更新了(重点是我的):

在最高2.6.11的Linux内核中, flock()不会通过NFSlocking文件(即,锁的范围仅限于本地系统)。 相反,可以使用fcntl(2)字节范围locking,它可以在NFS上工作,给定一个足够新的Linux版本和一个支持locking的服务器。 从Linux 2.6.12开始, NFS客户端通过在整个文件上模拟字节范围锁来支持flock()locking。 这意味着fcntl(2)和flock()锁确实通过NFS进行交互。 由于Linux 2.6.37,内核支持兼容模式,该模式允许flock()锁(也包括fcntl(2)字节区域锁)被视为本地; 请参阅nfs(5)中关于local_lock选项的讨论。

正式的man-pages网站导致http://man7.org/linux/man-pages/man2/flock.2.html从man-pages 4.00显示新版本

文档更新发生在2014年: http : //git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19aafc569df47d12bffdf6276236

Linux 2.6.12于2005年6月18日发布 – 大约十年前。

只是想回答自己。 解决scheme可以在这里find: http : //us3.php.net/manual/en/function.flock.php#82521