Nasıl ham bayt yazmak için PHP Dosya API kullanabilir?

4 Cevap php

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

Bu şu anda bayttan başlayarak "99" arasında aslında dize değeri 1. IE ofset yazıyor, bu bayt "9" ve "9" yazıyor. Ben sadece 99 numarayı temsil etmek olur gerçek bir bayt değeri 0x63 yazmak istiyorum.

Zaman ayırdığınız için teşekkürler.

4 Cevap

fwrite() dizesini alır. Try chr(0x63) dosyaya bir 0x63 bayt yazmak isterseniz.

Fwrite () ikinci argüman olarak bir dize bekliyor olmasıdır. Yerine bunu deneyin:

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

chr (0x63) ASCII değeri 0x63 ile bir karakter ile bir dize döndürür. (Yani dosyaya 0x63 numarasını yazacağım.)

Bir dize kabul eden bir işleve bir int geçmek için çalışıyoruz, bu yüzden sizin için bir dizeye dönüştürülür ediliyor.

Bu ne istediğinizi yazacaksınız:

fwrite($fpr, "\x63");

Eğer gerçekten dosyaları ikili yazmak istiyorsanız, dosya API'si ile birlikte pack() yaklaşımı kullanmak için tavsiye ederiz.

See this question, bir örneğin.