0

私が必要としているのは、PHP のfseek()機能に相当するものです。この関数はファイルに対して機能しますが、バイナリ データを含む変数があり、それを処理したいと考えています。を使用できることはわかっていますsubstr()が、それは不十分です。バイナリデータではなく、文字列に使用されます。また、ファイルを作成してから使用することも、fseek()私が探しているものではありません。

多分ストリームで構築された何か?

編集:さて、私はほとんどそこにいます:

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

警告: ストリームを開けませんでした: rfc2397: 不正なパラメータ

4

3 に答える 3

5

カイ:

あなたはここでほとんど自分自身に答えました。ストリームが答えです。次の手動エントリは啓発的です: http://us.php.net/manual/en/wrappers.data.php

基本的に、fopen (および fseek) などの PHP のファイル処理関数に任意のデータを渡すことができます。

次に、次のようなことができます。

<?php

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

fseek($data, 128);
?>
于 2009-06-12T14:57:22.653 に答える
2

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

substr() の何が問題になっていますか?

ファイルを使用すると、次のようになります。

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

部分文字列:

$x = substr($var, offset, len)
于 2009-06-12T14:57:37.753 に答える
-1

私は推測していますが、おそらく求められているのは、ポインタを使用して変数内のバイトにアクセスする方法です.. php 配列で) データをコピーするオーバーヘッドなしでインプレースで編集できます。

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

于 2011-08-09T10:36:13.753 に答える