【问题标题】:Curl timeout when downloading xml下载xml时卷曲超时
【发布时间】:2012-11-15 22:38:03
【问题描述】:

所以,我尝试从 url 获取带有 curl 的 xml 文件。问题是,文件是通过脚本按需生成的,这需要 80-100 秒,所以我的 curl 因超时错误而脱落。

网址看起来像这样:

https://domain/mancgi/report?params&out=xml

我尝试为脚本本身设置CURLOPT_TIMEOUT 和CURLOPT_CONNECTTIMEOUT 以及set_time_limit()(工作正常),但没有任何改变 - 仍然超时。

卷曲代码如下所示:

set_time_limit(1000);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($curl, CURLOPT_TIMEOUT, 300); 
$xml = curl_exec($curl);

有人有什么想法吗?

【问题讨论】:

  • 您需要从服务器设置中增加脚本执行时间限制。
  • 你得到什么样的超时,你怎么知道的?请提供详细信息
  • 执行时间会根据 phpinfo() 被 set_time_limit() 覆盖,但即使不是 - 默认设置为 180 秒,这本身就足够了。
  • 我在大约 60 秒后超时,我可以保证这还不够。如果需要任何其他细节 - 我很乐意提供
  • 你能确定远程服务没有超时吗?从命令行使用 curl 远程服务是否正常工作?

标签: php xml curl


【解决方案1】:

我相信您可能会遇到 php.ini 中的 default_socket_timeout,默认为 60 秒。

尝试更改,看看是否有效。如果没有,请改用此方法。

$xml = file_get_contents($url);

这样做将使用您可以在此处阅读的包装器:http://php.net/manual/en/wrappers.php

您还需要确保在 php.ini 中启用了 file_get_contents 所需的包装器(通常是启用的,因此您应该没问题,但只需检查以确保)。

如果超时由 CURL 强制执行,使用它可能会绕过您遇到的超时,并记住将 php.ini 中的 default_socket_timeout 从 60 秒调整为我认为可能是您的问题的其他值

要检查的 INI 设置

http://php.net/manual/en/filesystem.configuration.php

【讨论】:

  • @user1834735, @VBAssassin 抱歉,您是说file_get_contents() 吗?因为我不知道名为 get_file_content() 的函数,而且我的 Google 也不知道它们。而file_get_contents() 不会成功。在与办公室的大多数人进行了几个小时的头脑风暴后,我们得出的结论是,这个问题是 Apache 配置、php.ini 指令和运气不佳的罕见组合,所以这次我们选择 Pearl,我要结束了这个问题。但无论如何,感谢大家的宝贵时间,你们真的很有帮助。
  • 珍珠?你是说Perl? ;) 纠正了错字。 “经过几个小时的头脑风暴与办公室的大部分人”真的吗?超过这样的事情? :/ 有没有资深的PHP开发者,作为一个资深的应该知道所有的地方寻找这种问题。祝你好运:)
  • 是的,Perl,糟糕。是的,真的,在这样的事情上。首先,我们实际上没有高级 PHP 开发人员 - 真的 - 其次,这是非常无聊的一天,所以这对我们所有人来说都是一种娱乐 :) 无论如何,谢谢,也祝你好运。
  • 哈哈,没有比这更公平的了 ;) 对为什么 perl 感兴趣?几年前我在 perl 中编写了一个快速脚本 - 现在当我查看它时,我不知道我到底是怎么写的!我知道称之为意大利面语言:D
  • 嗯,根据我的主管的说法,这是一个简单的解决方案。 “见鬼,这是我在过去五分钟里写的一个 perl 脚本,它对 Apache 配置没有任何影响,它只是下载这个文件并将其存储在你需要的任何地方。祝你有美好的一天。 " - 几乎是他的话,发誓。所以这不是我和他争论的地方——我只是继续我的事业:)
【解决方案2】:

URL 是 GET 请求吗?如果是这样试试

$xml = get_file_content($url);

【讨论】:

  • php中没有这个功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2013-10-12
  • 2017-06-04
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多