gpt4 book ai didi

php - file_get_contents 似乎正在缓存,锁定脚本问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:07 24 4
gpt4 key购买 nike

假设我们需要一些锁定脚本来确保两个脚本永远不会同时运行:

if(file_get_contents('test.txt')) { // this is always empty...
die("Another script is running in background!");
}
file_put_contents('test.txt', 'busy!');
sleep(10); // heavy work here
file_put_contents('test.txt', '');

它仍然允许我同时运行两个脚本。看起来 file_get_contents() 的结果被缓存了?

如何解决?我想使用文件,而不是数据库。


编辑:我已经设法使用 flock() 完成锁定脚本(感谢李维·莫里森)

无论如何,我仍然很好奇为什么 file_get_contents 会出现如此意外的行为?

最佳答案

我能够重现它并找出问题所在。起初它看起来像你描述的那样:我在浏览器中请求了脚本,当它运行时我检查了文件内容 - 它是 busy! .然后我运行第二个脚本,它也在浏览器中加载,与第一个脚本相同。我以为它也在运行,但它没有

很容易计算,如果不是 busy!你随机添加一些东西,比如:

file_put_contents('test.txt', 'busy washing ' . (mt_rand(1, 999) * 99999) . ' dishes');

以相同的方式运行相同的两个脚本并监控文件内容。首先,它将是第一个脚本编写的内容。说 busy washing 1 dishes .然后你会看到内容变成了第二个脚本写的,数字会不一样。

基本上,第二个脚本会等待,而第一个脚本完成后才开始。有趣的是,完成后,第一个脚本清除了文件,这让第二个脚本正常运行,但在浏览器中看起来它们都在同时工作。事实上,第二个脚本的运行时间是第一个脚本的两倍。

我在通过 AJAX 执行繁重的异步请求并在另一个浏览器选项卡中请求相同的网站页面时遇到过这种行为。在脚本完成之前,我无法加载选项卡。

长话短说,没有问题!如果您通过 cron 对脚本进行排队,它们将单独运行,第二个将通过发现文件不为空而完成。

关于php - file_get_contents 似乎正在缓存,锁定脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com