Возможно ли получить последние 1 МБ данных файла с помощью cURL? Я знаю, что могу получить первый MB, но мне нужен последний.Получение последнего МБ файла с cURL
3
A
ответ
4
Да, вы можете сделать это, указав заголовок Range HTTP в запросе:
// $curl = curl_init(...);
$lower = $size - 1024 * 1024;
$upper = $size;
url_setopt($curl, CURLOPT_HTTPHEADER, array("Range: bytes=$lower-$upper"));
Примечание: Вы должны убедиться, что сервер, который вы запрашиваете данные позволяет. Сделайте запрос HEAD
и проверьте заголовок Accept-Ranges
.
Вот пример того, что вы должны быть в состоянии настроить в соответствии с вашими потребностями:
// Make HEAD request
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($curl);
preg_match('/^Content-Length: (\d+)/m', $data, $matches);
$size = (int) $matches[1];
$lower = $size - 1024 * 1024;
// Get last MB of data
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Range: bytes=$lower-$size"));
$data = curl_exec($curl);
0
Я знаю, что это старый вопрос, но вы можете сделать это, указав только верхний диапазон:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Get the last 100 bytes and echo the results
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: bytes=-100"));
echo htmlentities(curl_exec($ch)) . "<br /><br />";
// Get the last 200 bytes and echo the results
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: bytes=-200"));
echo htmlentities(curl_exec($ch));
Это возвращает:
100 bytes: <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>
200 bytes: ou may use this domain in examples without prior coordination or asking for permission.</p> <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>
От RFC 2616:
По своему выбору последнего байта клиент может ограничить количество полученных байтов, не зная размера объекта.
Смежные вопросы
- 1. cURL Получение CSV-файла
- 2. PHP Загрузка огромного файла видео (500 МБ) с cURL
- 3. SED, Получение последнего имени файла
- 4. Получение файла Дата последнего изменения
- 5. Получение последнего файла, измененного с Azure Blob
- 6. Получение только идентификатор последнего твита с помощью CURL
- 7. C Получение файла с использованием CURL
- 8. FTP получение последнего изменения файла по дате
- 9. Получение двоичного файла, отправленного через CURL
- 10. Получение файла с помощью hash (#) в пути curl
- 11. Получение подписчика Feedburner с CURL
- 12. получение данных с curl failed
- 13. Загрузка Powerpoint останавливается при ~ 9 МБ с помощью cURL -F
- 14. Получение последнего токена strtok
- 15. Получение самого последнего бита
- 16. Получение последнего созданного элемента
- 17. Анализировать: получение последнего объекта
- 18. Разделение файла на куски 10 МБ
- 19. Получение последнего сегмента URL
- 20. Получение последнего элемента
- 21. Получение последнего слова NSString
- 22. Получение последнего источника
- 23. Получение последнего элемента коллекции
- 24. Получение последнего типа функции
- 25. Получение последнего целого из строки
- 26. Удаление файла с последнего фиксации
- 27. Получение содержимого файлов с помощью CURL PHP?
- 28. получение информации из curl
- 29. PHP/CURL/ASP.NET/C# - Отправить файлы размером более 9 Мб
- 30. Получение атрибутов последнего измененного файла в каталоге, написанном в файле
Прочтите весь файл и возьмите последний 1MB. –
Да, но идея состоит в том, чтобы не читать весь файл. – pvledoux
@RobertHarvey: Это кажется немного расточительным, в зависимости от того, насколько велик файл. Возможно, добавив в запрос заголовка [range header] (http://tools.ietf.org/html/rfc2616#section-14.35), вы можете получить последние 1 МБ данных. –