2

我需要更改文件中的单个字符。
我宁愿不使用这样的辅助文件(伪代码):
read(theFile)

change(theFile)

write(theFile2)

erase(theFile)

rename(theFile2,theFile)

由于通过这种方式,某些进程可能会在实际擦除该文件时需要该文件。
相反,我想对自己的文件进行操作,因为这样,我依靠服务器的操作系统来处理对文件的时间和进程访问。

4

2 回答 2

4

You'll want to use flock to lock the file. Example based on code from the PHP docs:

<?php

$fp = fopen("file.txt", "r+");

if (flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    //make your changes
    fflush($fp);            // flush output before releasing the lock
    flock($fp, LOCK_UN);    // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);

?>
于 2012-05-07T19:00:03.050 回答
1

就地编辑是可能的,但取决于您想要的内容可能非常困难。例如,这段代码:

<?php

$r = fopen("test.txt", "c+");
fseek($r, 50);

// write out
fwrite($r, "TESTING");
fclose($r);

将打开一个名为的文件并将TESTINGtest.txt一词插入文件中 50 个字节。关闭句柄后,文件将与更改一起保存:无需完全替换。通过这种方式,您可以数据添加到文件的内部。我在任何 PHP 函数中都看不到删除部分文件的方法,因此如果您需要删除任何内容,您可能不走运并且必须覆盖整个文件。

fopen编辑:据我从文档中得知,这需要 PHP 5.2.6 或更高版本。

于 2012-05-07T19:58:12.610 回答