hak*_*kre 10
如果要创建文件并对其进行读写(不截断),则需要使用模式中的fopen()函数打开文件'c+':
$handle = fopen($filename, 'c+');
Run Code Online (Sandbox Code Playgroud)
PHP然后具有stream_get_contents()允许读取具有特定长度(并且从文件中的特定偏移量)到字符串变量的一块字节的函数:
$buffer = stream_get_contents($handle, $length = 512, $offset = 0);
Run Code Online (Sandbox Code Playgroud)
但是,没有stream_put_contents()功能将字符串缓冲区写回特定位置/偏移量的流.相关函数file_put_contents()但不允许在特定偏移处写入文件句柄资源.但fseek()和fwrite()这样做:
$bytes_written = false;
if (0 === fseek($handle, $offset)) {
$bytes_written = fwrite($handle, $buffer, $length);
}
Run Code Online (Sandbox Code Playgroud)
这是完整的图片:
$handle = fopen($filename, 'c+');
$buffer = stream_get_contents($handle, $length = 512, $offset = 0);
// ... change $buffer ...
$bytes_written = false;
if (0 === fseek($handle, $offset)) {
$bytes_written = fwrite($handle, $buffer, $length);
}
fclose($handle);
Run Code Online (Sandbox Code Playgroud)
如果长度$buffer不固定,则无法正常工作.在这种情况下,最好使用两个文件并stream_copy_to_stream()按照如何使用数据库表头更新csv列名称中所述使用,或者如果文件不大,也可以在内存中执行此操作:
$buffer = file_get_contents($filename);
// ... change $buffer ...
file_put_contents($filename, $buffer);
Run Code Online (Sandbox Code Playgroud)