PHP Guzzle在分叉过程中提供了具有空内容的空主体流,我如何将流包装器的uri更改为自定义的?

时间:2019-01-23 10:08:31

标签: php multiprocessing guzzle guzzle6

我正在处理一个多进程任务(5个子任务),该任务在代码的某个点向API发出请求,获取数据,规范化并持久化到数据库。

在这种环境下,我遇到了一些问题,因为有时我会收到一个http 200响应,但是主体流的内容为空,看起来像这样,因为该问题默认情况下使用的是uri“ php:// temp”这似乎在多处理任务上产生冲突。我在发生这种情况的情况下测试了请求,并且该请求在单个进程中起作用。下面是回应正文的转储:

class GuzzleHttp\Psr7\Stream#474 (7) {
  private $stream =>
  resource(687) of type (stream)
  private $size =>
  NULL
  private $seekable =>
  bool(true)
  private $readable =>
  bool(true)
  private $writable =>
  bool(true)
  private $uri =>
  string(10) "php://temp"
  private $customMetadata =>
  array(0) {
  }
}

有一种方法可以将Guzzle Stream Wrapper更改为自定义以避免冲突?

1 个答案:

答案 0 :(得分:0)

这是我的错误,一旦读取主体流(如果需要重用),就需要倒回该流以再次读取它。

我还进行了一些更改,例如在每个孩子上创建一个新实例,而不是使用父级的guzzle客户副本。