Đọc và ghi tệp nhị phân trong php

BinaryStream - một công cụ hữu ích để làm việc với dữ liệu nhị phân và là sự thay thế tốt nhất cho pack()/unpack() với danh sách lớn các tính năng

Đọc và ghi tệp nhị phân trong php
Đọc và ghi tệp nhị phân trong php
Đọc và ghi tệp nhị phân trong php
Đọc và ghi tệp nhị phân trong php
Đọc và ghi tệp nhị phân trong php
Đọc và ghi tệp nhị phân trong php

Nếu bạn đang tìm kiếm một công cụ tiện lợi cho phép đọc và ghi dữ liệu nhị phân (dù là định dạng hiện có hay do bạn tạo ra), bạn hãy chọn đúng thư viện

_BinaryStream_ - là một công cụ mạnh mẽ để đọc và ghi các tệp nhị phân. Nó hỗ trợ nhiều loại dữ liệu cấp cao và đôi khi khiến bạn quên rằng mình đang làm việc với dữ liệu nhị phân phi cấu trúc

Với BinaryStream, bạn có thể xử lý các gói mạng, tệp nhị phân, giao thức hệ thống và dữ liệu cấp thấp khác

Đặc trưng

  • Phiên bản PHP được hỗ trợ tối thiểu là 5. 3. 0 cho tất cả các tính năng
  • Thư viện hỗ trợ tất cả các loại dữ liệu chính và cho phép cả đọc và ghi dữ liệu
  • Hỗ trợ cả thứ tự byte trực tiếp (big endian) và đảo ngược (nhỏ). Bạn có thể chuyển đổi giữa chúng trong khi đọc tệp
  • Hỗ trợ nhiều chiều của số nguyên (8, 16, 32 và 64) và cũng hiếm (24, 40, 48 và 56)
  • Hỗ trợ nhiều chiều của các số phân số (32 và 64)
  • Bạn có thể đọc cả byte riêng lẻ và bit riêng lẻ
  • Để dễ dàng điều hướng qua tệp, bạn có thể ra lệnh cho BinaryStream ghi nhớ một số vị trí trong tệp và sau đó quay lại chúng lần nữa
  • Hỗ trợ nhóm dữ liệu. lưu cấu hình một lần và sau đó đọc các nhóm dữ liệu tương tự chỉ với tên của nó
  • Hỗ trợ các tệp cấu hình để chuyển đổi giữa các định dạng và phiên bản tệp
  • Không giống như các hàm php tiêu chuẩn, nó có thể hoạt động với các số phân số được viết theo cả thứ tự byte trực tiếp (Big-Endian) và thứ tự ngược lại (Little-Endian)

Tại sao về mặt khách quan, gói/giải nén lại tốt hơn?

Và đó là tất cả với PHP 5. 3

Thủ công

Cách sử dụng đơn giản

Cách dễ nhất để sử dụng BinaryStream - cái này

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$text = $s->readString(20);

Ví dụ này đọc 20 byte ở đầu tệp dưới dạng chuỗi

Một ví dụ phức tạp hơn, trong đó dữ liệu được đặt theo thứ tự sau. - số nguyên (int, 32 bit) - float (float, 32 bit) - byte cờ (trong đó mỗi bit có giá trị riêng, 8 bit). bit đầu tiên xác định xem sau byte này có ghi dữ liệu khác hay không, 5 bit trống và 2 bit cuối cùng của loại dữ liệu

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.

Để đọc những dữ liệu này và những dữ liệu phụ thuộc vào cờ, ví dụ này phù hợp

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}

Trong ví dụ này, chúng tôi đọc dữ liệu cơ bản và bổ sung, dựa trên giá trị của cờ

Nhưng nó không chắc là rất ít dữ liệu. Để thuận tiện hơn, bạn có thể sử dụng chức năng đọc theo nhóm. Ví dụ trước có thể được viết lại như sau

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}

Nếu bạn đang đọc một tệp trong đó các nhóm dữ liệu như vậy được lặp lại, bạn có thể lưu một nhóm có tên, sau đó chỉ cần tham khảo nhóm đó để đọc dữ liệu tiếp theo. Hãy để chúng tôi giới thiệu thêm một giá trị cho data_type.

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
2 - nghĩa là đây là nhóm dữ liệu cuối cùng trong tệp. Một ví dụ sẽ là

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$stream->saveGroup('Data', [
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);

do {
    $data = $stream->readGroup('Data');
    // Some operations with data
} while ($data['data_type'] != 0b11);

Và bây giờ hãy tưởng tượng rằng chúng ta đã chuyển sang một định dạng tệp mới khác với định dạng trước đó và có một dấu nhất định ở đầu tệp, điều này sẽ giúp phân biệt định dạng mới với định dạng cũ. Ví dụ, một nhãn mới là một dãy ký tự

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
3. Chúng ta cần kiểm tra nhãn và nếu có, hãy phân tích tệp theo sơ đồ khác và nếu không, hãy sử dụng phiên bản cũ của bộ xử lý. Một ví dụ để minh họa điều này

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}

