質問

私は必要なものPHPのfseek()機能と同等です。この関数は、ファイル上で動作しますが、私は、バイナリデータを含む変数を持っていると私はそれに仕事をしたいです。私はsubstr()を使用することができます知っているが、それはラメだろう - それはないバイナリデータのために、文字列のために使われています。また、ファイルを作成し、fseek()を使用すると、私はどちらかを探していたものではありません。

たぶんストリームで構成何か?

編集:さて、私はほとんどそこだ。

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

警告:ストリームをオープンに失敗しました:RFC2397:違法パラメータ

役に立ちましたか?

解決

甲斐ます:

あなたは、ほぼここに自分自身に答えています。ストリームがその答えです。次のマニュアルのエントリは、啓発になります: http://us.php.net/manual /en/wrappers.data.phpする

これは、基本的にあなたがそのようなのfopen(したがってのfseek)とPHPのファイル処理関数に任意のデータを渡すことができます。

次に、あなたのような何かを行うことができます:

<?php

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

fseek($data, 128);
?>

他のヒント

変数内のデータ上のfseek関数は意味がありません。 fseek関数は、単に指定されたオフセットにファイルハンドルを配置し、その次の関数freadの呼び出しはそのオフセットから読み取りを開始します。文字列の関数freadの等価なものはありません。

をいただきました(SUBSTRと間違っている)?

ファイルを使用すると、どうなるます:

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

SUBSTRでます:

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

私はあなたのようなバイトの配列のようにそれを使用してCで行うことができます(..推測し、多分何のために要求されていることは、ポインタを使って変数にバイトにアクセスするための方法ですよ - のメモリオーバーヘッドなしPHPの配列にデータを置く)と、データをコピーするオーバーヘッドなしでインプレースそれらを編集することができるという。

これを行うことができることは大きな問題ですが、オペレーティングシステムは、一時ファイルにfseekを使用してもディスクのデータをキャッシュする場合の回避策かもしれない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top