javascript - 循环 file_put_contents 偶尔会触发 "failed to open stream"警告

标签 javascript php jquery warnings

我有一个 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/

相关文章:

php - 碳: diffForHumans() displaying wrong statement

javascript - 用于根据其 html 内容禁用链接的 jQuery

javascript - 显示除 2 个特定项目之外的对象项目

php - PHP 文件上传支持哪些文件类型?

javascript - 如何将 TextToSpeech.talk ("hi' ) 操作添加到按钮

php - 通过选择 php 中的下拉列表选项从数据库中选择数据

javascript - 如何删除博主帖子缩略图末尾的三个点

javascript - 请帮助我理解 Javascript 匿名函数和 jQuery .proxy()

javascript - 如何使用 Javascript 实时验证表单

javascript - 在这个例子中如何输出 HTML?