From 04a39896446248aa626a57365531b7bf1076a2aa Mon Sep 17 00:00:00 2001 From: shap Date: Fri, 15 Aug 2025 14:22:51 +0300 Subject: [PATCH 1/8] fix: fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given --- CHANGELOG.md | 2 +- src/StreamTransport.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f41dd7e..af86ed7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Yii Framework 2 HTTP client extension Change Log 2.0.17 under development ------------------------ -- no changes in this release. +- Bug: Fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given (shaperman) 2.0.16 February 13, 2025 diff --git a/src/StreamTransport.php b/src/StreamTransport.php index 006d4ee..472e8dd 100644 --- a/src/StreamTransport.php +++ b/src/StreamTransport.php @@ -59,6 +59,10 @@ public function send($request) try { $context = stream_context_create($contextOptions); $stream = fopen($url, 'rb', false, $context); + if (false === $stream) { + $error = error_get_last(); + throw new Exception(sprintf('Error while fopen(%s): %s', $url, $error['message'] ?? 'Unknown error')); + } $responseContent = stream_get_contents($stream); // see https://php.net/manual/en/reserved.variables.httpresponseheader.php $responseHeaders = (array)$http_response_header; From 1ad6a6dac66029864f83cc300b24acc5c5dac0b6 Mon Sep 17 00:00:00 2001 From: shap Date: Fri, 15 Aug 2025 14:22:51 +0300 Subject: [PATCH 2/8] fix: fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given --- CHANGELOG.md | 2 +- src/StreamTransport.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f41dd7e..af86ed7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Yii Framework 2 HTTP client extension Change Log 2.0.17 under development ------------------------ -- no changes in this release. +- Bug: Fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given (shaperman) 2.0.16 February 13, 2025 diff --git a/src/StreamTransport.php b/src/StreamTransport.php index 006d4ee..472e8dd 100644 --- a/src/StreamTransport.php +++ b/src/StreamTransport.php @@ -59,6 +59,10 @@ public function send($request) try { $context = stream_context_create($contextOptions); $stream = fopen($url, 'rb', false, $context); + if (false === $stream) { + $error = error_get_last(); + throw new Exception(sprintf('Error while fopen(%s): %s', $url, $error['message'] ?? 'Unknown error')); + } $responseContent = stream_get_contents($stream); // see https://php.net/manual/en/reserved.variables.httpresponseheader.php $responseHeaders = (array)$http_response_header; From f0fe3e6ee6efc00351e58d281b28c64bb826dc66 Mon Sep 17 00:00:00 2001 From: shap Date: Fri, 15 Aug 2025 16:41:02 +0300 Subject: [PATCH 3/8] build: tests update --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fbb1946..91ec7d6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Install PHP uses: shivammathur/setup-php@v2 with: @@ -26,7 +26,7 @@ jobs: id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer dependencies - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} From 4635344ea0a2f5f79b952ae0d3038410190388b9 Mon Sep 17 00:00:00 2001 From: shap Date: Fri, 15 Aug 2025 17:01:53 +0300 Subject: [PATCH 4/8] fix: support for PHP 5 --- src/StreamTransport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StreamTransport.php b/src/StreamTransport.php index 472e8dd..ad1defb 100644 --- a/src/StreamTransport.php +++ b/src/StreamTransport.php @@ -61,7 +61,7 @@ public function send($request) $stream = fopen($url, 'rb', false, $context); if (false === $stream) { $error = error_get_last(); - throw new Exception(sprintf('Error while fopen(%s): %s', $url, $error['message'] ?? 'Unknown error')); + throw new Exception(sprintf('Error while fopen(%s): %s', $url, isset($error['message']) ? $error['message'] : 'Unknown error')); } $responseContent = stream_get_contents($stream); // see https://php.net/manual/en/reserved.variables.httpresponseheader.php From aa8cf58b48ffe386d2cc82f52d7a889c75bdc912 Mon Sep 17 00:00:00 2001 From: Evgeniy Sanatarchuk Date: Mon, 18 Aug 2025 10:03:38 +0300 Subject: [PATCH 5/8] Update CHANGELOG.md Co-authored-by: Alexander Makarov --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af86ed7..71b8683 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Yii Framework 2 HTTP client extension Change Log 2.0.17 under development ------------------------ -- Bug: Fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given (shaperman) +- Bug #250: Fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given (shaperman) 2.0.16 February 13, 2025 From e4a023dfebfa84b55543bea520513e75b6d23a97 Mon Sep 17 00:00:00 2001 From: Evgeniy Sanatarchuk Date: Mon, 18 Aug 2025 18:33:17 +0300 Subject: [PATCH 6/8] Update CHANGELOG.md Co-authored-by: Alexander Makarov --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71b8683..462eb0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Yii Framework 2 HTTP client extension Change Log 2.0.17 under development ------------------------ -- Bug #250: Fixed TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given (shaperman) +- Bug #250: Fixed `TypeError: stream_get_contents(): Argument #1 ($stream) must be of type resource, bool given` in case PHP error reporting is turned off (shaperman) 2.0.16 February 13, 2025 From d411a5e150c6d4f93ff8a28d43fe942328e3cc4a Mon Sep 17 00:00:00 2001 From: shap Date: Wed, 20 Aug 2025 09:49:25 +0300 Subject: [PATCH 7/8] fix: close the stream if execution fails --- src/StreamTransport.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/StreamTransport.php b/src/StreamTransport.php index ad1defb..6b41838 100644 --- a/src/StreamTransport.php +++ b/src/StreamTransport.php @@ -68,6 +68,9 @@ public function send($request) $responseHeaders = (array)$http_response_header; fclose($stream); } catch (\Exception $e) { + if (is_resource($stream)) { + fclose($stream); + } Yii::endProfile($token, __METHOD__); throw new Exception($e->getMessage(), $e->getCode(), $e); } From 0fa96e8000a590d4b99a9f5aae34bb7f895a29a7 Mon Sep 17 00:00:00 2001 From: shap Date: Wed, 20 Aug 2025 09:49:25 +0300 Subject: [PATCH 8/8] fix: close the stream if execution fails --- src/StreamTransport.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/StreamTransport.php b/src/StreamTransport.php index ad1defb..c02824a 100644 --- a/src/StreamTransport.php +++ b/src/StreamTransport.php @@ -68,6 +68,9 @@ public function send($request) $responseHeaders = (array)$http_response_header; fclose($stream); } catch (\Exception $e) { + if (isset($stream) && is_resource($stream)) { + fclose($stream); + } Yii::endProfile($token, __METHOD__); throw new Exception($e->getMessage(), $e->getCode(), $e); }