2012-09-22 20 views
0

我在遠程服務器(500 MB)上託管了一個大文件。該文件包含使用AMF3嵌入的可識別的字節塊。這些塊可以通過我提前設置的預定義字符串前綴進行標識。在這種情況下,我在創建期間的各個點將字符串'prefix'附加到文件中。遍歷PHP中服務器上遠程託管的500 MB文件的字節

我想遍歷使用PHP的文件的整個長度,找到這些字符串前綴的確切位置,而不在服務器上本地複製文件,但我有問題。現在,我使用的是一個HTTP URL指向文件的遠程服務器上,像這樣一個簡單的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內部服務器錯誤。 有沒有更好的方法來遍歷整個遠程託管的文件的字節,而無需先在本地複製文件?

+0

房地美,也懶得downvote請:原來的問題不是關於HTTP協議,但關於NFS或SMB訪問文件。我特意要求澄清這一點。但後來你編輯了你的問題,並刪除了我的意見。所以我刪除我的答案。 – Serge

回答

1

這是非常rought

$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) ; 
      } 
} 
+0

感謝您的骨架。我能夠得到這個與fopen一起工作,並且性能更好。 – Freddie

2

您可以使用fopen(),然後以塊的形式讀取文件,而不是閱讀整個文件,隨時搜索前綴字符串。但是如果前綴恰好跨越塊邊界,這可能會變得棘手。

相關問題