PHP flock()非阻塞仍然阻止了为什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP flock()非阻塞仍然阻止了为什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含988字,纯文字阅读大概需要2分钟。
内容图文
![PHP flock()非阻塞仍然阻止了为什么?](/upload/InfoBanner/zyjiaocheng/752/6ce65a62bb5b4a888a21f7aae1b9b18e.jpg)
我正在使用flock()函数通过获取临时文件上的锁来检查脚本的另一个实例是否已在运行,因此下一个实例应检查文件是否未锁定,否则它将停止
<?php
$fp = fopen("/var/tmp/your.lock", "w");
if (!flock($fp, LOCK_EX|LOCK_NB)) { // try to get exclusive lock, non-blocking
die("Another instance is running");
}
//my script
sleep(10);
echo 'completed successfully';
如果我从同一个浏览器同时打开两个实例,即第一个调用获取锁定,第二个调用等待锁定而不是关闭,则在不同浏览器同时调用文件两次时脚本工作没有问题
我知道可能还有其他方法可以检查一个实例文件是否已经正常工作但是大多数都会做一件事然后撤消它并且在我的用例中脚本可能随时结束,因为它可能需要很长时间或超出内存限制或无论如何
任何帮助?
解决方法:
问题是:
使用来自浏览器的相同url调用相同的脚本两次将通过相同的进程进行线程并且flock()函数在进程层上进行非阻塞工作,导致第二个脚本等待
作为示例呼叫
example.com/test.php
两次将导致两个请求在同一进程上工作,并且附加任何随机变量将为每个单个请求创建单独的进程
example.com/test.php?rand=1
example.com/test.php?rand=2
效果很好.
内容总结
以上是互联网集市为您收集整理的PHP flock()非阻塞仍然阻止了为什么?全部内容,希望文章能够帮你解决PHP flock()非阻塞仍然阻止了为什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。