我试图编辑文件的字节。更像是十六进制查看器/编辑器。 例如:
//Adding the file bytes to array (byte array)
$bytes = str_split(file_get_contents("test.file")); //It can be any file. like jpg,png, exe, jar...
现在我只想编辑5个字节并将它们更改为某些字符值。 例如:
//Adding the file bytes to an array (byte array)
$bytes = str_split(file_get_contents("test.file")); //It can be any file. like jpg,png, exe,jar...
$string = "hello";
$bytes[5] = $string[0];
$bytes[6] = $string[1];
$bytes[7] = $string[3];
$bytes[8] = $string[4];
file_put_contents("edited.file", $bytes);
但它只是不起作用...我需要首先将$ string的字母转换为字节,然后编辑字节数组的特定字节($ bytes),而不会破坏文件。
我尝试过使用unpack(),pack()函数,但我不能让它工作...... 我也尝试了ord()函数,但后来将它们保存为interger,但我想保存字符串的字节。
答案 0 :(得分:1)
听起来你可能需要使用unpack来读取二进制数据然后打包以将其写回。
根据文档,这将大致是你想要的。 (但是YMMV,因为我从未真正为自己做过这件事。)
<?php
$binarydata = file_get_contents("test.file");
$bytes = unpack("s*", $binarydata);
$string = "hello";
$bytes[5] = $string[0];
$bytes[6] = $string[1];
$bytes[7] = $string[3];
$bytes[8] = $string[4];
file_put_contents("edited.file", pack("s*", $bytes));
?>
根据注释,unpack产生的数组开始时它的索引为1而不是更正常的0.我也不能强烈地强调我没有测试过这个建议。对待它就像一个受过良好教育的猜测。