変数の等価PHP用のfseek()?
質問
私は必要なもの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を使用してもディスクのデータをキャッシュする場合の回避策かもしれない。