import socket,struct
def enc(p):
    r=b''
    for k,v in p.items():
        for b in (k.encode(),v.encode()):
            if len(b)<128: r+=struct.pack('B',len(b))
            else: r+=struct.pack('!I',len(b)|0x80000000)
        r+=k.encode()+v.encode()
    return r
def run(sf,pv=None,body=b'',method='GET'):
    p={'GATEWAY_INTERFACE':'CGI/1.1','REQUEST_METHOD':method,'SCRIPT_FILENAME':sf,'SCRIPT_NAME':'/x.php','REQUEST_URI':'/x.php','QUERY_STRING':'','SERVER_PROTOCOL':'HTTP/1.1','REMOTE_ADDR':'127.0.0.1','SERVER_NAME':'localhost','SERVER_PORT':'80','SERVER_ADDR':'127.0.0.1','REDIRECT_STATUS':'200','DOCUMENT_ROOT':'/','HTTP_HOST':'localhost'}
    if pv: p['PHP_VALUE']=pv
    if body: p.update({'CONTENT_TYPE':'application/x-www-form-urlencoded','CONTENT_LENGTH':str(len(body))})
    out=struct.pack('!BBHH',1,1,1,8)+struct.pack('!HB',1,0)
    pd=enc(p)
    out+=struct.pack('!BBHH',1,4,1,len(pd))+pd
    out+=struct.pack('!BBHH',1,4,1,0)
    if body: out+=struct.pack('!BBHH',1,5,1,len(body))+body
    out+=struct.pack('!BBHH',1,5,1,0)
    s=socket.create_connection(('127.0.0.1',9000),4)
    s.settimeout(8)
    s.sendall(out)
    data=b''
    while True:
        try: c=s.recv(65536)
        except socket.timeout: break
        if not c: break
        data+=c
    return data
d=run('/tmp/t1.php',pv='error_reporting=32767&display_errors=1')
print('total',len(d))
i=0
while i+8<=len(d):
    v,t,rid,l=d[i],d[i+1],struct.unpack('!H',d[i+2:i+4])[0],struct.unpack('!H',d[i+4:i+6])[0]
    pad=d[i+6]; chunk=d[i+8:i+8+l]
    print('type',t,'len',l,repr(chunk[:300]))
    i+=8+l+pad
