下载XML时Curl超时

5

我尝试使用curl从URL获取xml文件。问题在于,该文件是通过脚本按需生成的,这需要80-100秒的时间,因此我的curl会由于超时错误而退出。

URL的格式类似于:

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

我尝试设置CURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT,还为脚本本身设置了set_time_limit()(这个工作正常),但是仍然超时。

Curl代码如下:

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);

有人有什么想法吗?


您需要从服务器设置中增加脚本执行时间限制。 - Vijay Verma
你遇到了什么类型的超时问题,你是如何知道的?请提供详细信息。 - Ranty
根据phpinfo(),执行时间被set_time_limit()覆盖,但即使没有设置,它的默认值也为180秒,这已经足够了。 - user976258
你能通过在浏览器中打开链接直接访问XML吗? - web-nomad
@Pushpesh 是的,我可以,每次都像魔法一样顺利。只需要两分钟的时间。 - user976258
显示剩余2条评论
2个回答

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,并关闭了问题。但无论如何,感谢你们所有人的时间,你们真的很有帮助。 - user976258
珍珠?你是说Perl吗? ;) 更正了打字错误。“与大多数办公室进行了几个小时的头脑风暴” 真的吗?就像这样的事情? :/ 没有PHP高级开发人员吗?作为高级人员,应该知道查找此类问题的所有位置。祝你好运 :) - HenchHacker
是的,Perl,我的错。没错,就是因为这个。首先,我们实际上没有高级PHP开发人员 - 真的 - 其次,那天非常无聊,所以这对我们所有人来说都是一种娱乐 :) 无论如何,还是谢谢你,祝你好运。 - user976258
哈哈,这再公平不过了 ;) 为什么选择Perl呢?我几年前写过一个Perl脚本 - 现在当我回顾它时,我不知道我当时是怎么写的!我现在称它为意大利面代码 :D - HenchHacker
根据我的主管,这是一个简单的解决方案。 "算了吧,这是我在过去五分钟里编写的一个Perl脚本,它不关心Apache配置和其他任何事情,它只是下载这个文件并将其存储在您需要的任何地方。祝你愉快。" - 几乎是他的原话,发誓。所以我没有争论的地方 - 我只是继续做我的事情 :) - user976258
哈哈,不能跟那个争辩>< - HenchHacker

0

URL 是否是 GET 请求?如果是,请尝试

$xml = get_file_content($url);

PHP中没有这样的函数。 - ZurabWeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接