检查是否给出了文件

时间:2013-10-11 03:29:55

标签: php xml api

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

2 个答案:

答案 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
}

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

答案 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
}