{"id":21744985,"url":"https://github.com/xialeistudio/php-io","last_synced_at":"2025-04-13T05:12:20.124Z","repository":{"id":57083890,"uuid":"234496755","full_name":"xialeistudio/php-io","owner":"xialeistudio","description":"friendly binary stream library for php","archived":false,"fork":false,"pushed_at":"2020-01-17T09:06:55.000Z","size":13,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T22:05:04.792Z","etag":null,"topics":["binary-data","io","protocol"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xialeistudio.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-17T07:39:13.000Z","updated_at":"2021-04-07T08:47:28.000Z","dependencies_parsed_at":"2022-08-24T14:56:34.510Z","dependency_job_id":null,"html_url":"https://github.com/xialeistudio/php-io","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xialeistudio%2Fphp-io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xialeistudio%2Fphp-io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xialeistudio%2Fphp-io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xialeistudio%2Fphp-io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xialeistudio","download_url":"https://codeload.github.com/xialeistudio/php-io/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665743,"owners_count":21142123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary-data","io","protocol"],"created_at":"2024-11-26T07:13:16.580Z","updated_at":"2025-04-13T05:12:20.106Z","avatar_url":"https://github.com/xialeistudio.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# php-io\n\n易用的PHP二进制操作工具库。\n\n如你所知,PHP自带的 `pack`/`unpack` 对用户来说是不友好的，有挺多数据类型定义需要记忆，这就是开发本项目的原因。\n\n你可以使用本库开发类似ES、Redis、Memcached、Kafka等服务器的客户端。\n\n## 安装\n\n```\ncomposer require xialeistudio/io\n```\n\n## 功能\n+ 二进制字符串操作\n+ 文件操作(本地文件、Sockets等等)\n\n## 支持的数据类型\n\n|类型|别名|字节数|\n|:---:|:---:|:---:|\n|unsigned char|uint8|1|\n|signed char|int8|1|\n|unsigned short|uint16|2|\n|signed short|int16|2|\n|unsigned int|uint32|4|\n|signed int|int32|4|\n|string|-|-|\n\n\u003e 所有数据类型都支持大端序(Big Endian)和小端序(Little Endian)\n\n## 示例\n\n### 二进制字符串示例\n\n\u003e 本示例展示使用内存中的二进制字符串来存取二进制数据。\n\n```php\n\u003c?php\nuse io\\BinaryStringInputStream;\nuse io\\BinaryStringOutputStream;\nuse io\\DataInputStream;\nuse io\\DataOutputStream;\n\nrequire __DIR__.'/vendor/autoload.php';\n\n// 使用二进制输出流作为底层，你可以替换为文件流\n$out = new BinaryStringOutputStream();\n// 包装底层输出流为数据输出流，除了字节之外，可以输出指定类型的数据（数字，字符串等）\n$dataOut = new DataOutputStream($out);\n$dataOut-\u003ewriteUnSignedIntBE(0x12345678);\n$dataOut-\u003ewriteUnSignedShortBE(0x1234);\n$dataOut-\u003ewriteString('hello');\n\n// 输出最终数据到二进制字符串\n// 16进制数据: 0x12 0x34 0x56 0x78 0x12 0x34 0x68 0x65 0x6c 0x6c 0x6f\n$data = $out-\u003etoBinaryString(); \n\n// 从二进制字符串新建输入流，你可以替换为文件流\n$in = new DataInputStream(new BinaryStringInputStream($data));\n$int = $in-\u003ereadUnSignedIntBE(); // 16进制: 0x12 0x34 0x56 0x78\n$short = $in-\u003ereadUnSignedShortBE(); // 16进制: 0x12 0x34\n$string = $in-\u003ereadString(5); // 5字节字符串, 内容是 'hello'\n``` \n\n### 文件操作示例\n\n\u003e 本示例展示跟服务器进行二进制数据收发\n\n```php\n\u003c?php\nuse io\\DataInputStream;\nuse io\\DataOutputStream;\nuse io\\FileInputStream;\nuse io\\FileOutputStream;\n\n$client = stream_socket_client('tcp://127.0.0.1:10000', $errno, $errstr);\nif($errno) {\n    die($errstr);\n}\n\n// 本示例使用了私有协议通信\n// 包装底层的文件输出流为数据输出流，获得多格式数据操作能力\n$out = new DataOutputStream(new FileOutputStream($client));\n// 包头\n$out-\u003ewriteUnSignedShortBE(0xcafe); // magic number\n$out-\u003ewriteUnSignedShortBE(0x0001); // version number\n$out-\u003ewriteUnSignedIntBE(0x00000007); // body length 2字节opcode + 5字节内容\n// 包体\n$out-\u003ewriteUnSignedShortBE(0x0001); // opcode\n$out-\u003ewriteString('hello');\n$out-\u003eflush();\n\n// 读取服务器响应\n$in = new DataInputStream(new FileInputStream($client));\n$magicNumber = $in-\u003ereadUnSignedShortBE(); // magic number\n$versionNumber = $in-\u003ereadUnSignedShortBE(); // version number\n$bodyLength = $in-\u003ereadUnSignedIntBE(); // body length;\n$opcode = $in-\u003ereadUnSignedShortBE(); // opcode\n$string = $in-\u003ereadString($bodyLength - $opcode);\n``` \n\n### Kafka Metadata Request示例\n\n`examples/get_kafka_brokers.php` 展示了kafka二进制协议交互。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxialeistudio%2Fphp-io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxialeistudio%2Fphp-io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxialeistudio%2Fphp-io/lists"}