如何获得;php://input" 如果I';m使用内容类型多部分/表单数据

如何获得;php://input" 如果I';m使用内容类型多部分/表单数据,php,json,post,Php,Json,Post,还有别的选择吗 我用它来测试我正在开发的API 我用POST发送了一个JSON。 在代码中,$\u FILES可以,但是file\u获取内容(“php://input“”为空 如果我不发送任何文件,那么我可以使用file\u get\u contents(“php://input“” PHP版本:5.6.4最有可能访问超全局使用的任何POST/文件php://input 在任何情况下,如果发送JSON有效负载,则不能同时使用多部分formdata有效负载,因此$\u FILES应为空。如果您需要

还有别的选择吗

我用它来测试我正在开发的API

我用POST发送了一个JSON。 在代码中,
$\u FILES
可以,但是
file\u获取内容(“php://input“”
为空

如果我不发送任何文件,那么我可以使用
file\u get\u contents(“php://input“”


PHP版本:5.6.4

最有可能访问超全局使用的任何POST/文件
php://input

在任何情况下,如果发送JSON有效负载,则不能同时使用多部分formdata有效负载,因此
$\u FILES
应为空。如果您需要在同一页面上处理这两个问题(IMO不太好),请确保在访问
$\u文件
php://input

php://input
是一种只读流,允许您读取原始数据 来自请求主体。对于POST请求,最好是 使用
php://input
而不是
$HTTP\u RAW\u POST\u数据
依赖于特殊的php.ini指令。此外,对于以下情况:
$HTTP_RAW_POST_数据
默认情况下不填充,它可能是 与激活相比,内存占用更少
始终填充\u原始\u发布数据
php://input
不适用于 enctype=“多部分/表单数据”。

由于HTTP_原始_POST_数据是,我猜您有点不走运。我不知道其他选择


编辑:嗯,你可以试试
php://stdin
/
STDIN
,虽然我不知道这是否适用于Web服务器中的PHP。。。也许就试试吧。

正如幽灵赌徒所说,php://input 不适用于enctype=“多部分/表单数据”


您不应该将JSON作为文件附加到请求中,您应该将其作为请求主体添加到post请求中,设置
内容类型
头(application/JSON)。然后它将在
php://input

好的,所以我给我的JSON数据起了个名字,比如
0=[{“q”:“w”}]
然后用
$\u POST['0']
获取它。以及带有
$\u文件的文件

以下是它在高级REST客户端中的外观:

我没有附加JSON文件,而是附加一个图像。我发送的JSON在请求正文中,这是您的问题。。一旦使用
enctype=“多部分/表单数据”
php://input
将保持为空。您不应该将二进制post数据与json内容相结合,而应该划分功能(REST和all)。基本上你有几个选择。。1.将图像发布到API>返回ID,使用所需ID发布json(元数据?)。将文件编码为base64(更大的大小),并将其发布到json文件中,解码并存储。不过我更喜欢选项1,稍微干净一点。