0

リモートサーバー(500 MB)でホストされている大きなファイルがあります。このファイルには、AMF3を使用して埋め込まれた識別可能なバイトのチャンクが含まれています。これらのチャンクは、事前に設定した事前定義された文字列プレフィックスによって識別できます。この場合、作成中のさまざまな時点で、文字列'prefix'をファイルに追加しています。

PHPを使用してファイルの全長をトラバースし、サーバー上でファイルをローカルにコピーせずにこれらの文字列プレフィックスの正確な位置を見つけたいのですが、問題があります。現在、次のようにリモートサーバー上のファイルを指すHTTPURLを持つ単純なfile_get_contentsを使用しています。

$file = file_get_contents('http://remote.server.com/file.xxx')

while($offset = strpos($file, 'prefix', $offset + 1)){

//find prefix string value here using regex
// store the position of the value somewhere

}

残念ながら、非常に大きなサイズのファイルではうまく機能せず、500内部サーバーエラーが発生します。 最初にファイルをローカルにコピーせずに、リモートでホストされているファイル全体のバイトをトラバースするためのより良い方法はありますか?

4

2 に答える 2

2

fopen()全体を読み取るのではなく、ファイルをブロック単位で使用して読み取ることができ、プレフィックス文字列を検索します。ただし、プレフィックスがブロック境界にまたがる場合、これは注意が必要になる可能性があります。

于 2012-09-22T07:16:40.850 に答える
1

これは非常にラフです

$file = fopen('http://remote.server.com/file.xxx');
 $contents = '';
while (!feof($file )) {

   $contents .= fread($file , 8192);
   $found = strpos($contents , 'prefix') ;
    if ($found  > 0)
         {
          //do your thing
          $contents  = substr($contents,$found,8192) ;
            } 
}
于 2012-09-22T07:53:44.537 に答える