在PHP中处理二进制流主要有以下几种方法,可根据具体场景选择合适的方式:
一、通过输入流读取二进制数据
使用`file_get_contents(php://input)` 适用于读取标准输入(如HTTP请求体)中的二进制数据,代码简洁且无需手动管理文件句柄。
```php
$data = file_get_contents('php://input');
// 处理二进制数据
```
使用`fopen`和`fread`
需手动打开输入流(如`php://input`),并使用`fread`读取数据,最后关闭文件句柄。
```php
$handle = fopen('php://input', 'rb');
$data = fread($handle, filesize('php://input'));
fclose($handle);
```
二、通过文件操作处理二进制数据
写入文件
使用`file_put_contents`将二进制数据保存到文件中。
```php
file_put_contents('output.bin', $data);
```
分块读写
通过循环读取大文件,避免一次性加载到内存中。
```php
$handle = fopen('largefile.bin', 'rb');
while (!feof($handle)) {
$chunk = fread($handle, 1024);
// 处理数据块
}
fclose($handle);
```
三、使用内存流处理二进制数据
创建`PhpStream`对象
适用于需要高效读写操作的场景。
```php
$stream = new PhpStream(fopen('php://temp', 'wb'));
$stream->write(chr(0x41)); // 写入字符A
$stream->rewind();
$byte = $stream->read(); // 读取1个字节
fclose($stream);
```
四、其他注意事项
数据打包与解包: 使用`pack`函数将数据转换为二进制格式,或使用`unpack`反向转换。 文件模式
兼容性:`file_get_contents(php://input)`在PHP 4.3.0及以上版本可用。
根据实际需求选择方法,例如:
接收HTTP请求体:使用`file_get_contents(php://input)`或`$_FILES`(表单上传)
处理大文件:使用分块读写或内存流
数据转换:结合`pack`/`unpack`与文件操作