【问题标题】:file_get_contents not waitingfile_get_contents 不等待
【发布时间】:2011-10-04 15:00:43
【问题描述】:

我正在使用 PHP 调用 REST 服务从 eXist XML 数据库中检索信息,在 localhost 上运行,使用 file_get_contents() 捕获结果,并使用这些结果填充查询表单中的下拉列表.我认为file_get_contents() 应该自动等待完整的结果,但显然它没有;有时列表已完全填充,有时会被截断。截断发生在不同的位置,并且重新加载页面(重新运行 PHP,因此重新运行 REST 调用)通常会修复它,尽管有时不是第一次尝试。

如果我通过file_get_contents() 不等待结果来正确诊断问题,谁能告诉我如何解决它?还是有其他解释?这是来自 PHP 的相关 sn-p:

$getPersonNamesQuery =

谢谢,

大卫

【问题讨论】:

  • file_get_contents 确实等待响应。如果它快速返回,那是因为请求的资源很快完成或某些原因导致连接提前结束。
  • 不是它返回的很快,而是我没有得到完整的结果,即返回(有时)被截断。如果我误诊了问题(当然有可能!),我还能在哪里寻找解释?
  • 使用能够提供更好诊断的工具,例如 curl。 file_get_contents 有点单一,很难调试。但简而言之,如果它返回的数据被截断,那是因为发送它的任何东西或网络都会导致截断。
  • 谢谢。当我直接与 eXist 交谈时,我得到了完整的结果,而不是通过 PHP,所以我排除了 REST 调用本身是问题的根源。我去那里看看。问题是间歇性的(虽然很频繁,但有时我得到完整的结果,有时我没有,而且截断可能发生在不同的地方),并且因为我无法复制它,所以我在测试时遇到了麻烦。叹息。

标签: php rest


【解决方案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&...."));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2020-05-09
    • 2021-09-15
    相关资源
    最近更新 更多