0

我需要的是 PHPfseek()功能的等价物。该函数适用于文件,但我有一个包含二进制数据的变量,我想处理它。我知道我可以使用substr(),但这会很糟糕 - 它用于字符串,而不是二进制数据。此外,创建文件然后使用fseek()也不是我想要的。

也许是用流构建的东西?

编辑:好的,我快到了:

$data = fopen('data://application/binary;binary,'.$bin,'rb');

警告:无法打开流:rfc2397:非法参数

4

3 回答 3

5

凯:

您几乎已经在这里回答了自己。流就是答案。下面的手动输入会很有启发性: http: //us.php.net/manual/en/wrappers.data.php

它本质上允许您将任意数据传递给 PHP 的文件处理函数,例如 fopen(以及 fseek)。

然后你可以做类似的事情:

<?php

$data = fopen('data://mime/type;encoding,' . $binaryData);

fseek($data, 128);
?>
于 2009-06-12T14:57:22.653 回答
2

fseek 对变量中的数据没有意义。fseek 只是将文件句柄定位到指定的偏移量,因此下一个 fread 调用从该偏移量开始读取。字符串没有等效的 fread 。

substr() 有什么问题?

使用文件,您可以:

$f = fopen(...)
fseek($f, offset)
$x = fread($f, len)

带子:

$x = substr($var, offset, len)
于 2009-06-12T14:57:37.753 回答
-1

我猜,但也许要求的是一种通过使用指针来访问变量中字节的方法..(使用它就像你可以在 c 中做的字节数组一样 - 没有放置数据的内存开销在 php 数组中)并且能够在没有复制数据的开销的情况下就地编辑它们。

无法做到这一点是一个大问题,但如果操作系统在临时文件上使用 fseek 很好地缓存磁盘数据可能是一种解决方法。

于 2011-08-09T10:36:13.753 回答