我已经使用XMLWriter
创建了一个XML Feed。它在PHP 5.6流浪盒中完美无缺地工作。在实时服务器上运行PHP 5.4,无法使用消息呈现源:
This page contains the following errors:
error on line 3 at column 6: XML declaration allowed only at the start of the document
如果您查看来源,它看起来像这样:
不知何故,XML文档中添加了几行。服务器之间的唯一区别是PHP版本(据我所知)。
这是XMLWriter代码的前几行:
$xml = new XMLWriter();
$xml->openURI('php://output');
$xml->startDocument("1.0");
$xml->setIndent(true);
$xml->startElement("propertyList");
$xml->writeAttribute('date', date('Y-m-d-H:i:s'));
任何想法如何解决这个问题?
答案 0 :(得分:11)
从PHP 5.4到5.6的一些变化......更不用说更改libxml了......
第一件事显然是确保在打开<?php
标签之前或在使用结束标签之后没有空格。
如果您可以确定何时引入新行(假设它们是新行...您是否使用了十六进制查看器之类的东西?),这将有所帮助。尝试写入临时位置 - 想要确定在提供页面时还是在输出xmlWriter时是否发生这种情况。
想到的事情......
也许要明确indetString
应该是什么。 $xml->setIndentString(" ");
默认编码......?也许试着去做那套。期待打开xml标签... encoding="UTF-8"
。使用startDocument('1.0', 'utf-8');
,可能应该发送标题:header('Content-Type: application/xml; charset=UTF-8');
。你的default_charset
是UTF-8吗?
这两种环境有什么其他区别? short_open_tag
等等。
LIBXML_HTML_NOIMPLIED
?改变了5.4?解决方法:强>
在开始写入输出流之前尝试调用ob_clean
。
使用trim
。
升级服务器,这些天希望在5.4上服务:)
答案 1 :(得分:1)
您的问题是标题的展示位置(&#39;内容类型:text / xml&#39;);
试试这个并确保NOTHING在header()调用之前:
<?php
header('Content-type: text/xml');
...
?>
我想这可以帮到你!