【问题标题】:PHP: reading a remote file that's being updated by an XML APIPHP:读取由 XML API 更新的远程文件
【发布时间】:2012-06-13 00:54:34
【问题描述】:

我正在通过 PHP 代理 like here 访问 XML API(航班搜索比较)。

API 始终有一个完整的文件供下载。第一个版本说有 0 个结果,然后调用它几次后弹出第一个结果。

API 文档说:

结果方法将始终为您提供当前状态 搜索结果。您可以多次调用它(可能使用 ajax 调用)

我的问题是,我不知道什么时候完成,即所有结果什么时候交付。

我试过了:

  1. 读到feof,然后通过fseek() 重置文件位置指示器并稍等like here,但这不起作用,因为流不支持fseek()

  2. 等待 几秒 秒,然后显示结果,但这并不好用,因为 API 有时需要很长时间(而且我没有得到所有内容)

  3. 读到feof,然后用ftell()查看是否有新的东西写入文件,但我没有做事的可能性......

    $handle = fopen($flights_url, "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle);
            echo $buffer;
        }
        fclose($handle);
    }
    

我现在没有主意了。这应该如何以一种好的方式完成?

-T

编辑:更改格式并添加一些代码

【问题讨论】:

  • XML API 就像您在发出 http 请求一样?然后您会收到文件的快照,而不是流,对吗?您的fopen 或等效电话是什么样的?
  • 这在很大程度上取决于您使用的 API。没有通用的方法来完成您的要求。
  • @MikeB:添加了一些代码。
  • @lanzz:对于这个具体案例有什么建议吗?
  • 您应该阅读 API 的文档并弄清楚它们如何发出处理结束的信号。

标签: php ajax file-io proxy


【解决方案1】:

好的,我联系了 API 的一位开发人员。

他告诉我,他们不会发送就绪信号,因为他们也不知道响应何时结束。这是因为它们可以与许多其他 API 一起使用(毕竟这是一个比较 API)。

他给我的建议/解决方案,他们使用的是,轮询几次,每次轮询之间有几秒钟的延迟,然后把剩下的拿走。

对我来说,这似乎是务实而不是优雅,但他们就是这样做的 :-) 感谢所有试图提供意见的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多