PHP эквивалент fseek () для переменных? - PullRequest
0 голосов
/ 12 июня 2009

Что мне нужно, это эквивалент для функции PHP fseek(). Функция работает с файлами, но у меня есть переменная, которая содержит двоичные данные, и я хочу работать с ней. Я знаю, что мог бы использовать substr(), но это было бы неудачно - он используется для строк, а не для двоичных данных Кроме того, создание файла с последующим использованием fseek() - это не то, что я ищу.

Может быть, что-то построено с потоками?

РЕДАКТИРОВАТЬ: Хорошо, я почти там:

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

Предупреждение: не удалось открыть поток: rfc2397: недопустимый параметр

Ответы [ 3 ]

5 голосов
/ 12 июня 2009

Кай:

Вы почти ответили себе здесь. Потоки являются ответом. Следующий ручной ввод будет поучительным: http://us.php.net/manual/en/wrappers.data.php

По сути, он позволяет передавать произвольные данные в функции обработки файлов PHP, такие как fopen (и, следовательно, fseek).

Тогда вы можете сделать что-то вроде:

<?php

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

fseek($data, 128);
?>
2 голосов
/ 12 июня 2009

поиск данных в переменной не имеет смысла. fseek просто устанавливает дескриптор файла на указанное смещение, поэтому следующий вызов fread начинает читать с этого смещения Для строк нет эквивалента fread.

Что не так с substr ()?

С файлом вы бы сделали:

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

с подстрокой:

$x = substr($var, offset, len)
0 голосов
/ 09 августа 2011

Я предполагаю, но, возможно, то, что запрашивается, - это способ доступа к байтам в переменной с помощью указателя ... (используя его как массив байтов, как вы могли бы сделать в c - без перегрузки памяти помещать данные в php-массивы) и иметь возможность редактировать их без лишних затрат на копирование данных.

Невозможность сделать это - БОЛЬШАЯ проблема, но если операционная система хорошо кэширует данные на диске, использование fseek во временном файле может быть обходным путем.

...