zendesk / zendesk_api_client_php

Official Zendesk API v2 client library for PHP
336 stars 259 forks source link

Call to undefined function GuzzleHttp\Psr7\stream_for() #470

Closed RobinBoersma closed 4 months ago

RobinBoersma commented 3 years ago

`Error: Call to undefined function GuzzleHttp\Psr7\stream_for()

7 zendesk/zendesk_api_client_php/src/Zendesk/API/Http.php(69): Zendesk\API\Http::send

6 zendesk/zendesk_api_client_php/src/Zendesk/API/HttpClient.php(494): Zendesk\API\HttpClient::post

5 zendesk/zendesk_api_client_php/src/Zendesk/API/Resources/Core/Tickets.php(164): Zendesk\API\Resources\Core\Tickets::create`

RobinBoersma commented 3 years ago

471

472

spencerrlongg commented 3 years ago

this is also fixed via #469 we'd love to get one of these solutions merged ASAP if at all possible.

Bitflinx commented 3 years ago

Quickfix: Goto: \vendor\zendesk\zendesk_api_client_php\src\Zendesk\API\HTTP.php Line 70 and replace

//Corrected cause of error $request = $request->withBody(\GuzzleHttp\Psr7\Utils::streamFor(json_encode($options['postFields'])));

//Original code //$request = $request->withBody(\GuzzleHttp\Psr7\stream_for(json_encode($options['postFields'])));

kevinirlen commented 3 years ago

I don't know if Zendesk is willing to merge this.. A quick & MacGyver solution, instead of modifying the core files. Create a directory in your project

GuzzleHttp/psr

And paste in the code below

<?php
# functions.php

namespace GuzzleHttp\Psr7;

/**
 *
 * @param string $resource
 * @param array  $options
 *
 * @return PumpStream|Stream|\Psr\Http\Message\StreamInterface
 */
function stream_for($resource = '', array $options = [])
{
    return Utils::streamFor($resource, $options);
}
XVII commented 3 years ago

Merge please @Zendesk 😇

BafS commented 3 years ago

@thekindofme, @gkatechis, @gmponos, @nogates sorry to ping you guys but would it be possible to merge one of the fixes (like #469)? The requirement is not correct and it's easy to mess-up.

The current workaround is to add a function like @kevinirlen proposes or to require explicitly and old version of guzzlehttp/psr7 (composer req "guzzlehttp/psr7:^1").

Thanks in advance

PierreGranger commented 3 years ago

471 and #472 would be a perfect response.

This problem is major because any update cause a fault as soon as guzzle is updated to a recent version.

Thanks for your help !

simonmaass commented 2 years ago

if you want backward compatibility with guzzle 6.x... then i think the cleanest solution for now would be to require "guzzlehttp/psr7": "^1.8.3", in the composer.json for this project... at least a clean composer install would not break anymore...

@thekindofme ping

Braunson commented 2 years ago

Huge problem, this just occurred on production for me. A workaround is to do what @simonmaass mentioned.

Huggyduggy commented 2 years ago

As it might be helpful to some - I didn't want to mess with my directory structure, thus I've saved @kevinirlen into a file within my usual workspace (called functions.php) and used composer to autoload this file:

composer.json:

"autoload": { "classmap": [ "database", "app/Libraries" ], "psr-4": { "myNamespace\\": "app/" }, "files": [ **"app/Libraries/Internal/Fixes/Psr7/functions.php"** ] },

paulrwest commented 2 years ago

Any news on a timeframe for a merge?

Thanks for posting the workarounds guys

Pierstoval commented 2 years ago

Do you folks need a cross-compatible version of the fix that would comply with multiple versions of Guzzle, maybe? At least 3 unmerged PRs:

A cross-compatible version should be easy, a simple if (function_exists(...)) should do the trick.

I would've created a PR, but since there's lots of them already, I didn't want to pollute the current state of the project.

However, I'm one of the several people whose production broke because of this, and I had to use a dirty quickfix for that which I don't like at all, so as others, I wish this could be fixed and released soon 😉

chrisminett commented 2 years ago

For those following this, it looks like it will have been resolved as #469 has been merged, and these changes are included in release v2.2.12

BafS commented 2 years ago

It seems that packagist is not updated automatically, the last ^v2 is still v2.2.11 (https://packagist.org/packages/zendesk/zendesk_api_client_php). You can use "dev-master" or the specific commit as a workaround.

InjustFr commented 2 years ago

dev-master actually doesn't work directly as it isn't updated on packagist as well. You'll have to add this repository in your composer.json before being able to pull for dev-master or v2.2.11

BafS commented 2 years ago

You are right

vanessametageek commented 2 years ago

It looks like it is on packagist now.

ERuban commented 2 years ago

I have guzzlehttp/psr7:2.1 dependency in my project (from auth0/auth0-php:^8). So in my case the last version I'm able to install is 2.2.11 that has this issue 😒

gjuric commented 2 years ago

Can you release a new version that allows guzzle psr7 v2 to be installed?

ecoologic commented 5 months ago

Hi,

thank you for your request, are you still interested in a solution for this issue?

ecoologic commented 4 months ago

Closing due to inactivity. Re-open if needed.