Возможно ли частично загрузить удаленный файл с помощью cURL? Скажем, фактический размер файла удаленного файла составляет 1000 КБ. Как загрузить только первые 500 КБ?Как частично загрузить удаленный файл с помощью cURL?
ответ
Вы также можете установить параметр заголовка диапазона с PHP-завиток расширения в.
Но как отмечалось ранее, если сервер не соблюдает этот заголовок, но отправляет весь файл, он все равно загрузит. Например. http://www.php.net игнорирует заголовок. Но вы можете (дополнительно) установить обратный вызов функции записи и прервать запрос при получении большего количества данных, например.
// php 5.3+ only
// use function writefn($ch, $chunk) { ... } for earlier versions
$writefn = function($ch, $chunk) {
static $data='';
static $limit = 500; // 500 bytes, it's only a test
$len = strlen($data) + strlen($chunk);
if ($len >= $limit) {
$data .= substr($chunk, 0, $limit-strlen($data));
echo strlen($data) , ' ', $data;
return -1;
}
$data .= $chunk;
return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.php.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$result = curl_exec($ch);
curl_close($ch);
+1 за хороший ответ. Это работает, потому что $ writefn() возвращает -1, когда предел достигнут. Когда функция обратного вызова возвращает что-либо, кроме количества байтов, переданных ему (в $ chunk), curl прерывает соединение. – GZipp
Отлично. Когда я делал то же самое в Perl, мне пришлось использовать аварийный сигнал, который запускался и проверял размер файла, из-за отсутствия лучшего метода. Очень хаки, но это сработало. –
Просто то, что мне нужно. Однако стоит упомянуть также CURLOPT_BUFFERSIZE, который определяет размер «куска». Поэтому, если ваш буфер очень большой, размер куска может легко содержать полную веб-страницу данных в любом случае (я думаю!) –
Получить первые 100 байт документа:
curl -r 0-99 http://www.get.this
от ручного
убедитесь, что современный завиток
Вы правильно, однако я обнаружил, что это не всегда надежен и зависит на сервере и не скручиваться. В случае с неверными делами завиток будет просто продолжать загрузку. –
Я не могу скачать, когда я использую другой диапазон, например 100-200. Я получаю «завитушку» (18) ». Можно ли это решить? – akashrajkn
Это может быть ваше решение (скачать первый 500KB в output.txt)
curl -r 0-511999 http://www.yourwebsite.com > output.txt
- в то время как
511999
является500^1024-1
Благодарим за хорошее решение VolkerK. Однако мне нужно было использовать этот код как функцию, поэтому вот что я придумал. Надеюсь, это полезно для других. Основное различие заключается в использовании ($ limit, & $ datadump), поэтому предел можно передать и использовать переменную $ datadump для ссылки, чтобы иметь возможность вернуть ее в результате. Я также добавил CURLOPT_USERAGENT, потому что некоторые веб-сайты не разрешают доступ без заголовка пользовательского агента.
Проверить http://php.net/manual/en/functions.anonymous.php
function curl_get_contents_partial($url, $limit) {
$writefn = function($ch, $chunk) use ($limit, &$datadump) {
static $data = '';
$len = strlen($data) + strlen($chunk);
if ($len >= $limit) {
$data .= substr($chunk, 0, $limit - strlen($data));
$datadump = $data;
return -1;
}
$data .= $chunk;
return strlen($chunk);
};
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
//curl_setopt($ch, CURLOPT_RANGE, '0-1000'); //not honored by many sites, maybe just remove it altogether.
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$data = curl_exec($ch);
curl_close($ch);
return $datadump;
}
использование:
$ страница = curl_get_contents_partial ('http://some.webpage.com', 1000); // читаем первые 1000 байт
echo $ page // или делаем что-либо с результатом.
- 1. PHP загрузить удаленный файл с помощью Curl
- 2. Как Curl удаленный файл на удаленный сервер
- 3. Загрузить удаленный файл с curl напрямую
- 4. Как загрузить удаленный файл с помощью jQuery?
- 5. Как загрузить удаленный файл с помощью file_get_contents()?
- 6. Загрузить файл с cURL
- 7. Невозможно CURL удаленный файл
- 8. загрузить файл с Curl
- 9. Невозможно загрузить файл с помощью curl
- 10. Laravel Загрузить Удаленный файл
- 11. Загрузить файл с помощью file_get_contents
- 12. Как загрузить файл с помощью кода golang
- 13. Загрузить удаленный файл (2 ГБ) с помощью PHP
- 14. Загрузить удаленный файл
- 15. Как загрузить файл с помощью curl с php
- 16. PHP загрузить файл с помощью с помощью CURL
- 17. Как загрузить файл в другой с помощью curl и php?
- 18. Как загрузить файл с помощью команды curl на веб-сервер?
- 19. Как загрузить файл активов github с помощью CURL
- 20. Как загрузить файл с помощью curl в php?
- 21. Как загрузить файл на удаленном сервере с помощью cURL?
- 22. Как загрузить файл для загрузки с помощью curl в php
- 23. Как загрузить файл в целевой каталог с помощью curl?
- 24. Попытка загрузить удаленный файл с PHP
- 25. Частично загружать файл с помощью javascript
- 26. Записать удаленный файл txt с помощью Nodejs
- 27. Как загрузить файл с помощью PHP cURL и НЕ удалять файл с удаленного сервера
- 28. shell sftp загрузить удаленный файл
- 29. Как быстро загрузить удаленный файл в PHP?
- 30. Как частично сгенерировать файл с помощью LibGit2Sharp?
Использование заголовков: https://unix.stackexchange.com/questions/121314/download-only-a-part-of-a-file –