userland multipart / form-data handler

Estoy buscando un script / clase de inclusión directa que diseccionemultipart/form-data y se llena$_POST (+ raw) y$_FILES de eso. Por lo general, PHP lo hace por sí mismo. Pero debido a que el manejo automático es insuficiente para mí y hace quephp://input inaccesible [1] Probablemente usaré algo como esto para evitar eso:

RewriteRule .* - [E=CONTENT_TYPE:noparsing/for-you-php]
No funciona. La solución real requiere mod_headers yRequestHeader set ...

El procedimiento de extracción podría no ser tan complejo. Pero prefiero usar una solución bien probada. Y, sobre todo, preferiría una implementación que usefgets para dividir e imita el$_FILES manejo cercano y eficiente. Encontrar el final de las cargas binarias me parece bastante complicado, en particular cuando tienes que desnudarte\r\n pero puede encontrar clientes que solo envían\n (no permitido, pero posible).

Estoy seguro de que existe algo como esto. Pero me cuesta mucho buscarlo en Google. ¿Alguien sabe una implementación? (PEAR :: mimeDecode se puede piratear para que funcione para los datos de formulario, pero es un problema de memoria).

n resumen, el caso de uso: es necesario preservar los nombres de campo sin formato (incluidos espacios en blanco y caracteres especiales), para el registro, pero no se pueden evitar las cargas de archivos siempre.

Para fines decorativos, así es como se ve una solicitud POST:

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

Y después de una\r\n\r\n secuencia la multiparte / carga útil sigue así:

------------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|

Respuestas a la pregunta(3)

Su respuesta a la pregunta