file_get_contents没有等待

时间:2011-10-04 15:00:43

标签: php rest

我正在使用对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);

谢谢,

大卫

1 个答案:

答案 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&...."));