首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php中的文件锁定

php中的文件锁定
EN

Stack Overflow用户
提问于 2011-03-27 21:06:16
回答 2查看 13.1K关注 0票数 9

我让一个新手(隔壁的青少年)写了一些php代码来跟踪我网站上的一些使用情况。我不熟悉php,所以我想问一些关于并发文件访问的问题。

我的本地应用程序(在Windows上)偶尔会通过点击包含我的php脚本的URL来将一些数据记录到我的网站上。本机应用程序不会检查返回的数据。

代码语言:javascript
复制
        $fh = fopen($updateFile, 'a') or die("can't open file");
        fwrite($fh, $ip);
        fwrite($fh, ', ');
        fwrite($fh, $date);
        fwrite($fh, ', ');
        fwrite($fh, implode(', ', $_GET));
        fwrite($fh, "\r\n");
        fclose($fh);

这是一个低流量的站点,数据并不重要。但是,如果两个用户发生冲突,并且脚本的两个实例都试图向文件中添加一行,会发生什么情况呢?php中有没有隐式的文件锁定?

上面的代码至少不会被锁定并且永远不会将控制权交还给我的用户吗?文件会被损坏吗?如果我让上面的脚本每月删除该文件,如果该脚本的另一个实例正在向该文件写入,会发生什么情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-27 21:11:48

您应该在文件上设置一个锁:

代码语言:javascript
复制
<?php
$fp = fopen($updateFile, 'w+');
if(flock($fp, LOCK_EX)) {
fwrite($fp, 'a');
flock($fp, LOCK_UN);
} else {
echo 'can\'t lock';
}

fclose($fp);
票数 14
EN

Stack Overflow用户

发布于 2011-05-05 22:36:15

由于这是对文件的追加,最好的方法是聚合数据并在一个fwrite()中将其写入文件,前提是要写入的数据不大于文件缓冲区。当然,您并不总是知道缓冲区的大小,所以flock();总是一个很好的选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5449395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档