遍历PHP中服务器上远程托管的500 MB文件的字节
我有一个大型文件托管在远程服务器上(500 MB)。 该文件包含使用AMF3嵌入的可识别的字节块。 这些块可以通过我提前设置的预定义字符串前缀进行标识。 在这种情况下,我在创建期间的各个点将字符串'prefix'附加到文件中。
我想使用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内部服务器错误。 是否有更好的方法遍历整个远程托管的文件的字节,而无需先在本地复制文件?
这非常强烈
$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) ;
}
}
您可以使用fopen()
,然后以块的形式读取文件,而不是读取整个文件,随时搜索前缀字符串。 但是如果前缀恰好跨越块边界,这可能会变得棘手。
上一篇: Traversing bytes of a 500 MB file hosted remotely on a server in PHP
下一篇: what is the most reliable method to get a file from remote server in php