2009-06-12 9 views
0

私が必要とするのは、PHPのfseek()機能と同等です。この関数はファイル上で動作しますが、バイナリデータを含む変数があり、それを処理したいのです。私はsubstr()を使うことができると知っていますが、それは不自然なものです。これは文字列に使用され、バイナリデータには使用されません。また、ファイルを作成してfseek()を使用しても、私が探しているものではありません。PHPのfseek()は変数に相当しますか?

ストリームで構築されたものはありますか?

EDIT:さて、私はほとんどそこだ:

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

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

+0

なぜsubstr()を使用しないのか分かりません。それを使用する際に問題が発生しましたか? –

+0

はい、それは遅いです。 – Tower

答えて

5

カイ:

あなたはほとんど答えていますここにあなた自身。ストリームが答えです。以下の手動入力は啓発されます:http://us.php.net/manual/en/wrappers.data.php

これは、fopen(したがってfseek)などのPHPのファイル処理関数に任意のデータを渡すことができます。意味がない変数にデータの

<?php 

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

fseek($data, 128); 
?> 
+0

これは、allow_url_fopenがphp.iniでオンになっていれば動作します –

+0

コードが無効です。構成は間違っているようです。私は 'rb'モードを使いましたが、最初の部分は何らかの方法で間違っているようです。 "ストリームを開けませんでした:rfc2397:無効なパラメータ" – Tower

+0

許可されたタイプについては、http://www.faqs.org/rfcs/rfc2045.htmlを参照してください。 –

2

のfseek:

次に、あなたのような何かを行うことができます。 fseekは指定されたオフセットにファイルハンドルを配置するだけで、次のfreadコールはそのオフセットから読み込みを開始します。文字列にはfreadに相当するものはありません。

substr()で何が問題ですか?

あなたがどうなるファイルで

:私は推測し、多分何のために要求されていることにより、変数のバイトにアクセスするための方法ですよ

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

これは非常に遅いです。私は大きなバイナリファイルを扱っています。それはsubstr()が意図したものではありません。 – Tower

+0

私は今混乱しています。バイナリデータはファイルかPHP変数であるか?ファイルにfseekを使用しないのはなぜですか? – Craig

+0

申し訳ありません。データは送信から得られるファイルからのものです(アップロード形式ではなく、ファイルシステムではなく一時ファイルを作成することができます)。fseekを使用できないか、ファイルを作成するのに意味がありません。 – Tower

-1

:SUBSTRと

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

ポインタを使用して(データをPHP配列に格納するメモリオーバーヘッドなしで、Cでできるようなバイト配列のように使用します)、データをコピーするオーバーヘッドなしにインプレースで編集することができます。

これはできませんが大きな問題ですが、一時ファイルにfseekを使用してオペレーティングシステムがディスクデータをうまくキャッシュすると回避策になる可能性があります。

+0

すでにfseekはポスターが探しているものではありません。 – franka

関連する問題