@@ -555,6 +555,25 @@ class Client
555555 return $ id ;
556556 }
557557
558+ /**
559+ * Append response data.
560+ *
561+ * @param $resp Response
562+ * @param $type Either err or our
563+ *
564+ * @throws \Exception
565+ */
566+ private function fcgi_stream_append ($ resp , $ type ) {
567+ if (isset ($ this ->_requests [$ resp ['requestId ' ]][$ type . '_finished ' ])) {
568+ throw new \Exception ('FCGI_STD ' . strtoupper ($ type ) . ' stream already finished by empty record ' );
569+ }
570+ if ($ resp ['content ' ] === '' ) {
571+ $ this ->_requests [$ resp ['requestId ' ]][$ type . '_finished ' ] = true ;
572+ } else {
573+ $ this ->_requests [$ resp ['requestId ' ]][$ type . '_response ' ] .= $ resp ['content ' ];
574+ }
575+ }
576+
558577 /**
559578 * Blocking call that waits for response data of the specific request
560579 *
@@ -593,13 +612,12 @@ class Client
593612 if ($ resp ['type ' ] == self ::STDOUT || $ resp ['type ' ] == self ::STDERR ) {
594613 if ($ resp ['type ' ] == self ::STDERR ) {
595614 $ this ->_requests [$ resp ['requestId ' ]]['state ' ] = self ::REQ_STATE_ERR ;
596- $ this ->_requests [ $ resp[ ' requestId ' ]][ ' err_response ' ] .= $ resp [ ' content ' ] ;
615+ $ this ->fcgi_stream_append ( $ resp, ' err ' ) ;
597616 } else {
598- $ this ->_requests [ $ resp[ ' requestId ' ]][ ' out_response ' ] .= $ resp [ ' content ' ] ;
617+ $ this ->fcgi_stream_append ( $ resp, ' out ' ) ;
599618 }
600619 $ this ->_requests [$ resp ['requestId ' ]]['response ' ] .= $ resp ['content ' ];
601- }
602- if ($ resp ['type ' ] == self ::END_REQUEST ) {
620+ } elseif ($ resp ['type ' ] == self ::END_REQUEST ) {
603621 $ this ->_requests [$ resp ['requestId ' ]]['state ' ] = self ::REQ_STATE_OK ;
604622 if ($ resp ['requestId ' ] == $ requestId ) {
605623 break ;
0 commit comments