PHP fseek () equivalente para as variáveis?
Pergunta
O que eu preciso é um equivalente para a função fseek()
do PHP. A função funciona em arquivos, mas eu tenho uma variável que contém dados binários e quero trabalhar sobre ela. Eu sei que eu poderia usar substr()
, mas isso seria coxo - é usado para cordas, não para dados binários. Além disso, a criação de um arquivo e, em seguida, usando fseek()
não é o que eu estou procurando qualquer um.
Talvez algo construído com streams?
EDIT: Ok, eu estou quase lá:
$data = fopen('data://application/binary;binary,'.$bin,'rb');
Aviso: falha ao fluxo aberto: rfc2397: parâmetro ilegal
Solução
Kai:
Você quase respondeu a si mesmo aqui. Streams são a resposta. A seguir, a entrada manual será esclarecedor: http://us.php.net/manual /en/wrappers.data.php
É essencialmente permite que você passar dados arbitrários para arquivo funções de manipulação de PHP, como fopen (e, portanto, fseek).
Em seguida, você poderia fazer algo como:
<?php
$data = fopen('data://mime/type;encoding,' . $binaryData);
fseek($data, 128);
?>
Outras dicas
fseek em dados em uma variável não faz sentido. fseek apenas posiciona o identificador de arquivo para o deslocamento especificado, então as próximas partidas chamada fread a leitura de que compensado. Não há equivalente a fread para strings.
errada O que acontece com substr ()?
Com um arquivo que você faria:
$f = fopen(...)
fseek($f, offset)
$x = fread($f, len)
com substr:
$x = substr($var, offset, len)
Eu estou supondo, mas talvez o que está sendo solicitado é uma forma de acesso bytes em uma variável usando um ponteiro .. (usando-o como uma matriz de bytes como você poderia fazer em c - sem a sobrecarga de memória de colocar os dados em matrizes PHP) e ser capaz de editá-los iNPLACE sem a sobrecarga de copiar os dados.
Não ser capaz de fazer isso é um grande problema, mas se o sistema operacional armazena em cache dados do disco bem usando fseek em um arquivo temporário pode ser uma solução alternativa.