2

我正在从 PHP 输入中读取 XML 数据,并且收到的是数字 1 而不是 XML 数据。

用于从 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,接收端都会得到数字 1 而不是 XML 数据。有任何想法吗?

任何有关该问题的信息将不胜感激。

更新

以下代码有效:

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

但为什么我的代码没有?为什么我的代码返回 1 而不是实际的 xml ?

4

2 回答 2

5

尽管我也建议使用file_get_contents来回答您的问题:
由于运算符优先级,该行

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

不能按您希望的方式工作。比较的结果fgets($file) !== false分配给 $line。当您将其附加到 $xmlStr 时,布尔值将转换为字符串。由于 while 循环的条件是 $line 为真,(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 回答