我创建了一个在给出XML文件时需要执行的API。 但是,我无法检查文件是否被给出(通过PUT方法)。
请帮帮我。 我的代码有问题吗?即使我发送了有效的XML文件,它总是返回FALSE。
$x = json_decode(json_encode((array)simplexml_load_string(file_get_contents("php://input"))),1);
if(file_get_contents("php://input") !== FALSE) /* I cant use this, why? */
{
// return a valid XML message
}else{
// return an invalid XML message
}
答案 0 :(得分:0)
注意:使用
php://input
打开的流只能读取一次;该 流不支持搜索操作。但是,取决于 SAPI实现,有可能打开另一个php://输入 流并重新开始阅读。这只有在请求正文时才有可能 数据已保存。通常,这是POST请求的情况, 但不是其他请求方法,例如PUT或PROPFIND。
所以你需要做这样的事情
$postcontent=file_get_contents("php://input");
$x = json_decode(json_encode((array)simplexml_load_string($postcontent)),1);
// I think the above line should be inside the if block
if($postcontent !== FALSE) /* I cant use this, why? */
{
// return a valid XML message
}else{
// return an invalid XML message
}
答案 1 :(得分:0)
php://input
流只能通过任何方法读取一次,因此无论如何都会为第二次和后续调用返回一个空字符串。您应该首先保存到中间变量:
$post = file_get_contents("php://input")));
/* Use `!=` will make empty string be false too */
if( ($post != FALSE) &&
($x = json_decode(json_encode((array)simplexml_load_string($post,1)) )
{
// return a valid XML message
}else{
// return an invalid XML message
}