Como posso usar a API do arquivo PHP para escrever bytes brutos?
Pergunta
Quero gravar um fluxo bruto de bytes/bytes em uma posição em um arquivo.Isso é o que tenho atualmente:
$fpr = fopen($out, 'r+');
fseek($fpr, 1); //seek to second byte
fwrite($fpr, 0x63);
fclose($fpr);
Atualmente, isso grava o valor real da string "99", começando no deslocamento de byte 1.Ou seja, ele grava os bytes "9" e "9".Eu só quero escrever o valor real de um byte 0x63, que representa o número 99.
Obrigado pelo seu tempo.
Solução
fwrite()
leva cordas.Tentar chr(0x63)
se você quiser escrever um 0x63
byte para o arquivo.
Outras dicas
Isso porque fwrite() espera uma string como segundo argumento.Tente fazer isso:
fwrite($fpr, chr(0x63));
chr(0x63) retorna uma string com um caractere com valor ASCII 0x63.(Portanto, escreverá o número 0x63 no arquivo.)
Você está tentando passar um int para uma função que aceita uma string, então ele está sendo convertido em uma string para você.
Isto irá escrever o que você deseja:
fwrite($fpr, "\x63");
Se você realmente deseja gravar binários em arquivos, aconselho usar o pack()
abordagem junto com a API do arquivo.
Veja esta pergunta Por exemplo.