Commit Graph

641 Commits

Author SHA1 Message Date
Zach Borboa fcc64db030 Fix run.sh to forward CLI args to phpunit and error on unhandled phpunit versions 2026-04-06 23:12:35 -04:00
Zach Borboa 8840b86b92 Bump supported version for psalm checks (#1059) 2026-03-19 05:42:25 -07:00
PHP Curl Class helper 2633be69f9 Update pre-commit dependencies (#1054)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Zach Borboa <zachborboa@gmail.com>
2026-03-12 20:11:33 +00:00
PHP Curl Class helper f003fb5e36 Update pre-commit dependencies (#1053)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-09 18:38:45 +00:00
PHP Curl Class helper bf61251c49 Update pre-commit dependencies (#1050)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-02 18:34:37 +00:00
Zach Borboa 06dc90ebf7 Fix typo 2026-03-01 22:34:09 -05:00
Zach Borboa 42c052f375 Fix flaky test using larger response size and slower download speed 2026-03-01 22:04:11 -05:00
PHP Curl Class helper 1247a614e1 Update pre-commit dependencies (#1048)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-19 18:40:15 +00:00
PHP Curl Class helper 5a4323eb71 Update pre-commit dependencies (#1046)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-10 18:44:17 +00:00
PHP Curl Class helper 6300a2e917 Update pre-commit dependencies (#1039)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-19 16:27:41 -05:00
github-actions[bot] 616facf849 Update pre-commit dependencies 2025-12-08 18:06:39 +00:00
Zach Borboa f01d24f68a Use WeakMap for active handle tracking (#1020)
* Use WeakMap for active handle tracking

- Replaces array-based tracking with PHP 8.0 \WeakMap
- Replaces an O(N) lookup with an O(1) lookup in the MultiCurl execution loop

* Fix tests
2025-11-21 21:36:54 -05:00
Zach Borboa c46ef2a858 Add PHP 8.5 (#1018)
* Add PHP 8.5 to continuous integration tests

* Use variable

* Add temporary skip

* Allow PHP CS Fixer to run on unsupported PHP versions
2025-11-21 09:13:38 -05:00
Zach Borboa 4b36f455dd Simplify MultiCurl execution loop (#1017)
* Clean up

* Simplify MultiCurl execution loop

- Removes legacy workarounds
- Deprecates MultiCurl::setRequestTimeAccuracy()
- Removes use of CURLM_CALL_MULTI_PERFORM ("As of cURL 7.20.0, this constant is not used")
2025-11-20 23:39:03 -05:00
Zach Borboa f058672e6f Improve MultiCurl::waitUntilRequestQuotaAvailable (#1016)
* Include keyword

* Use numeric literal separators

* Improve waitUntilRequestQuotaAvailable using new TimeUtil
2025-11-16 14:58:13 -05:00
Zach Borboa 4bf7292438 Fix rate limit (#1015)
* Rate limit fix

If $elapsed_seconds > $this->intervalSeconds the first time hasRequestQuota() is called, rateLimitReached is never set to true and the limit is not enforced
This can happen if the rate limit is set in a callback function some time after starting

I completely removed $rateLimitReached since its only use was in the removed condition check

Alternatively, it should be possible to reinitialize currentStartTime when setRateLimit is called, but I still don't really see the usefulness of resetting the timer only when the limit was reached in the previous interval

* Rename variable

* Clean up

---------

Co-authored-by: Riccardo Nava <116394015+ricnava00@users.noreply.github.com>
2025-11-15 17:08:55 -05:00
github-actions[bot] 6a9751946b Update pre-commit dependencies 2025-11-12 18:06:25 +00:00
github-actions[bot] d749d0fe34 Update pre-commit dependencies 2025-11-10 18:06:18 +00:00
Zach Borboa 7e724dc9b8 Remove calls to deprecated functions (#1005)
* Fix phpcs warning

FILE: ./src/Curl/Curl.php
-----------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
-----------------------------------------------------------------------------------------------------------------
 239 | WARNING | Function curl_close() is deprecated since PHP 8.5
     |         | (PHPCompatibility.FunctionUse.RemovedFunctions.curl_closeDeprecated)
-----------------------------------------------------------------------------------------------------------------

* Fix phpcs warning

FILE: ./tests/Helper.php
-----------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
-----------------------------------------------------------------------------------------------------------------
 126 | WARNING | Function finfo_close() is deprecated since PHP 8.5
     |         | (PHPCompatibility.FunctionUse.RemovedFunctions.finfo_closeDeprecated)
-----------------------------------------------------------------------------------------------------------------

* Fix psalm error

ERROR: UnusedBaselineEntry - ../src/Curl/Curl.php:0:0 - Baseline for
issue "PossiblyInvalidArgument" has 1 extra entry. (see
https://psalm.dev/316)
2025-11-01 23:48:41 -04:00
github-actions[bot] 31e2c8c824 Update pre-commit dependencies 2025-10-13 18:05:26 +00:00
github-actions[bot] d88294bdf2 Update pre-commit dependencies 2025-10-02 18:05:22 +00:00
github-actions[bot] c4c8faf01d Update pre-commit dependencies 2025-10-01 18:05:23 +00:00
github-actions[bot] e4bdfc0647 Update pre-commit dependencies 2025-09-22 18:05:24 +00:00
Zach Borboa a79e21b0d1 Fix PHP_CodeSniffer coding standard errors (#993)
* Fix PHP_CodeSniffer errors

Error message:
Header blocks must be separated by a single blank line (PSR12.Files.FileHeader.SpacingAfterTagBlock)

* Fix PHP_CodeSniffer errors

Error message:
Opening brace should be on a new line (Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine)

* Fix PHP_CodeSniffer warnings

Error message:
A file should declare new symbols (classes, functions, constants, etc.)
and cause no other side effects, or it should execute logic with side
effects, but should not do both. The first symbol is defined on line 6
and the first side effect is on line 14.
(PSR1.Files.SideEffects.FoundWithSymbols)
2025-09-15 21:24:22 -04:00
github-actions[bot] c19336eaa9 Update pre-commit dependencies 2025-07-31 18:05:57 +00:00
Zach Borboa a95eef5fa3 Remove PHP CS Fixer workaround (#963)
* Remove PHP CS Fixer workaround

* Clean up
2025-07-07 01:49:43 -04:00
github-actions[bot] 8f40a7d796 Update pre-commit dependencies 2025-06-23 18:05:44 +00:00
github-actions[bot] eb3180dbce Update pre-commit dependencies 2025-03-31 18:05:18 +00:00
Zach Borboa 202e857e85 Drop support for PHP 7.4 (#937) 2025-03-24 19:45:12 -04:00
Zach Borboa 45a7b1b671 Add methods like Curl::setGet() for each HTTP request method (#936)
* Adding methods like Curl::setGet() for each HTTP request method

Adding these methods to separate the request initialization from the
execution.

Methods added:
Curl::setDelete()
Curl::setGet()
Curl::setHead()
Curl::setOptions()
Curl::setPatch()
Curl::setPost()
Curl::setPut()
Curl::setSearch()

* Fix loading local test servers

Error message:
    +++ declare -A pids
    run_phpunit.sh: line 77: declare: -A: invalid option
    declare: usage: declare [-afFirtx] [-p] [name[=value] ...]

Error message:
    +++ server_count=7
    +++ pids=()
    run_phpunit.sh: line 85: "7" - 1: syntax error: operand expected (error token is ""7" - 1")

* Clean up
2025-03-23 05:00:39 -04:00
Zach Borboa 41cc699798 Display summary of warnings (#932) 2025-03-08 13:44:18 -05:00
Zach Borboa 8d83782c06 Use PHPStan bleeding edge (#931) 2025-03-08 10:45:51 -05:00
Zach Borboa a64fad2a9d Fix psalm install error on future php releases (#930)
* Skip running psalm on future PHP releases

* Clean up indentation
2025-03-08 09:18:08 -05:00
Zach Borboa 58962a054e Fix PHPStan static analysis errors (#929)
* Increase PHPStan memory limit on local development

* Add emjois to test warnings and test errors

* Fix PHPStan static analysis errors

Error messages:
 ------ ------------------------------------------------------------------------------------------------------
  Line   src/Curl/Curl.php
 ------ ------------------------------------------------------------------------------------------------------
  123    Cannot unset property Curl\Curl::$curlErrorCodeConstant because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  124    Cannot unset property Curl\Curl::$curlErrorCodeConstants because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  125    Cannot unset property Curl\Curl::$curlOptionCodeConstants because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  126    Cannot unset property Curl\Curl::$effectiveUrl because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  127    Cannot unset property Curl\Curl::$rfc2616 because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  128    Cannot unset property Curl\Curl::$rfc6265 because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  129    Cannot unset property Curl\Curl::$totalTime because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  564    Cannot unset property Curl\Curl::$curlErrorCodeConstant because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  565    Cannot unset property Curl\Curl::$effectiveUrl because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
  566    Cannot unset property Curl\Curl::$totalTime because it might have hooks in a subclass.
         🪪  unset.possiblyHookedProperty
 ------ ------------------------------------------------------------------------------------------------------
2025-03-08 08:34:45 -05:00
github-actions[bot] b96527cfc6 Update pre-commit dependencies 2025-02-27 18:05:04 +00:00
Zach Borboa 2cc50bd15e Actually increase psalm strictness (#926) 2025-02-19 22:13:10 -05:00
Zach Borboa 4cf4635e25 Increase psalm strictness (#925)
* Fix PossiblyUndefinedArrayOffset

ERROR: PossiblyUndefinedArrayOffset - ../src/Curl/Curl.php:1890:28 -
Possibly undefined array key (see https://psalm.dev/167)
                list($key, $value) = explode(':', $raw_headers[$i], 2);

* Fix PossiblyUndefinedArrayOffset

ERROR: PossiblyUndefinedArrayOffset - ../src/Curl/Curl.php:1034:28 -
Possibly undefined array key (see https://psalm.dev/167)
                list($key, $value) = explode(':', $header, 2);

* Fix PossiblyUndefinedArrayOffset

ERROR: PossiblyUndefinedArrayOffset - ../src/Curl/MultiCurl.php:465:28 -
Possibly undefined array key (see https://psalm.dev/167)
                list($key, $value) = explode(':', $header, 2);

* Fix PossiblyInvalidOperand

ERROR: PossiblyInvalidOperand - ../src/Curl/Curl.php:1407:69 - Cannot
concatenate with a int<0, max>|string (see https://psalm.dev/163)
                    echo 'Response content length (calculated): ' . $response_calculated_length . "\n";

* Fix PossiblyInvalidArgument

ERROR: PossiblyInvalidArgument - ../src/Curl/BaseCurl.php:408:34 -
Argument 2 of define expects array<array-key, mixed>|null|scalar, but
possibly different type false|resource provided (see
https://psalm.dev/092)
                define('STDERR', fopen('php://stderr', 'wb'));

* Fix ArgumentTypeCoercion

ERROR: ArgumentTypeCoercion - ../src/Curl/MultiCurl.php:956:16 -
Argument 1 of usleep expects int<0, max>, but parent type int provided
(see https://psalm.dev/193)
        usleep((int) $sleep_seconds * 1000000);

* Fix PossiblyFalseArgument

ERROR: PossiblyFalseArgument - ../src/Curl/MultiCurl.php:131:50 -
Argument 2 of file_put_contents cannot be false, possibly
array<array-key, string>|resource|string value expected (see
https://psalm.dev/104)
                    file_put_contents($filename, stream_get_contents($fh));

* Fix PossiblyFalseArgument

ERROR: PossiblyFalseArgument - ../src/Curl/Curl.php:437:49 - Argument 2
of stream_copy_to_stream cannot be false, possibly resource value
expected (see https://psalm.dev/104)
                stream_copy_to_stream($tmpfile, $fh);

ERROR: PossiblyFalseArgument - ../src/Curl/Curl.php:438:24 - Argument 1
of fclose cannot be false, possibly resource value expected (see
https://psalm.dev/104)
                fclose($fh);

* Fix PossiblyFalseArgument

ERROR: PossiblyFalseArgument - ../src/Curl/Curl.php:463:49 - Argument 2
of stream_copy_to_stream cannot be false, possibly resource value
expected (see https://psalm.dev/104)
            stream_copy_to_stream($file_handle, $main_file_handle);

ERROR: PossiblyFalseArgument - ../src/Curl/Curl.php:468:16 - Argument 1
of fclose cannot be false, possibly resource value expected (see
https://psalm.dev/104)
        fclose($main_file_handle);

* Fix PossiblyFalseArgument

ERROR: PossiblyFalseArgument - ../src/Curl/Curl.php:1891:36 - Argument 1
of count cannot be false, possibly Countable|array<array-key, mixed>
value expected (see https://psalm.dev/104)
        $raw_headers_count = count($raw_headers);

ERROR: PossiblyInvalidArrayAccess - ../src/Curl/Curl.php:1893:24 -
Cannot access array value on non-array variable $raw_headers of type
false (see https://psalm.dev/109)
            if (strpos($raw_headers[$i], ':') !== false) {

* Fix PossiblyInvalidArgument

ERROR: PossiblyInvalidArgument - ../src/Curl/Curl.php:1868:30 - Argument
2 of define expects array<array-key, mixed>|null|scalar, but possibly
different type false|resource provided (see https://psalm.dev/092)
            define('STDOUT', fopen('php://stdout', 'w'));

* Update psalm baseline
2025-02-19 21:40:56 -05:00
Zach Borboa 056de7d13d Use default for Psalm ensureOverrideAttribute (#923)
* Use default for Psalm ensureOverrideAttribute

* Fix missing Override attributes

Error: ../src/Curl/CaseInsensitiveArray.php:66:5:
MissingOverrideAttribute: Method Curl\CaseInsensitiveArray::offsetset
should have the "Override" attribute (see https://psalm.dev/358)
2025-02-18 21:49:22 -05:00
Zach Borboa d05e75aa14 Check for composer installation failure (#924) 2025-02-17 20:34:41 -05:00
Zach Borboa 86eb0d1059 Merge branch 'master' into create-pull-request/patch 2025-02-17 18:53:56 -05:00
Zach Borboa fd902b4b7c Fix CI (PHPUnit) (#918)
* Add shims for PHPUnit

* Fix PHPUnit error: undefined method returnValue()

1) CurlTest\PHPCurlClassTest::testMock
Error: Call to undefined method CurlTest\PHPCurlClassTest::returnValue()

* Fix PHPUnit risky test by restoring error handler before exception thrown

There was 1 risky test:

1) CurlTest\PHPCurlClassTest::testRequiredOptionCurlOptReturnTransferEmitsWarningPHPUnit10Plus
Test code or tested code did not remove its own error handlers

* Fix psalm errors

* Add attributes for version constraint

* Temporarily pin psalm to fix ci
2025-02-17 18:24:42 -05:00
github-actions[bot] f9494a3e62 Update pre-commit dependencies 2025-02-17 18:04:47 +00:00
github-actions[bot] 736c692faa Update pre-commit dependencies 2025-01-29 18:04:54 +00:00
github-actions[bot] 2e56602b04 Update pre-commit dependencies 2025-01-28 18:04:48 +00:00
Zach Borboa 8259795c46 Fix CI tests (psalm) (#913)
* Display psalm version being run

* Update exclusions

* Use separate configuration for PHP 7.4

* Remove temporary workaround
2025-01-26 19:22:36 -05:00
Zach Borboa 8cbaf60cf0 Move pre-commit configuration out of root directory (#911) 2025-01-12 15:59:05 -05:00
Zach Borboa 29cca2e48b Move some configs out of the root directory (#910)
* Move flake8 configuration out of root directory

* Move PHPStan configuration out of root directory
2025-01-12 12:39:31 -05:00
Zach Borboa bd793d1287 Increase Psalm strictness (#909)
* Increase Psalm strictness

* Fix static analysis errors

ERROR: RedundantCast - ../src/Curl/CaseInsensitiveArray.php:91:16 - Redundant cast to bool (see https://psalm.dev/262)
        return (bool) array_key_exists(strtolower($offset), $this->data);

ERROR: RedundantCast - ../src/Curl/CaseInsensitiveArray.php:138:16 - Redundant cast to int<0, max> (see https://psalm.dev/262)
        return (int) count($this->data);

ERROR: RedundantCast - ../src/Curl/CaseInsensitiveArray.php:187:16 - Redundant cast to bool (see https://psalm.dev/262)
        return (bool) (key($this->data) !== null);

ERROR: ForbiddenCode - ../src/Curl/Curl.php:1765:13 - Unsafe var_dump (see https://psalm.dev/002)
            var_dump($value);

ERROR: ForbiddenCode - ../src/Curl/Curl.php:1770:13 - Unsafe var_dump (see https://psalm.dev/002)
            var_dump($value);

ERROR: InvalidOperand - ../src/Curl/Curl.php:1816:35 - Cannot concatenate with a value-of<TArray> (see https://psalm.dev/058)
                return $k . '=' . $v;
2025-01-11 23:11:26 -05:00
Zach Borboa 634ee48552 Increase PHPStan strictness (#908)
* Enable color

* Increase PHPStan strictness

* Fix static analysis error

------ --------------------------------------------------
Line   src/Curl/MultiCurl.php
------ --------------------------------------------------
593    Variable $interval_seconds might not be defined.
        🪪  variable.undefined
------ --------------------------------------------------

* Increase PHPStan strictness

* Fix static analysis errors

------ -----------------------------------------------------------------
Line   scripts/bump_major_version.php
------ -----------------------------------------------------------------
8      Binary operation "+=" between string and 1 results in an error.
        🪪  assignOp.invalid
------ -----------------------------------------------------------------

------ -----------------------------------------------------------------
Line   scripts/bump_minor_version.php
------ -----------------------------------------------------------------
8      Binary operation "+=" between string and 1 results in an error.
        🪪  assignOp.invalid
------ -----------------------------------------------------------------

------ -----------------------------------------------------------------
Line   scripts/bump_patch_version.php
------ -----------------------------------------------------------------
8      Binary operation "+=" between string and 1 results in an error.
        🪪  assignOp.invalid
------ -----------------------------------------------------------------

* Fix static analysis errors

------ --------------------------------------------------------------------------------------------------------------------
Line   src/Curl/CaseInsensitiveArray.php
------ --------------------------------------------------------------------------------------------------------------------
132    PHPDoc tag @param has invalid value (void): Unexpected token "\n     * ", expected variable at offset 42 on line 4
        🪪  phpDoc.parseError
145    PHPDoc tag @param has invalid value (void): Unexpected token "\n     * ", expected variable at offset 44 on line 4
        🪪  phpDoc.parseError
158    PHPDoc tag @param has invalid value (void): Unexpected token "\n     * ", expected variable at offset 41 on line 4
        🪪  phpDoc.parseError
171    PHPDoc tag @param has invalid value (void): Unexpected token "\n     * ", expected variable at offset 40 on line 4
        🪪  phpDoc.parseError
197    PHPDoc tag @param has invalid value (void): Unexpected token "\n     * ", expected variable at offset 43 on line 4
        🪪  phpDoc.parseError
------ --------------------------------------------------------------------------------------------------------------------

* Fix static analysis errors

------ -----------------------------------------------------------------------------------
Line   src/Curl/MultiCurl.php
------ -----------------------------------------------------------------------------------
937    Comparison operation "<" between float and (array|float|int) results in an error.
        🪪  smaller.invalid
941    Comparison operation "<" between float and (array|float|int) results in an error.
        🪪  smaller.invalid
------ -----------------------------------------------------------------------------------

* Increase PHPStan strictness

* Fix static analysis errors

------ -------------------------------------------
Line   src/Curl/Decoder.php
------ -------------------------------------------
22     Offset '0' does not exist on list<mixed>.
        🪪  offsetAccess.notFound
41     Offset '0' does not exist on list<mixed>.
        🪪  offsetAccess.notFound
------ -------------------------------------------
2025-01-11 21:51:30 -05:00
Zach Borboa 87fc9b3796 Use separate scripts to ci tests (#907)
* Run ci static analysis checks using scripts

* Clean up

* Move phpunit run to dedicated script

* Use run.sh and remove ci.sh

* Rename test scripts to be prefixed with "run_"

* Move static analysis runs to test script

* Clean up
2025-01-10 21:44:05 -05:00