Estoy buscando un drop-in include script/class que disecciona multipart/form-data
y completa $_POST
(+ raw) y $_FILES
desde él. Por lo general, PHP lo hace por sí mismo. Pero debido a la manipulación automática no es suficiente para mí y hace inaccesible php://input
[1] probablemente voy a utilizar algo como esto para evitar que:userland multipart/form-data handler
RewriteRule .* - [E=CONTENT_TYPE:noparsing/for-you-php]
Does not work. Actual solution requires mod_headers andRequestHeader set
...
El procedimiento de extracción no podría ser tan complejo. Pero prefiero usar una solución bien probada. Y ante todo preferiría una implementación que utiliza fgets
para dividir, e imita el manejo $_FILES
de cerca y de manera eficiente. Encontrar el final de las cargas binarias me parece bastante complicado, en particular cuando tiene que quitarse \r\n
, pero puede encontrar clientes que solo envían \n
(no permitido, pero posible).
Estoy seguro de que algo así existe. Pero estoy teniendo dificultades para buscar en Google. ¿Alguien sabe una implementación? (PEAR :: mimeDecode puede ser pirateado para obtener un tipo de trabajo para datos de formulario, pero es un bloqueador de memoria.)
El caso de uso en resumen: necesita conservar los nombres de campo sin procesar (incluidos espacios en blanco y caracteres especiales), para el registro, pero no puede evitar las cargas de archivos siempre.
con fines decorativos, que es como una solicitud POST se ve:
POST/HTTP/1.1
Host: localhost:8000
Content-Length: 17717
Content-Type: multipart/form-data; boundary=----------3wCuBwquE9P7A4OEylndVx
Y después de una secuencia \r\n\r\n
la multipart/carga 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 @@@[email protected]@B`@@B;[email protected]@@-'[email protected]@@[email protected]\[email protected]@@[email protected][email protected][email protected]? ='[email protected]@@
@@@GtIMEGYAAU,#}[email protected]@@[email protected] with [email protected]@ @IDATxZl]w|
Esto probablemente se convierta en una pregunta de recompensa .. – mario
¿Se garantizará que cada parte MIME en la multiparte tenga una longitud de contenido? No recuerdo si la especificación lo requiere o no. Me imagino que lo haría. – Charles
Lo malo es que la especificación [RFC2388] (http://www.faqs.org/rfcs/rfc2388.html) no menciona 'Content-Length' en absoluto. Si bien supongo que la mayoría de los navegadores actuales lo hacen (y usan la codificación base64 al menos), en realidad estoy tratando de apoyar a los clientes más extravagantes. (Editar: No, ni siquiera Opera lo hace). – mario