0

我创建了一个在给出 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
}
4

2 回答 2

0

注意:打开的流php://input只能读取一次;该流不支持查找操作。但是,根据 SAPI 实现,可能会打开另一个 php://input 流并重新开始读取。这只有在请求正文数据已保存时才有可能。通常,这是 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
}

参考: http: //php.net/manual/en/wrappers.php.php

于 2013-10-11T03:39:43.627 回答
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
}
于 2013-10-11T03:47:34.490 回答