2010-06-22 41 views

回答

5

甲流有this set of operations - writereadcloseflush(强制性的,即使他们没有OPS)和seekcaststatset_option(可选)。当您请求文件锁定时,set_option操作是called

就在这里,您可以看到双向或只读与此无关。可以实现一个任意的包装,使写入和读取有一定的效果,但尚未实现set_option,因为它是可选的。同样,可以实现无操作write操作,但在我的set_option实现中处理文件锁定。在Linux环境中运行也是无关紧要的,因为重要的是流支持什么。我承认它意味着“在Linux环境下从本地文件系统运行PHP”,而不是像“从PHP运行PHP”那样,我承认它意味着“在Linux环境下运行本地文件系统” Linux环境下的AFS文件系统“,如果意味着”在Linux环境中访问支持本地文件系统的流“,这可能是正确答案,因为下面描述了手动警告)。

其余问题涉及STDIO流。现在,当检查一个流是否支持stream_supports_lock阻塞时,PHP实际上并没有尝试一个群,它会通过set_option操作传递一个特殊值来查询“这个流是否支持文件锁定”? STDIO流操作always responds it does,所以看起来所有剩下的两个答案都是正确的。

但是,set_option操作声称它支持文件锁定的事实并未使其成为真实。当你真的试图获得锁,it may fail。那么它何时能保证工作?当然不是Windows共享,因为这些可以支持几乎任何东西。我们留在“在本地文件系统上”。因此,答案是,通过消除

当访问本地文件系统的流

但是请注意,(公认过时)warning in the manual

羊群()不支持在过时的文件系统(如FAT及其派生文件系统)上,因此在此[原文]环境下总是返回FALSE(对于Windows 98用户尤其如此)。

+0

自2000年以来,NTFS已成为所有Windows版本上的默认文件系统.Flock应该在NTFS上正常工作。此外,FreeBSD和Solaris等其他UNIX相同的程序肯定会支持flock,这使得Linux特定的答案不正确,或者如果正确的话措辞很差。 – Charles 2010-06-23 01:43:11

+0

@Cha好吧,我误解了选择。这绝对是第二个,因为第一个说“运行”,而不是“访问流”。 – Artefacto 2010-06-23 01:54:07

+0

好点。鉴于确切的措辞,他们似乎都是不正确的。 – Charles 2010-06-23 02:02:23

1

哦,好问题。

Checking if a stream supports locking仅在5.3中添加,但似乎“始终”存在的streamWrapper example class has a stream_lock methodstream_lock表明它也可以在streams that can be blocked上工作。

我不指望你可以植入一个套接字,所以看起来你的答案是#2:你可以放心地知道当流是一个(本地)文件时植绒一个流将工作。

(如何羊群在远程文件操作(NFS,CIFS)是由服务提供者远程文件。有些老版本的各种NFS守护程序不支持群可言,例如。)

+0

阻止模式与文件锁定无关。 – Artefacto 2010-06-23 01:01:14

+0

事实上,我误解了参考。误导性句子已删除。 – Charles 2010-06-23 01:35:40

相关问题