PHP fseek()等价于变量?

时间:2009-06-12 14:36:10

标签: php variables stream fseek

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

也许用流构建的东西?

编辑:好的,我差不多了:

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

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

3 个答案:

答案 0 :(得分:5)

启:

你几乎在这里回答了自己。流是答案。以下手册将具有启发性:http://us.php.net/manual/en/wrappers.data.php

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

然后你可以这样做:

<?php

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

fseek($data, 128);
?>

答案 1 :(得分:2)

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

substr()有什么问题?

您可以使用文件:

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

with substr:

$x = substr($var, offset, len)

答案 2 :(得分:-1)

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

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