我可能会偏离基础,但我一直在尝试整个下午在这个凹陷的PHP框架教程中运行curl post命令.我不明白的是PHP应该如何解释我的POST,它总是作为一个空数组出现.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
Run Code Online (Sandbox Code Playgroud)
(那里的斜线只是为了让我看起来不像白痴,但是我使用PHP 5.2在Windows上执行此操作,也在Linux服务器上执行此操作,与Linux卷曲相同的版本)
必须有一些我缺少的东西,因为它看起来非常简单,这篇文章不是正确的解释,如果是的话,一切都会很好.
这就是我得到的回报:
HTTP/1.1 409 Conflict
Date: Fri, 01 May 2009 22:03:00 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
{"screencast":{"id":null,"subject":null,"body":null,
"dataUrl":null,"dataMedium":null,"createdOn":null,"author":null}}
我正在寻找一个包含脚本/类的插件multipart/form-data,它可以解析并填充$_POST(+ raw)并$_FILES从中填充.通常PHP会自己做.但是因为自动处理对我来说是不够的并且使得php://input不可能[1]我可能会使用这样的东西来防止:
RewriteRule .* - [E=CONTENT_TYPE:noparsing/for-you-php]
不行.实际解决方案需要mod_headers和RequestHeader set......
提取过程可能不那么复杂.但我宁愿使用经过充分测试的解决方案.最重要的是,我更喜欢fgets用于拆分的实现,并且$_FILES密切有效地模仿处理.找到二进制有效负载的结束对我来说似乎相当棘手,特别是当您必须剥离\r\n但可能遇到仅发送\n(不允许但可能)的客户端时.
我确定这样的事情存在.但是我很难用谷歌搜索它.有谁知道实施?(PEAR :: mimeDecode可以被黑客攻击以获得表单数据的工作方式,但是内存耗尽.)
用例简而言之:需要保留原始字段名称(包括空格和特殊字符),以便进行日志记录,但始终无法避免文件上载.
出于装饰目的,这就是POST请求的外观:
POST / HTTP/1.1
Host: localhost:8000
Content-Length: 17717
Content-Type: multipart/form-data; boundary=----------3wCuBwquE9P7A4OEylndVx
Run Code Online (Sandbox Code Playgroud)
在一个\r\n\r\n序列之后,multipart/payload遵循如下:
------------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@@@AsRGB@.N\i@@@FbKGD@?@?@? ='S@@@
@@@GtIMEGYAAU,#}BRU@@@YtEXtComment@Created with GIMPWANW@@ @IDATxZl]w|
Run Code Online (Sandbox Code Playgroud) 重复注意:这不是IMO与此问题的重复,因为我首先查看了该问题并且没有找到问题的答案.如果您确实找到了,请告诉我确切的位置.
在PHP中,正如我们所知,超全局 $_POST[]是一个数组,它将包含解析mime类型的传入HTTP请求体的结果.
如果我们的客户端发送任何其他内容作为请求,我们需要使用返回的字符串来处理解析file_get_contents('php://input');.
现在这是我的问题; 让我们说我不知道我的请求包含什么类型的mimetype.我可以使用$_POST和php://input互换?或者更具体一点,读取会php://input干扰人口$_POST[],还是会$_POST[]以某种方式破坏或禁用php://input?