gpt4 book ai didi

php - 如何更改文件的前 512 字节?

转载 作者:行者123 更新时间:2023-12-02 19:36:53 27 4
gpt4 key购买 nike

我有一个 PHP 大文件,我想用其他 512 字节替换其中的前 512 字节。有没有 PHP 函数可以帮助我解决这个问题?

最佳答案

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

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

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

$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(),如 How to update csv column names with database table header 中所述,或者如果文件不大,也可以在内存中执行此操作:

$buffer = file_get_contents($filename);

// ... change $buffer ...

file_put_contents($filename, $buffer);

关于php - 如何更改文件的前 512 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com