2

PHP 入力から XML データを読み取っていますが、XML データではなく番号 1 を受け取っています。

PHP 入力から XML データを読み取るための PHP コード:

            $xmlStr="";
            $file=fopen('php://input','r');
            while ($line=fgets($file) !== false) {
              $xmlStr .= $line;
            }
            fclose($file);

XML を送信するための PHP コード:

public static function xmlPost($url,$xml) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_VERBOSE, 1); // set url to post to
    curl_setopt($ch, CURLOPT_URL, $url); // set url to post to
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 40); // times out after 4s
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); // add POST fields
    curl_setopt($ch, CURLOPT_POST, 1);
    $result=curl_exec ($ch);
    return $result;
}

私が送信している XML に関係なく、受信側は XML データではなく番号 1 を取得しています。何か案は?

この問題に関する情報をいただければ幸いです。

アップデート

次のコードが機能します。

$xmlStr = file_get_contents('php://input');

しかし、なぜ私のコードはそうではないのですか? コードが実際の xml ではなく 1 を返すのはなぜですか?

4

2 に答える 2

5

file_get_contentsあなたの質問に答えるために も使用することをお勧めしますが、演算子の優先順位
の ため、行

while ($line=fgets($file) !== false)

思い通りに動かない。比較結果はfgets($file) !== false$line に代入されます。$xmlStr に追加すると、ブール値が文字列にキャストされます。while ループの条件は $line が true であるため、(string)$line常に1そのループの "内" になります。
あなたが必要だろう

while ( ($line=fgets($file)) !== false)

優先順位を変更するには

于 2013-01-21T07:56:17.150 に答える
2

余分なブラケットを入れてみてください:

while (( $line=fgets($file) ) !== false) {...}
于 2013-01-21T07:59:38.907 に答える