我遇到了一个问题,我现在无法解决7个小时。
这是我在openfire服务器上创建用户的php脚本:
$f = fopen("LINK","r");
$odpoved = fread($f, 1024);
写入手册http://www.igniterealtime.org/projects/openfire/plugins/userservice/readme.html中的,我的变量应该包含“OK”或“UserAlreadyExistsException”。当我尝试打印$ odpoved时,它表现良好,当我查看该页面的源代码时,它包含手动编写的标签。我的问题是,为了上帝的缘故,我找不到在交换机中使用这个变量的方法。这就是它现在的样子:
switch($odpoved){
case 'OK':
print("something");
break;
case 'UserAlreadyExistsException':
print("something2");
break;
default:
print("X");
}
fclose($f);
无论我做什么,它总是打印默认。我不明白它有什么问题。我已经尝试将它与带有标签的选项进行比较,但它没有帮助,它总是默认为最终。 请你帮帮我吗?感谢您的帮助,如果需要,我会提供更多详细信息。
答案 0 :(得分:1)
服务器将使用XML结果页面回复所有用户服务请求。如果请求被成功处理,则返回将是“result”元素,文本正文为“OK”。如果请求不成功,则返回将是一个“error”元素,其文本正文为以下错误字符串之一。
输出是一个XML文件,所以你正在看的是使用XML解析器来获取结果元素。 simplexml会将它加载到一个数组中(因为这个xml页面很小,你不必担心性能,所以更复杂的xml解析器不值得麻烦)
$output = simplexml_load_string($odpoved)
switch($output->result) //check $odpoved to make sure the XML structure matches
或者,您也可以使用simplexml_load_file传递URL 输出将是相同的。
有关详细信息,请参阅:http://www.sitepoint.com/parsing-xml-with-simplexml/
答案 1 :(得分:0)
你的switch语句对我来说很好。我会质疑变量$odpoved
中的内容。使用var_dump($odpoved)
查看其中包含的内容,并确保检查前导空格和尾随空格或隐藏字符(换行符有时很难发现)。
对于switch语句分析,请查看http://www.php.net/manual/en/control-structures.switch.php