Cài đặt

Cài đặt qua nhà soạn nhạc

________số 8

Tài liệu tham khảo

Loại dữ liệu

Tất cả các loại dữ liệu được sử dụng được trình bày trong bảng sau

Loại hình. kích thước. phạm vi giá trị. ghi chú. . ---------. -----------------. -------------------------------------------------- . -------. . số nguyên. 8/16/32/64 bit. 0 đến 255/65 535/4 294 967 295/9 223 372 036 854 775 807. Ngoài ra, có hỗ trợ cho các kích thước không chuẩn như 24, 40, 48 và 56 bit. . . trôi nổi. 32/64 bit. 0 đến 3. 4x10^38/1. 798 x 10^308. Ngoài ra, có hỗ trợ chọn thứ tự byte khi lưu trữ số float (không giống như

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
4). . . than. 1 byte. Từ 0 đến 255 ký tự ascii. -. . sợi dây. [n] byte. . . -. . chút. [n] bit. 0 hoặc 1. Ngoài ra, có hỗ trợ kết hợp một số bit liên tiếp trong một giá trị.

API

  • Tạo một đối tượng có thể theo nhiều cách. `new BinaryStream($filename. ổ cắm $. $stream)`
  • Có thể đọc dữ liệu bằng các phương pháp chuyên dụng cho từng loại dữ liệu. - chút. - `readBit(). boolean`

    Thí dụ. `$flag = $s->readBit();` - `readBits(mảng $listOfBits). mảng boolean và số nguyên`

    Thí dụ. `$flags = $s->readBits(['a' => 2, '_' => 5, 'b' => 3]);` Nếu kích thước của trường (giá trị phần tử mảng là `1`, thì . ) - ký tự. - `readChar(). chuỗi(1)`

    Thí dụ. `$char = $s->readChar();` - `readChars($count). mảng chuỗi(1)`

    Thí dụ. `$chars = $s->readChars(4);` - số nguyên - `readInteger($sizeInBits = 32). số nguyên`

    Thí dụ. `$int = $s->readInteger(32);` Nó hỗ trợ các kích thước sau. 8, 16, 32, 64 và 24, 40, 48, 56 bit. - trôi nổi. - `readFloat($sizeInBits = 32). phao`

    Thí dụ. `$float = $s->readFloat(32);` Nó hỗ trợ các kích thước sau. 32, 64 bit. - sợi dây. - `readString ($ độ dài). chuỗi($độ dài)`

    Thí dụ. `$string = $s->readString(10);`

Các nhóm trường

