是否可以在不关闭其读取状态的情况下写入文件? PHP

时间:2016-03-23 21:47:40

标签: php

我很想做一个测试。我的问题是,是否可以打开文件进行读写,所以如果我在一个文件上有更多的读写操作,我不需要关闭读取状态,读取,打开写入状态,写入等等在一个循环中。

$filename = "test.txt";
$handle = fopen($filename, "rwb");
fseek( $handle , 15360 );
$contents = fread($handle, 51200);

$start = microtime (true);
fseek( $handle , 1 );
fwrite ( $handle , $contents );
fclose($handle);

此测试不起作用。我预料到,我将读取数据并将fseek指针移动到文件的开头1或0位置然后我将写入数据。但是由于某种原因,此操作因写入结果0(int)字节而失败。因此我的问题是,它可以做到吗?或者我需要先关闭文件才能阅读?

作为相关子问题 - 更多用户可以同时从不同位置读取或写入文件。因为这应该模拟数据库读/写操作。你知道mysql是如何工作的 - 更多的用户可以随时写同一个表 - 同一个文件。我知道这不是C / C ++中的问题,但可以在php中完成吗?

1 个答案:

答案 0 :(得分:1)

您可以在同一文件上创建多个文件处理程序。只需fopen()两次,一次只读,另一次读/写。虽然我不确定你为什么要这样做,除非你从文件中的两个不同点读写。

$filename = "test.txt";
$rw_handle = fopen($filename, "c+"); //open for read/write, allow fseek
$r_handle = fopen($filename, "r");

如果您希望多个进程从不同位置读取和写入文件,您将要使用flock()

锁定文件