我正在寻找一个包含脚本/类的解决方案,该脚本/类解析了multipart/form-data
并填充了$_POST
(+ raw)和$_FILES
。通常PHP本身就是这样做的。但由于自动处理是不够的,我和让php://input
inaccesible [1]我可能会使用这样的东西,以防止:userland multipart/form-data handler
RewriteRule .* - [E=CONTENT_TYPE:noparsing/for-you-php]
Does not work. Actual solution requires mod_headers andRequestHeader set
...
的提取过程可能不会是那么复杂。但我宁愿使用经过良好测试的解决方案。最重要的是我更喜欢使用fgets
进行分割的实现,并且模仿$_FILES
密切和高效地处理。查找二进制有效负载的结束对我来说似乎相当棘手,特别是当您不得不取消\r\n
但可能遇到仅发送\n
(不允许,但可能)的客户端时。
我确定存在这样的事情。但是我很难用Google搜索它。有谁知道一个实现? (PEAR :: mimeDecode可以被破解以获得某种形式数据的工作,但它是一种内存管理器。)
简而言之:需要保留原始字段名称(包括空格和特殊字符),用于日志记录,但始终无法避免文件上传。
用于装饰目的,这是一个POST请求的外观:
POST/HTTP/1.1
Host: localhost:8000
Content-Length: 17717
Content-Type: multipart/form-data; boundary=----------3wCuBwquE9P7A4OEylndVx
而且多/有效载荷的\r\n\r\n
序列之后,如下所示:
------------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|
这可能会成为一个赏金问题。 – mario 2011-04-06 04:43:49
是否保证multipart中的每个MIME部分都有一个Content-Length?我不记得规范是否需要这个。我会想象会的。 – Charles 2011-04-07 01:43:40
糟糕的是规范[RFC2388](http://www.faqs.org/rfcs/rfc2388.html)完全没有提及“Content-Length”。虽然我会假设大多数当前的浏览器都这样做(至少使用base64编码),但我实际上正在尝试支持更古怪的客户端。 (编辑:不,即使Opera没有。 – mario 2011-04-07 01:52:38