PHP集群文件锁的详细介绍
羊群(PHP 4,PHP 5)
羊群-便携式咨询文件锁定
解释
布尔羊(int $手柄,操作{ int int美元,美元wouldblock })
PHP支持一种方便的方法,用协商的方式锁定所有文件,也就是说,所有访问程序必须以相同的方式锁定,否则它将不能工作。
注:
在Windows下,羊群()将被强制执行。
羊群()操作的句柄必须是已打开的文件指针。操作可以是以下值之一:
获取一个共享锁(读程序),设置操作lock_sh(在PHP 4.0.1设置为1版)。
获取独占锁(写程序),设置操作lock_ex(设置为2在PHP 4.0.1版本)。
释放锁(是否共享或独占),设置操作lock_un(设置为3在PHP 4.0.1版本)。
如果你不想让羊群()被锁定时,添加lock_nb操作(设置为4在PHP 4.0.1版本)。
羊群()允许一个简单的读写模式,可以用在任何平台上执行(包括大多数UNIX衍生物和甚至是Windows)。如果锁被阻断(在ewouldblock错误代码的情况下),第三个可选参数将被设置为true。锁操作也可以被释放Fclose(),也被称为自动代码执行时。
成功时返回真实,或返回false。当失败
1例#羊群()的例子
复制代码代码如下所示:
< PHP
$ FP = fopen( / / TMP锁。txt
如果(羊群($ FP,lock_ex)){ / /独占锁
fwrite($ FP,写什么);
羊群($ FP,lock_un); / /释放锁
{人}
无法锁定文件!;
}
Fclose($ FP);
>
注:
因为羊群()需要一个文件指针,它可以使用一个特殊的锁定文件保护访问,写模式打开的文件(添加W或W在fopen()函数。
警告
不能用于NFS和其他网络文件系统。详细说明您自己的操作系统的文档。
在某些操作系统中,()是一群在工艺水平实现的。当使用多线程服务器API(ISAPI),你不可能靠一群()来保护文件,因为PHP脚本在同一个服务器实例和其他并行运行的线程可以处理文件。
不支持旧的文件系统,如FAT及其派生系统。因此,这种环境总是返回false(特别是Windows 98用户)。
php中文件锁功能集群功能的介绍:
Grammar:
布尔羊(int $手柄,操作{ int int美元,美元wouldblock })
羊群()操作的句柄必须是已打开的文件指针。操作可以是以下值之一:
1。获取一个共享锁(读程序),设置操作lock_sh(设置为1在PHP 4.0.1)
2。获取独占锁(写程序),设置操作lock_ex(设置为2在PHP 4.0.1版本)
三.释放锁(是否共享或独占),设置操作lock_un(设置为3在PHP 4.0.1版本)
4。如果你不想让羊群()被锁定时,添加lock_nb操作(设置为4在PHP 4.0.1版本)
请看下面的代码:
A.php
复制代码代码如下所示:
< PHP
文件大小=下的TEMP.TXT;
$ FP = fopen(文件、大片);
如果(羊群($ FP,lock_ex)){
fwrite($ FP,ABC);
睡眠(10);
fwrite($ FP,123);
羊群($ FP,lock_un);
}
Fclose($ FP);
>
b.php
复制代码代码如下所示:
< PHP
文件大小=下的TEMP.TXT;
$ FP = fopen(文件、R′);
回声fread($ FP,100);
Fclose($ FP);
>
运行后b.php A.php,立即运行,你可以看到输出:
基础知识
运行后的运行b.php A.php之后,你可以看到输出:
基础知识
一百二十三
显然,当A.php写入一个文件,数据太大,时间长,当b.php读取数据不完整和修改b.php。
b.php来修改:
复制代码代码如下所示:
< PHP
文件大小=下的TEMP.TXT;
$ FP = fopen(文件、R );
如果(羊群($ FP,lock_ex)){
回声fread($ FP,100);
羊群($ FP,lock_un);
别的{ }
回声锁定文件失败…;
}
Fclose($ FP);
>
运行后b.php A.php,立即运行,你就会发现,b.php会等到A.php是成品(10秒后)。
基础知识
一百二十三
读取数据是完整的,但时间太长,他想等待锁的释放,然后修改b.php。
b.php来修改:
复制代码代码如下所示:
< PHP
文件大小=下的TEMP.TXT;
$ FP = fopen(文件、R′);
如果(羊群($ FP,lock_sh | lock_nb)){
回声fread($ FP,100);
羊群($ FP,lock_un);
别的{ }
回声锁定文件失败…;
}
Fclose($ FP);
>
运行后b.php A.php,立即运行,你可以看到输出:
锁定文件失败…
事实证明,锁文件的故障状态可以返回,而不是如上所述。
小汇编结论:
建议在缓存组成时,选择相关的锁,否则读取的数据可能不完整或被改写成数据。
file_get_contents似乎并没有能够选择一个锁,不知道锁他默认使用。它与未打开的输出是相同的,这是不完整的数据。