如何修改文件的前512字节


How to change the first 512 bytes of a file?

我在PHP中有一个大文件,我想用其他512个字节替换前512个字节。有什么PHP函数能帮到我吗?

如果您想选择性地创建一个文件并读写它(不截断它),您需要在'c+'模式下使用fopen()函数打开该文件:

$handle = fopen($filename, 'c+');

PHP然后有stream_get_contents()函数,允许读取具有特定长度的字节块(并从文件中的特定偏移量)到字符串变量:

$buffer = stream_get_contents($handle, $length = 512, $offset = 0);

然而,没有stream_put_contents()函数将字符串缓冲区写入流的特定位置/偏移量。一个相关的函数是file_put_contents(),但它不允许在特定的偏移量上写入文件句柄资源。但是fseek()fwrite()可以做到这一点:

$bytes_written = false;
if (0 === fseek($handle, $offset)) {
    $bytes_written = fwrite($handle, $buffer, $length);
}

全图:

$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);

如果$buffer的长度不固定,这将无法正常工作。在这种情况下,最好使用两个文件,并使用stream_copy_to_stream()概述如何使用数据库表头更新csv列名,或者如果文件不大,也可以在内存中这样做:

$buffer = file_get_contents($filename);
// ... change $buffer ...
file_put_contents($filename, $buffer);