Bạn có thể lưu danh sách các định nghĩa trường với một tên cụ thể và sử dụng tên đó khi bạn cần đọc cùng một khối vài lần. Một nhóm được xác định bởi cấu hình nhóm - danh sách các trường, loại và kích thước của chúng. Để soạn cấu hình nhóm, hãy tạo một mảng. các phím xác định loại và tên của các trường, giá trị - kích thước của chúng. - khóa là tên của trường và có thể chứa loại trường. Để chỉ định loại, hãy thêm tên bằng một chữ cái loại và dấu hai chấm. gõ chữ cái

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
0
  • - `0b00` - after this data recorded 1 character (char, 8 bits)
    - `0b01` - after this data recorded 10 characters (string, 10 bytes)
    - `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
    - `0b11` - not used at this moment.
    
    1

Vì vậy, ví dụ đầy đủ về cấu hình nhóm

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
2

Phương pháp. Cách sử dụng. ghi chú. . -----------------------------------------------. -------------------------------------------------- . -------------------------------------------------- . .

- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
5.
- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
6. Tạo nhóm mới với vài trường. Nếu nhóm có tên đó đã tồn tại, nó sẽ thay thế nhóm ban đầu. . .
- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
7.
- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
8. Nó cho phép bạn đọc dữ liệu từ cấu hình đã lưu sẵn. Để lưu một nhóm dưới một tên mới, hãy sử dụng phương pháp
- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
9. .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
0.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
1. Các trường được liệt kê trong mảng dưới dạng trong đó các khóa xác định loại và tên của trường dữ liệu cũng như giá trị - thứ nguyên (được hiểu là byte cho chuỗi và ký tự và là bit cho mọi thứ khác). được hỗ trợ.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
2,
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
3,
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
4,
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
5 và
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
6. Nếu loại không được chỉ định, trường được coi là một bit (hoặc một vài bit). Loại và tên được phân tách bằng dấu hai chấm (. ).

dẫn đường

  • con trỏ di chuyển. Để thay đổi vị trí của con trỏ trong tệp, hãy sử dụng các phương pháp sau

Phương pháp. Cách sử dụng. ghi chú. . ----------------. ----------------------------. -------------------------------------------------- . .

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
7.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$int = $stream->readInteger(32);
$float = $stream->readFloat(32);
$flags = $stream->readBits([
    'additional_data' => 1,
    '_' => 5, // pointless data
    'data_type' => 2,
]);
if ($flags['additional_data']) {
    if ($flags['data_type'] == 0b00)
        $char = $stream->readChar();
    else if ($flags['data_type'] == 0b01)
        $string = $stream->readString(10);
    else if ($flags['data_type'] == 0b10)
        $time = date('r', $stream->readInteger(64));
}
8. Nó đi đến vị trí tuyệt đối trong tập tin. Nếu bạn chuyển một giá trị âm, thì giá trị của con trỏ sẽ được đặt thành _______29 byte từ cuối tệp. . .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
0.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
1. Nó di chuyển đến vị trí mà dấu
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
2 đã được đặt. . .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
3.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
4. Bỏ qua các byte sau
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
5.

  • ________ 10 Trả về true nếu con trỏ ở cuối tệp
  • Ghi nhớ các vị trí trong tập tin

Phương pháp. Cách sử dụng. ghi chú. . ------------------------------. ------------------------------------------. -------------------------------------------------- . .

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
6.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
7. Nó lưu vị trí con trỏ hiện tại dưới tên
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
8. . .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
9.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$stream->saveGroup('Data', [
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);

do {
    $data = $stream->readGroup('Data');
    // Some operations with data
} while ($data['data_type'] != 0b11);
0. Nó lưu vị trí cụ thể trong tệp dưới tên
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
8. . .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$stream->saveGroup('Data', [
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);

do {
    $data = $stream->readGroup('Data');
    // Some operations with data
} while ($data['data_type'] != 0b11);
2.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$stream->saveGroup('Data', [
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);

do {
    $data = $stream->readGroup('Data');
    // Some operations with data
} while ($data['data_type'] != 0b11);
3. Kiểm tra xem dấu
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$data = $stream->readGroup([
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);
if ($data['additional_data']) {
    if ($data['data_type'] == 0b00)
        $data['char'] = $stream->readChar();
    else if ($data['data_type'] == 0b01)
        $data['string'] = $stream->readString(10);
    else if ($data['data_type'] == 0b10)
        $data['time'] = date('r', $stream->readInteger(64));
}
8 đã được đặt chưa. Trả về true hoặc false.

Phụ trợ

  • - `0b00` - after this data recorded 1 character (char, 8 bits)
    - `0b01` - after this data recorded 10 characters (string, 10 bytes)
    - `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
    - `0b11` - not used at this moment.
    
    1So sánh các byte `$length` từ vị trí hiện tại với `$bytes`. Vị trí hiện tại sẽ không thay đổi. Trả về true hoặc false
  • độ bền. Theo mặc định,
    use wapmorgan\BinaryStream\BinaryStream;
    $stream = new BinaryStream('filename.ext');
    $stream->saveGroup('Data', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);
    
    do {
        $data = $stream->readGroup('Data');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
    
    5 coi
    use wapmorgan\BinaryStream\BinaryStream;
    $stream = new BinaryStream('filename.ext');
    $stream->saveGroup('Data', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);
    
    do {
        $data = $stream->readGroup('Data');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
    
    6 và
    use wapmorgan\BinaryStream\BinaryStream;
    $stream = new BinaryStream('filename.ext');
    $stream->saveGroup('Data', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);
    
    do {
        $data = $stream->readGroup('Data');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
    
    7 ở định dạng little-endian. Để thay đổi thứ tự đọc của byte, hãy sử dụng phương thức `setEndian($endian)` với một trong các hằng số `BinaryStream`

Không thay đổi. Nghĩa. . ------------------------. --------------------------------------. .

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$stream->saveGroup('Data', [
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);

do {
    $data = $stream->readGroup('Data');
    // Some operations with data
} while ($data['data_type'] != 0b11);
8. Big-endian cho số nguyên và số float. .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');
$stream->saveGroup('Data', [
    'i:int' => 32,
    'f:float' => 32,
    'additional_data' => 1,
    '_' => 5,
    'data_type' => 2,
]);

do {
    $data = $stream->readGroup('Data');
    // Some operations with data
} while ($data['data_type'] != 0b11);
9. Little-endian cho số nguyên và float

cấu hình

Phương pháp. Cách sử dụng. ghi chú. . ----------------------------. -------------------------------------------------- . -------------------------------------------------- . .

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
0.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
1. Tải cấu hình (thứ tự byte và nhóm dữ liệu) từ tệp bên ngoài. Định dạng cấu hình - ini. Để xem ví dụ về tệp như vậy, hãy mở conf/mp3. tập tin conf. . .
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
2.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
3. Lưu cài đặt hiện tại của thứ tự byte và tất cả các nhóm dữ liệu đã tạo vào một tệp bên ngoài ở định dạng ini. Cấu hình này sau đó có thể được khôi phục từ tệp bằng phương pháp
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
4.

Sử dụng nâng cao. Viết

Nếu bạn là người cần ghi dữ liệu vào tệp nhị phân, bạn có thể sử dụng các phương pháp bổ sung để thực hiện việc này

Đầu tiên, bạn cần mở tệp ở một trong các chế độ cho phép ghi tệp (theo mặc định, tệp được mở ở chế độ chỉ đọc). Đối với điều này khi bạn tạo một đối tượng BinaryStream chỉ định trong đối số thứ hai một trong các chế độ sau

Cách thức. Không thay đổi. ghi chú. . ------------. --------------------------. -------------------------------------------------- . . Sự sáng tạo.

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
5. Tạo tập tin mới. Thất bại khi tập tin đã tồn tại. . . giải trí.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
6. Xóa tất cả nội dung tệp và đặt con trỏ ở đầu. Thất bại khi tập tin không tồn tại. . . viết lại.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
7. Mở tệp và đặt con trỏ ở đầu. Thất bại khi tập tin không tồn tại. . . Đang bổ sung.
use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
8. Mở tệp và đặt con trỏ ở cuối. Thất bại khi tập tin không tồn tại.

Sau khi bạn đã mở tệp chính xác, bạn có thể sử dụng các phương pháp sau, được đặt tên theo cách tương tự với phương pháp khác được thiết kế để đọc

Loại dữ liệu. Phương pháp. Thí dụ. ghi chú. . ---------------. ----------------------------------------. -------------------------------------------------- . -------------------------------------------------- . . chút.

use wapmorgan\BinaryStream\BinaryStream;
$stream = new BinaryStream('filename.ext');

if ($stream->compare(3, 'ASC')) {
    // parse here new format
} else {
    $stream->saveGroup('DataOld', [
        'i:int' => 32,
        'f:float' => 32,
        'additional_data' => 1,
        '_' => 5,
        'data_type' => 2,
    ]);

    do {
        $data = $stream->readGroup('DataOld');
        // Some operations with data
    } while ($data['data_type'] != 0b11);
}
9.
composer require wapmorgan/binary-stream
0. . . .
composer require wapmorgan/binary-stream
1.
composer require wapmorgan/binary-stream
2. Bạn có thể kết hợp nhiều bit thành một số. Để làm điều này, thay vì sử dụng một mảng boolean, trong đó phần tử đầu tiên là số bit được sử dụng để ghi số và phần tử thứ hai - số. . . than.
composer require wapmorgan/binary-stream
3.
composer require wapmorgan/binary-stream
4. Bạn có thể chuyển một ký tự (chuỗi) và mã cho ký hiệu này (một số nguyên lên tới 256). . . số nguyên.
composer require wapmorgan/binary-stream
5.
composer require wapmorgan/binary-stream
6. Nó hỗ trợ các kích thước sau. 8, 16, 32, 64 bit. . . trôi nổi.
composer require wapmorgan/binary-stream
7.
composer require wapmorgan/binary-stream
8. Nó hỗ trợ các kích thước sau. 32, 64 bit. . . sợi dây.
composer require wapmorgan/binary-stream
9.
- `0b00` - after this data recorded 1 character (char, 8 bits)
- `0b01` - after this data recorded 10 characters (string, 10 bytes)
- `0b10` - after this data time in unixtime format packaged in long integer (long, 64 bits)
- `0b11` - not used at this moment.
00.

Làm cách nào tôi có thể ghi dữ liệu nhị phân vào một tệp trong PHP?

Để ghi dữ liệu nhị phân vào một tệp, bạn có thể sử dụng các hàm pack() và unpack() . Gói sẽ tạo ra một chuỗi nhị phân. Vì kết quả là một chuỗi, bạn có thể nối các số nguyên thành một chuỗi. Sau đó viết chuỗi này dưới dạng một dòng vào tệp của bạn.

PHP có thể truy cập các tệp nhị phân không?

tập lệnh php không thể xem hoặc truy cập tệp nhị phân .

Fread PHP là gì?

Định nghĩa và cách sử dụng . Chức năng sẽ dừng ở cuối tệp hoặc khi đạt đến độ dài quy định, tùy theo điều kiện nào đến trước. reads from an open file. The function will stop at the end of the file or when it reaches the specified length, whichever comes first.