JP Richardson
JP Richardson

Reputation: 39395

How can I use the PHP File api to write raw bytes?

I want to write a raw byte/byte stream to a position in a file. This is what I have currently:

$fpr = fopen($out, 'r+');
fseek($fpr, 1); //seek to second byte
fwrite($fpr, 0x63); 
fclose($fpr);

This currently writes the actually string value of "99" starting at byte offset 1. IE, it writes bytes "9" and "9". I just want to write the actual one byte value 0x63 which happens to represent number 99.

Thanks for your time.

Upvotes: 4

Views: 6861

Answers (4)

Christian
Christian

Reputation: 28124

If you really want to write binary to files, I would advise to use the pack() approach together with the file API.

See this question for an example.

Upvotes: 0

Don Neufeld
Don Neufeld

Reputation: 23218

You are trying to pass an int to a function that accepts a string, so it's being converted to a string for you.

This will write what you want:

fwrite($fpr, "\x63");

Upvotes: 1

nsayer
nsayer

Reputation: 17047

fwrite() takes strings. Try chr(0x63) if you want to write a 0x63 byte to the file.

Upvotes: 9

Paige Ruten
Paige Ruten

Reputation: 176665

That's because fwrite() expects a string as its second argument. Try doing this instead:

fwrite($fpr, chr(0x63));

chr(0x63) returns a string with one character with ASCII value 0x63. (So it'll write the number 0x63 to the file.)

Upvotes: 4

Related Questions