public static function parseFrame(string &$buffer): Record
    {
        $bufferLength = strlen($buffer);
        if ($bufferLength < FCGI::HEADER_LEN) {
            throw new \RuntimeException("Not enough data in the buffer to parse");
        }
        $recordHeader = unpack(FCGI::HEADER_FORMAT, $buffer);
        $recordType   = $recordHeader['type'];
        if (!isset(self::$classMapping[$recordType])) {
            throw new \DomainException("Invalid FCGI record type {$recordType} received");
        }

        /** @var Record $className */
        $className = self::$classMapping[$recordType];
        $record    = $className::unpack($buffer);


        $offset = FCGI::HEADER_LEN + $record->getContentLength() + $record->getPaddingLength();
        $buffer = substr($buffer, $offset);

        return $record;
    }
public static function parseFrame(string &$buffer): Record
    {
        $bufferLength = strlen($buffer);
        if ($bufferLength < FCGI::HEADER_LEN) {
            throw new \RuntimeException("Not enough data in the buffer to parse");
        }
        $recordHeader = unpack(FCGI::HEADER_FORMAT, $buffer);
        $recordType   = $recordHeader['type'];
        if (!isset(self::$classMapping[$recordType])) {
            throw new \DomainException("Invalid FCGI record type {$recordType} received");
        }

        /** @var Record $className */
        $className = self::$classMapping[$recordType];
        $record    = $className::unpack($buffer);


        $offset = FCGI::HEADER_LEN + $record->getContentLength() + $record->getPaddingLength();
        $buffer = substr($buffer, $offset);

        return $record;
    }
public static function parseFrame ( string & $ buffer ) : Record { $ bufferLength = strlen ( $ buffer ) ; if ( $ bufferLength < FCGI :: HEADER_LEN ) { throw new \ RuntimeException ( "Not enough data in the buffer to parse" ) ; } $ recordHeader = unpack ( FCGI :: HEADER_FORMAT , $ buffer ) ; $ recordType = $ recordHeader [ 'type' ] ; if ( ! isset ( self :: $ classMapping [ $ recordType ] ) ) { throw new \ DomainException ( "Invalid FCGI record type {$recordType} received" ) ; } /** @var Record $className */ $ className = self :: $ classMapping [ $ recordType ] ; $ record = $ className :: unpack ( $ buffer ) ; $ offset = FCGI :: HEADER_LEN + $ record -> getContentLength ( ) + $ record -> getPaddingLength ( ) ; $ buffer = substr ( $ buffer , $ offset ) ; return $ record ; }
Parses a frame from the binary buffer

@param string $buffer Binary buffer

@return Record One of the corresponding FCGI record
Parses a frame from the binary buffer