diff --git a/src/VCR/CodeTransform/AbstractCodeTransform.php b/src/VCR/CodeTransform/AbstractCodeTransform.php index 05b69dbe2..7e3e0f964 100644 --- a/src/VCR/CodeTransform/AbstractCodeTransform.php +++ b/src/VCR/CodeTransform/AbstractCodeTransform.php @@ -12,6 +12,9 @@ abstract class AbstractCodeTransform extends \php_user_filter { public const NAME = 'vcr_abstract_filter'; + /** @var string */ + private $data = ''; + /** * Attaches the current filter to a stream. */ @@ -19,7 +22,10 @@ public function register(): void { if (!\in_array(static::NAME, stream_get_filters(), true)) { $isRegistered = stream_filter_register(static::NAME, static::class); - Assertion::true($isRegistered, sprintf('Failed registering stream filter "%s" on stream "%s"', static::class, static::NAME)); + Assertion::true( + $isRegistered, + sprintf('Failed registering stream filter "%s" on stream "%s"', static::class, static::NAME) + ); } } @@ -37,12 +43,19 @@ public function register(): void */ public function filter($in, $out, &$consumed, $closing) { - while ($bucket = stream_bucket_make_writeable($in)) { - $bucket->data = $this->transformCode($bucket->data); - $consumed += $bucket->datalen; - stream_bucket_append($out, $bucket); + while ($buffer = stream_bucket_make_writeable($in)) { + $this->data .= $buffer->data; + $consumed += $buffer->datalen; + } + + if (!$closing) { + return \PSFS_FEED_ME; } + $bucket = stream_bucket_new($this->stream, $this->transformCode($this->data)); + $this->data = ''; + stream_bucket_append($out, $bucket); + return \PSFS_PASS_ON; }