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://inputstream はどのメソッドでも 1 回しか読み取れないため、2 回目以降の呼び出しでは何があっても空の文字列を返します。最初に中間変数に保存する必要があります。

$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 に答える
0

注: で開いたストリームphp://inputは 1 回だけ読み取ることができます。ストリームはシーク操作をサポートしていません。ただし、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 に答える