Php,XML声明只允许在文档的开头


Php , XML declaration allowed only at the start of the document

这是我第一次使用ajax,这是我从新的波士顿网站上学习的。 但是我收到以下错误

6 列第 8 行出现错误:仅在文档开头允许 XML 声明

我尝试删除通常似乎是修复的空格,但这不起作用。任何建议都会很棒。

<?php
	header('Content-Type: text/xml');
	echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
	echo '<response>';
		$staus;
		$email_in_use = $_GET['email'];
		$query = mysqli_query($link, "SELECT * FROM emails WHERE email='".$email_in_use."'");
		if(mysqli_num_rows($query) > 0){
		    $staus = false;
		    return $status;
		}else{
		    // do something
		    if (!mysqli_query($con,$query))
		    {
		        die('Error: ' . mysqli_error($con));
		    }else{
		    	$staus = true;
		    	return $status;
		    }
		}
	echo '</response>';
?>

脚本中存在许多问题。

首先,$staus不是$status:统一的变量名。

但核心问题是你的脚本永远不会输出一个正确的XML文件:

if (!mysqli_query($con,$query))
{
    die('Error: ' . mysqli_error($con));
}else{
    $staus = true;
    return $status;
}

die()return停止脚本执行,因此不会打印结束</response>标记。

顺便说一句,您的错误与示例中的代码无关,除非您在声明之前有空白行或其他内容<?php

以你的方式输出XML不是一个好主意,最好将执行代码和输出分开。像这样:

$email_in_use = $_GET['email'];
(...)
if( !mysqli_query( $con, $query ) )
{ $status = mysqli_error( $con ); }
else
{ $status = 'OK'; }
header( 'Content-Type: text/xml' );
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '<response>';
echo '<status>'.$status.'</status>';
echo '</response>';

尾注:为了保证正确的XML,我建议您使用XML解析器。使用SimpleXML,即,你可以这样写:

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes" ?><response><status/></response>');
$xml->response->status = $status;
echo $xml->asXML();

echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';

这应该是页面的第一行。XML 希望这是第一行;没有例外。

附言。如果删除header('Content-Type: text/xml'); 它会起作用。

我认为这里发生的事情是这条线干扰了开头的 xml。