我需要的是 PHPfseek()
功能的等价物。该函数适用于文件,但我有一个包含二进制数据的变量,我想处理它。我知道我可以使用substr()
,但这会很糟糕 - 它用于字符串,而不是二进制数据。此外,创建文件然后使用fseek()
也不是我想要的。
也许是用流构建的东西?
编辑:好的,我快到了:
$data = fopen('data://application/binary;binary,'.$bin,'rb');
警告:无法打开流:rfc2397:非法参数
凯:
您几乎已经在这里回答了自己。流就是答案。下面的手动输入会很有启发性: http: //us.php.net/manual/en/wrappers.data.php
它本质上允许您将任意数据传递给 PHP 的文件处理函数,例如 fopen(以及 fseek)。
然后你可以做类似的事情:
<?php
$data = fopen('data://mime/type;encoding,' . $binaryData);
fseek($data, 128);
?>
fseek 对变量中的数据没有意义。fseek 只是将文件句柄定位到指定的偏移量,因此下一个 fread 调用从该偏移量开始读取。字符串没有等效的 fread 。
substr() 有什么问题?
使用文件,您可以:
$f = fopen(...)
fseek($f, offset)
$x = fread($f, len)
带子:
$x = substr($var, offset, len)
我猜,但也许要求的是一种通过使用指针来访问变量中字节的方法..(使用它就像你可以在 c 中做的字节数组一样 - 没有放置数据的内存开销在 php 数组中)并且能够在没有复制数据的开销的情况下就地编辑它们。
无法做到这一点是一个大问题,但如果操作系统在临时文件上使用 fseek 很好地缓存磁盘数据可能是一种解决方法。