如果请求超过1450 B,请在PHP中正确读取POST请求参数?

时间:2010-07-20 12:57:35

标签: php http http-post

我在api.php脚本上收到POST请求。内容为红色,使用此代码:

$fp = fopen('php://stdin', 'r');
$all = "";
while($line = fgets($fp, 4096)) { 
    $all .= $line; 
}
echo $all;

看起来像这样:

------------V2ymHFg03ehbqgZCaKO6jy
Content-Disposition: form-data; name="intro"

O
------------V2ymHFg03ehbqgZCaKO6jy
Content-Disposition: form-data; name="title"

T
------------V2ymHFg03ehbqgZCaKO6jy
Content-Disposition: form-data; name="apiKey"

98d32fdsa
------------V2ymHFg03ehbqgZCaKO6jy
Content-Disposition: form-data; name="method"

/media/add
------------V2ymHFg03ehbqgZCaKO6jy
Content-Disposition: form-data; name="upload_field"; filename="original_filename.png"
Content-Type: image/png


------------V2ymHFg03ehbqgZCaKO6jy--

正如你所看到的,我得到了4个名为intro,title,apiKey和method的参数,以及一个名为original_filename.png的文件,大小为1460字节。

不幸的是,我的$ _POST数组是空的。当orginal_filename.png小于1450字节时,有什么奇怪$ _POST包含所有参数,而stdin是空的。

我希望能够像普通人类PHP一样阅读这些字段来自$ _POST。

如何从$ _POST正确读取此POST请求参数?

2 个答案:

答案 0 :(得分:1)

正如我刚刚在手册中看到的那样,enctype =“multipart / form-data”不提供原始发布数据,但您也可以尝试使用

$fp = fopen('php://stdin', 'rb');

请注意“ b ”标志。

另外,请确保php.ini中的 always_populate_post_data = On

答案 1 :(得分:1)

$_FILES变量中有什么内容吗?

提交的表单中是否有MAX_FILE_SIZE元素?

这里有什么价值?

echo 'post_max_size = ' . ini_get('post_max_size') . "\n";
echo 'upload_max_filesize = ' . ini_get('upload_max_filesize') . "\n";