Я использую CURL для загрузки 4 файлов с URL-адреса, для которых я должен аутентифицировать себя.и я аутентифицируюсь только с помощью CURL.Но проблема в том, что когда я загружаю данные, он загружает только 1 КБ каждого файла.Я пробовал различные методы, приведенные на SO.Но никто из них не работает для меня.Мой код CURL-PHP:
<?php
require ('dbconfig/dbconfig.php'); //database connection.
ini_set('display_errors', 1);
error_reporting(E_ALL);
$username = "user";
$password = "password";
$url = "http://domain-name/contents/";
global $ch;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
$output = curl_exec($ch);
$r = time()-(24*60*60);
$dateit = date("Ymd", $r);
$file1 = "aaa".$dateit.".tbz";
$file2 = "aaa".$dateit.".tbz.md5";
$file3 = "bbb".$dateit.".tbz";
$file4 = "bbb".$dateit.".tbz.md5";
$arr = array($file1, $file2, $file3, $file4);
for($i = 0; $i <= 3; $i++) {
$url = "http://domain-name/content/current/".$arr[$i];
$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();
$fp = fopen("adminArea/folder/".$arr[$i], 'w+');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec ($ch);
}
fclose($fp);
curl_close($ch);
?>
Сначала я аутентифицирую себя, затем в цикле for для всех четырех я использую curl для загрузки данных.Я тоже получил этот код curl от SO.Перепробовал много способов сделать то же самое.
Любая помощь или идея будут высоко оценены.
ОБНОВЛЕНИЕ
код работал для меня.Я добавил curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);оба раза, во-первых, он аутентифицирует и возвращает ответ, а затем загружает файл для меня с другого URL.
// Set cURL options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
// Do it
curl_exec ($ch);
curl_setopt($ch, CURLOPT_URL, $urlbase.$file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$fp = fopen("adminArea/folder/$file", 'w+');
curl_setopt($ch, CURLOPT_FILE, $fp);
// Do it
curl_exec ($ch);
// Close pointers
fclose($fp);
curl_close($ch);