userland manipulador multipart / dados de formulário

Estou procurando um script / classe de inclusão que dissecamultipart/form-data e preenche$_POST (+ bruto) e$_FILES a partir dele. Normalmente, o PHP faz isso sozinho. Mas porque o manuseio automático é insuficiente para mim e faz com quephp://input inacessível [1] Eu provavelmente usarei algo assim para impedir que:

RewriteRule .* - [E=CONTENT_TYPE:noparsing/for-you-php]
Não funciona. A solução real requer mod_headers eRequestHeader set ...

O procedimento de extração pode não ser tão complexo. Mas prefiro usar uma solução bem testada. Acima de tudo, eu preferiria uma implementação que usefgets para dividir e imita o$_FILES manejando de perto e com eficiência. Encontrar o fim de cargas binárias parece-me um pouco complicado, principalmente quando você precisa se despir\r\n, mas pode encontrar clientes que enviam apenas\n (não permitido, mas possível).

Tenho certeza de que algo assim existe. Mas estou tendo dificuldades para pesquisar no Google. Alguém conhece uma implementação? (PEAR :: mimeDecode pode ser hackeado para trabalhar como forma de dados de formulário, mas é um problema de memória.)

O caso de uso em resumo: é necessário preservar os nomes dos campos brutos (incluindo espaço em branco e caracteres especiais), para registro, mas não é possível evitar sempre o upload de arquivo

Para fins decorativos, é assim que uma solicitação POST se parece:

POST / HTTP/1.1
Host: localhost:8000
Content-Length: 17717
Content-Type: multipart/form-data; boundary=----------3wCuBwquE9P7A4OEylndVx

E depois de um\r\n\r\n sequência, a multipart / payload segue assim:

------------3wCuBwquE9P7A4OEylndVx
Content-Disposition: form-data; name="_charset_"

windows-1252
------------3wCuBwquE9P7A4OEylndVx
Content-Disposition: form-data; name=" text field \\ 1 \";inject=1"

text1 te twj sakfkl
------------3wCuBwquE9P7A4OEylndVx
Content-Disposition: form-data; name="file"; filename="dial.png"
Content-Type: image/png

IPNG Z @@@MIHDR@@B`@@B;HF@@@-'.e@@@[email protected]\i@@@FbKGD@?@?@? ='S@@@     
@@@GtIMEGYAAU,#}BRU@@@YtEXtComment@Created with GIMPWANW@@ @IDATxZl]w|

questionAnswers(3)

yourAnswerToTheQuestion