3

我使用 PHP 的simplexml_load_file()函数来调用一个 API,该 API 根据我发送的时间戳返回更改的结果。

因此,API 将仅返回自我的时间戳以来已更改的结果。我遇到的问题是,如果时间戳太快并且 API 没有返回结果,那么它不会返回正确的 XML 文件,而是只会返回一个空白页。

这导致了各种各样的问题simplexml_load_file

这是我可以运行的简单测试...

$xml = 'http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1';

$xmlObj = new SimpleXMLElement($xml, NULL, TRUE);

这导致...

Warning: SimpleXMLElement::__construct(): http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1:1: parser error : Document is empty in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): ^ in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1:1: parser error : Start tag expected, '<' not found in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): ^ in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php:9 Stack trace: #0 E:\Server\htdocs\labs\freelance\dogAPI\testorg.php(9): SimpleXMLElement->__construct('http://api.resc...', 0, true) #1 {main} thrown in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

现在,如果我向 API 传递一个时间戳,该时间戳在有结果的地方更远,那么它将返回一个完美的 XML 文档。

我正在寻找一种方法来防止这种令人讨厌的错误以某种方式发生?

4

2 回答 2

4

simplexml_load_file

使用 libxml_use_internal_errors() 抑制所有 XML 错误,然后使用 libxml_get_errors() 对其进行迭代。

返回 SimpleXMLElement 类的对象,其属性包含 XML 文档中保存的数据,如果失败则返回 FALSE。

因此,抑制错误并检查 FALSE 以检测查询何时未按预期进行。

于 2013-02-27T18:14:01.593 回答
0
$xml = @simplexml_load_file('http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1');
if(false !== $xml)
{
    // Do anything with xml
}

如果有错误@隐藏它并返回 false

于 2013-02-27T18:14:11.790 回答