Php 如何加载URL并仅返回最后20k个URL

Php 如何加载URL并仅返回最后20k个URL,php,http-headers,Php,Http Headers,我已经知道接受范围标题 我调用的URL总是返回2mb文件。我不需要这么多,只需要最后一部分20-50k 我不知道如何使用它?我是否需要使用cURL?我当前使用的是文件\u get\u contents() 有人能给我提供一个例子/教程吗 谢谢 编辑:如果这是不可能的,那么这篇文章是关于什么的? 编辑:乌里卡!我没有疯。你不能那样做。您必须加载整个文件(由源服务器按顺序完整发送),然后丢弃大部分文件 你问的问题就像“我正在用汽车音响调到这个电台,我只想听到节目的最后5分钟,而不必等待其余的节目完成

我已经知道接受范围标题

我调用的URL总是返回2mb文件。我不需要这么多,只需要最后一部分20-50k

我不知道如何使用它?我是否需要使用
cURL
?我当前使用的是
文件\u get\u contents()

有人能给我提供一个例子/教程吗

谢谢

编辑:如果这是不可能的,那么这篇文章是关于什么的?
编辑:乌里卡!我没有疯。

你不能那样做。您必须加载整个文件(由源服务器按顺序完整发送),然后丢弃大部分文件


你问的问题就像“我正在用汽车音响调到这个电台,我只想听到节目的最后5分钟,而不必等待其余的节目完成或更换频道。”

如果你要
文件获取内容()
并将其转储到磁盘上的传递“缓存”文件中,然后,您可以使用unix/linux
tail-c
只获取最后20kb左右的内存。这不会减少实际传输,但会将20kb的数据传输到应用程序中。

这确实是可能的-有关发送和接收的HTTP头的示例,请参阅如果服务器支持,则可以使用
范围
头。看。您希望在请求中发送以下格式的标题:

Range: bytes=-50000
这将为您提供最后50000字节。适应你需要的一切

您可以使用上下文在
file\u get\u contents
中指定此标题。例如:

// Create a stream
$opts = array(
  'http'=>array(
    'method' => "GET",
    'header' => "Range: bytes=-50000\r\n"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);

但是浏览器知道文件有多大;没有什么可以阻止它获取总大小并返回指定的范围。在连接断开时恢复下载时已经讨论过这一点,并且应该是相同的主体。对于一个广播节目,你不知道最后5分钟需要多长时间,如果你知道的话,那么你可以。这对可恢复下载是如何工作的呢?这只适用于发送文件的人吗?顺便说一句,我不介意弄错,我只是好奇另一个人在说什么:)请看我编辑的帖子?我已经贴了一个链接到我正在谈论的内容。@jwenting,你把它比作广播节目是不准确的。内容就在那里,服务器知道它有多大,客户端知道它想要什么部件。这是最有可能的。传输不是问题,而且TBH,我不介意必须获取2MB文件。我只是不明白人们在使用这个标题时在说什么。如果它不这样做,它会做什么…否决票是怎么回事。。。这是一个合法的解决办法。这不是居高临下,而且措辞正确。因为问题明确地问到如何不下载整个文件。当然这是可能的。也就是说,对于支持它的服务器,大多数都是这样做的。今晚晚些时候我将发布示例代码,但实际上,您应该能够设置适当的头并使用curl。非常感谢。