From a020585a7374daa1efcdf0d33e4dd838a9e54313 Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Tue, 14 Jan 2020 20:55:41 -0800 Subject: [PATCH 1/4] Fix #608: Implement Curl::setRange() and MultiCurl::setRange() --- src/Curl/Curl.php | 11 +++++++++++ src/Curl/MultiCurl.php | 11 +++++++++++ tests/PHPCurlClass/PHPCurlClassTest.php | 9 +++++++++ tests/PHPCurlClass/PHPMultiCurlClassTest.php | 10 ++++++++++ 4 files changed, 41 insertions(+) diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index 07eb77d..aca8ab7 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -1123,6 +1123,17 @@ class Curl $this->setOpt(CURLOPT_PROXY, null); } + /** + * Set Range + * + * @access public + * @param $range + */ + public function setRange($range) + { + $this->setOpt(CURLOPT_RANGE, $range); + } + /** * Set Referer * diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index 980dfa6..813370d 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -702,6 +702,17 @@ class MultiCurl } } + /** + * Set Range + * + * @access public + * @param $range + */ + public function setRange($range) + { + $this->setOpt(CURLOPT_RANGE, $range); + } + /** * Set Referer * diff --git a/tests/PHPCurlClass/PHPCurlClassTest.php b/tests/PHPCurlClass/PHPCurlClassTest.php index 2620d0a..d71111b 100644 --- a/tests/PHPCurlClass/PHPCurlClassTest.php +++ b/tests/PHPCurlClass/PHPCurlClassTest.php @@ -3889,4 +3889,13 @@ class CurlTest extends \PHPUnit\Framework\TestCase $curl->setFile(STDOUT); $this->assertEquals($file, $curl->getOpt(CURLOPT_FILE)); } + + public function testSetRange() + { + $range = '1000-'; + + $curl = new Curl(); + $curl->setRange($range); + $this->assertEquals($range, $curl->getOpt(CURLOPT_RANGE)); + } } diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index bf66767..98675d7 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -3400,4 +3400,14 @@ class MultiCurlTest extends \PHPUnit\Framework\TestCase $multi_curl->setFile(STDOUT); $this->assertEquals($file, $multi_curl->getOpt(CURLOPT_FILE)); } + + public function testSetRange() + { + $range = '1000-'; + + $multi_curl = new MultiCurl(); + $this->assertNull($multi_curl->getOpt(CURLOPT_RANGE)); + $multi_curl->setRange($range); + $this->assertEquals($range, $multi_curl->getOpt(CURLOPT_RANGE)); + } } From 82c0880ab5e109580cb2dc5cb3d865719efb3e3f Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Tue, 14 Jan 2020 20:56:42 -0800 Subject: [PATCH 2/4] Clean up --- tests/PHPCurlClass/PHPCurlClassTest.php | 2 +- tests/PHPCurlClass/PHPMultiCurlClassTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/PHPCurlClass/PHPCurlClassTest.php b/tests/PHPCurlClass/PHPCurlClassTest.php index d71111b..69aab8e 100644 --- a/tests/PHPCurlClass/PHPCurlClassTest.php +++ b/tests/PHPCurlClass/PHPCurlClassTest.php @@ -3886,7 +3886,7 @@ class CurlTest extends \PHPUnit\Framework\TestCase $file = STDOUT; $curl = new Curl(); - $curl->setFile(STDOUT); + $curl->setFile($file); $this->assertEquals($file, $curl->getOpt(CURLOPT_FILE)); } diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index 98675d7..1d59d36 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -3397,7 +3397,7 @@ class MultiCurlTest extends \PHPUnit\Framework\TestCase $multi_curl = new MultiCurl(); $this->assertNull($multi_curl->getOpt(CURLOPT_FILE)); - $multi_curl->setFile(STDOUT); + $multi_curl->setFile($file); $this->assertEquals($file, $multi_curl->getOpt(CURLOPT_FILE)); } From 15a6a4dd98a01761f8522948ae27dac6a939152d Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Tue, 14 Jan 2020 20:58:42 -0800 Subject: [PATCH 3/4] Use setRange() --- src/Curl/Curl.php | 2 +- src/Curl/MultiCurl.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index aca8ab7..a1bb042 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -309,7 +309,7 @@ class Curl if (is_file($download_filename) && $filesize = filesize($download_filename)) { $first_byte_position = $filesize; $range = $first_byte_position . '-'; - $this->setOpt(CURLOPT_RANGE, $range); + $this->setRange($range); $this->fileHandle = fopen($download_filename, 'ab'); } else { $this->fileHandle = fopen($download_filename, 'wb'); diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index 813370d..0df861b 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -102,7 +102,7 @@ class MultiCurl if (is_file($download_filename) && $filesize = filesize($download_filename)) { $first_byte_position = $filesize; $range = $first_byte_position . '-'; - $curl->setOpt(CURLOPT_RANGE, $range); + $curl->setRange($range); $curl->fileHandle = fopen($download_filename, 'ab'); // Move the downloaded temporary file to the destination save path. From cf9ab597804410c860eb6cc0099c42599017f58d Mon Sep 17 00:00:00 2001 From: Zach Borboa Date: Tue, 14 Jan 2020 21:00:58 -0800 Subject: [PATCH 4/4] Use setFile() --- src/Curl/Curl.php | 4 ++-- src/Curl/MultiCurl.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index a1bb042..044e8a8 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -326,7 +326,7 @@ class Curl }; } - $this->setOpt(CURLOPT_FILE, $this->fileHandle); + $this->setFile($this->fileHandle); $this->get($url); return ! $this->error; @@ -1608,7 +1608,7 @@ class Curl // Reset CURLOPT_FILE with STDOUT to avoid: "curl_exec(): CURLOPT_FILE // resource has gone away, resetting to default". - $this->setOpt(CURLOPT_FILE, STDOUT); + $this->setFile(STDOUT); // Reset CURLOPT_RETURNTRANSFER to tell cURL to return subsequent // responses as the return value of curl_exec(). Without this, diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index 0df861b..a9eca06 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -122,7 +122,7 @@ class MultiCurl } } - $curl->setOpt(CURLOPT_FILE, $curl->fileHandle); + $curl->setFile($curl->fileHandle); $curl->setOpt(CURLOPT_CUSTOMREQUEST, 'GET'); $curl->setOpt(CURLOPT_HTTPGET, true); return $curl;