Pregunta

Lo que necesito es un equivalente para la función fseek() de PHP. La función trabaja en los archivos, pero tengo una variable que contiene datos binarios y quiero trabajar en él. Sé que podría utilizar substr(), pero que sería cojo - se usa para cuerdas, no para datos binarios. Además, la creación de un archivo y luego usando fseek() no es lo que estoy buscando, ya sea para.

Tal vez algo construido con corrientes?

EDIT: Bueno, estoy casi allí:

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

Advertencia: failed to open stream: rfc2397: parámetro ilegal

¿Fue útil?

Solución

Kai:

Usted tiene casi respondió a sí mismo aquí. Corrientes son la respuesta. La siguiente entrada manual será esclarecedor: http://us.php.net/manual /en/wrappers.data.php

En esencia, le permite pasar datos arbitrarios a las funciones de manejo de archivos de PHP como fopen (y por lo tanto fseek).

A continuación, usted podría hacer algo como:

<?php

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

fseek($data, 128);
?>

Otros consejos

fseek en los datos en una variable no tiene sentido. fseek simplemente coloca el identificador de archivo para el desplazamiento especificado, por lo que la siguiente llamada fread comienza a leer a partir de ese desplazamiento. No hay un equivalente de fread para las cadenas.

¿Cuál es incorrecto con substr ()?

Con un archivo que haría:

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

con substr:

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

Estoy adivinando, pero tal vez lo que se está pidiendo es una manera de acceder a los bytes en una variable mediante el uso de un puntero .. (usarlo como una matriz de bytes como se podía hacer en c - sin la sobrecarga de la memoria de poner los datos en arrays PHP) y poder editarlos inplace sin la sobrecarga de copiar los datos.

No ser capaz de hacer esto es un gran problema, pero si el sistema operativo almacena en caché los datos del disco bien utilizando fseek en un archivo temporal podría ser una solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top