0

我有一个托管在远程服务器上的大文件(500 MB)。此文件包含使用 AMF3 嵌入的可识别字节块。这些块可以通过我提前设置的预定义字符串前缀来识别。在这种情况下,我在创建过程中的各个点将字符串“前缀”附加到文件中。

我想使用PHP遍历文件的整个长度,找到这些字符串前缀的确切位置,而不是在服务器上本地复制文件,但是我遇到了问题。现在,我正在使用一个简单的 file_get_contents 和一个指向远程服务器上文件的 HTTP URL,如下所示:

$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 回答