我有一个 php 脚本,需要一段时间,因此想要向 AJAX 监听器报告我们所在的位置...所以我的 php 具有如下内容:
<?php
...
while (something == true) {
// lots of loops and work here to do
file_put_contents('progress-info.txt',$progress_info);
}
...
?>
在我的 JavaScript 中,我将此信息读入 div:
<script type="application/javascript">
...
setInterval(function () {
//load data from file and display in element id="progress"
$('#progress').load('/progress-info.txt');
}, 1000); //every second
...
</script>
虽然这对于大部分进度来说效果很好,偶尔(在 10,000 个循环中可能有 3 到 5 次)我收到“无法打开流:无效参数”警告。所以这不是名称本身(或缺少斜杠) - 我宁愿怀疑偶尔的访问冲突,因为两个循环在同一个文件上运行,一个循环写入它,另一个(应该)仅从中读取。 这是因为 jQuery 加载函数在加载时锁定了文件吗? 如果是这样,我有哪些选择可以避免这种冲突? 我尝试在 php 中保持文件打开状态,然后在再次写入之前 chop 它,但这会用 NULL 填充它,并使其在每个循环中变得越来越长 - 也不知道我能对这个问题做什么。 非常感谢任何指点!
最佳答案
对于遇到类似问题的其他人 - 我已在文件上放置了独占锁,这可以通过标志来完成。显然,有几个使用“file_put_contents”执行的子进程,并且仅读取文件的异步 JavaScript 可能会干扰:
file_put_contents('progress-info.txt', $progress_bar, LOCK_EX);
添加 LOCK_EX 标志解决了我的循环执行过程中产生的随机警告问题。
关于javascript - 循环 file_put_contents 偶尔会触发 "failed to open stream"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728068/