我正在使用对REST服务的PHP调用来从eXist XML数据库中检索信息,在localhost上运行,使用file_get_contents()
捕获结果,并使用这些结果填充下拉列表。查询表格。我认为file_get_contents()
应该自动等待完整的结果,但显然它没有;有时列表是完全填充的,有时它会被截断。截断发生在不同的位置,并重新加载页面(重新运行PHP,因此REST调用)通常会修复它,虽然有时不是第一次尝试。
如果file_get_contents()
没有等待结果,我是否正确诊断出问题,有人可以告诉我如何解决问题吗?或者有另一种解释吗?这是PHP的相关片段:
$getPersonNamesQuery = <<< EOQ1 {for \$i in doc('/db/genealogy/genealogy.xml')//person[not(.//firstName eq "unknown")] order by string-join(\$i/name/*," ") return {normalize-space(concat( \$i/name/firstName, " ", if (\$i/name/epithet) then concat("â",\$i/name/epithet,"â) else "", " ", \$i/name/patronymic," ", if (not(\$i/@origin eq "Rus'" or \$i/@origin eq "unknown")) then concat("of ",\$i/@origin) else "" ))} } EOQ1; $contents = "http://localhost:8080/exist/rest/db/genealogy?_howmany=10000&_wrap=no&_query=" . urlencode($getPersonNamesQuery); $personNames = file_get_contents($contents);
谢谢,
大卫
答案 0 :(得分:1)
同样的事情发生在我身上,我使用http_build_query来构建查询字符串,而file_get_contents和cURL的结果都是过早响应。在两个函数中传递没有http_build_query的完整查询字符串导致成功。怪异!
结果是截断的数据:
$pUrl=array('username'=>'_username_',
'variable'=>'value',
'variable2'=>'value2',
'variable3'=>'value3');
$cURL=http_build_query($pUrl);
print_r(file_get_contents("http://www.example.com/api/?$cURL"));
每次都返回完整的数据:
print_r(file_get_contents("http://www.example.com/api/?username=_username_&variable=value&...."));