新在Symfo欧宝娱乐app下载地址ny 2.6: LockHandler
2014年9月24日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。欧宝娱乐app下载地址其中一些信息可能是过时了。阅读最近的Symfony文档欧宝娱乐app下载地址。
提供的
格雷戈勒Pineau
在# 10475。
文件锁定是一个机制,限制使用电脑文件,只允许一个用户或进程访问在任何特定时间。这种机制被引入大型机早在1963年,它将使其在Symfony从2.6版开始。欧宝娱乐app下载地址
新LockHandler
抽象类提供了一个简单的锁文件的任何通过锁。它的最常见的用例是避免竞态条件通过锁定命令并发,所以同样的命令不能执行不同的流程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29
使用欧宝娱乐app下载地址\组件\控制台\命令\命令;使用欧宝娱乐app下载地址\组件\控制台\输入\InputInterface;使用欧宝娱乐app下载地址\组件\控制台\输出\OutputInterface;使用欧宝娱乐app下载地址\组件\文件系统\LockHandler;类UpdateContentsCommand扩展命令{受保护的函数配置(){/ /……}受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /创建锁美元锁=新LockHandler (的内容更新:);如果(!美元锁- >锁()){美元输出- >writeln (的命令已经运行在另一个进程。);返回0;}/ /……做一些任务/ /(可选)释放锁(否则,PHP将这样做/ /为您自动)美元锁- >release ();}}
的LockHandler
构造函数的第一个参数锁标识符,它将被用作部分文件的名称用于创建锁。默认情况下,锁系统的临时目录中创建的。如果你想使用一个特定的目录中,把它作为第二个可选参数的构造函数。
的lock ()
方法返回真正的
如果锁被收购假
否则。此外,你可以通过一个布尔参数表示如果你想等到要求释放锁。这有助于执行其他命令后锁定命令完成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
类UpdateContentsCommand扩展命令{/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /创建锁美元锁=新LockHandler (的内容更新:);/ /等待锁释放只要有必要如果(!美元锁- >锁(真正的)){美元输出- >writeln (的命令已经运行在另一个进程。);返回0;}/ /……}}
故意锁处理程序是有限的工作只有基于文件锁,因为它是极其复杂的,让它工作在网络或数据库。这意味着它只能当使用一个且只有一个主机。如果有多个主机,你不能使用这个帮手。
发表在#生活在边缘
评论
Loick Piera
说9月24日,2014年在08:37
@javier我不知道,谢谢。最后一件事,该方法被称为“释放”不是“解锁”(它可能改变在开发为例的公关也不是最新的最终实现),)
@Loick谢谢报告这个错误。我刚刚更新的释放()的方法名,这对我更有意义的方式。
为您的信息,“释放”的方法是可选的,因为PHP将租赁锁在脚本执行结束。
罗杰Llopart解放军
说9月24日,2014年在12:35
在第二个例子中,为什么要写,如果是等待吗?
@Roger,阻塞锁,命令将等待,但可能会有一些问题,防止锁。在这些情况下命令不会永远等下去,它将返回false,见这行代码:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Filesystem/LockHandler欧宝娱乐app下载地址.php l82 - 87
你能添加“使用”LockHandler类声明你的例子吗?现在我们不能看到这个类的名称空间;)
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now