0

我正在为我的网站使用外部脚本,我发现它在尝试生成 XML 代码时似乎存在语法问题。

第二行没有引号,这会使页面崩溃。我该如何解决?为什么它对其他人有效?是关于PHP版本的吗?

$h->xmlrequest = '<?xml version="1.0"?>'; 
$h->xmlrequest .= <<<END 
<a:searchrequest xmlns:a="DAV:" xmlns:s="http://schemas.microsoft.com/exchange/security/"> 
  <a:sql> 
     SELECT "DAV:displayname" 
     ,"urn:schemas:httpmail:subject" 
     FROM "$exchange_server/Exchange/aaaaa/inbox" 
  </a:sql> 
</a:searchrequest> 
END;

该问题使 PHP 文件无法执行,因此没有显示任何外部输出。即使只是尝试这样做也会导致崩溃:

$h->xmlrequest = '<'.'?xml version="1.0"?'.'>'; 
$h->xmlrequest .= <<<END 
END;

显示错误这是我得到的错误:

Parse error: syntax error, unexpected T_SL in C:\inetpub\wwwroot\fromMail\index2.php on line 23

第 23 行是 <<< END 之一

4

5 回答 5

1

改变:

$h->xmlrequest = '<?xml version="1.0"?>'; 

到:

$h->xmlrequest = '<'.'?xml version="1.0"?'.'>'; 
于 2012-09-07T10:03:33.280 回答
1

第一个 <<< END 后有一个空格

问题解决了。

于 2012-09-07T11:25:52.037 回答
1

哦,这个真的很难发现:你在行尾有多余的空格<<<END

$h->xmlrequest .= <<<END 
//----------------------^

因此结局

END;

不再匹配。

于 2012-09-07T11:29:05.847 回答
0

也许换行

$h->xmlrequest = '<?xml version="1.0"?>'; 

$h->xmlrequest = '<' . '?xml version="1.0"?' . '>'; 

会做的伎俩,因为解析器认为这?>意味着 PHP 脚本的结束。

于 2012-09-07T10:02:50.013 回答
0

您应该将$exchange_server变量名用大括号括起来,否则尽管 PHP 会尝试解析它,但它可能会受到它周围的代码的影响。

即在您的情况下,$exchange_server 之后的斜杠字符可能会使 PHP 解析器感到困惑。

所以...

$h->xmlrequest .= <<<END 
<a:searchrequest xmlns:a="DAV:" xmlns:s="http://schemas.microsoft.com/exchange/security/"> 
  <a:sql> 
     SELECT "DAV:displayname" 
     ,"urn:schemas:httpmail:subject" 
     FROM "{$exchange_server}/Exchange/aaaaa/inbox" 
  </a:sql> 
</a:searchrequest> 
END;

大括号将确保变量被正确解析,无论它周围是什么。

希望有帮助。

于 2012-09-07T10:04:55.067 回答