【问题标题】:How to set or circumvent CURLOPT_CONNECTTIMEOUT in PHP globally?如何在 PHP 中全局设置或规避 CURLOPT_CONNECTTIMEOUT?
【发布时间】:2019-02-27 13:24:12
【问题描述】:

有没有办法为所有 cURL 请求全局设置CURLOPT_CONNECTTIMEOUT

我有一个问题,在升级到 PHP 7.2 后,某些软件的 cURL 现在会在 10 秒的连接超时后失败,而之前它们没有。我不能确切地说是什么改变了这种行为,但我需要以某种方式全局设置 a) 是什么导致它现在超时,或者 b) 增加超时限制。

是否有任何php.ini 设置会对此产生影响?

编辑: 设置default_socket_timeout 似乎对此没有影响。

编辑: FYI 同样的问题,更多的 Wordpress 细节:https://wordpress.stackexchange.com/questions/330013/curl-28-error-after-switch-from-to-brew-php-7-2-on-localhost

【问题讨论】:

  • Set global CURL timeout的可能重复
  • @A.JAlhorr 1)我询问的是CONNECTTIMEOUT 而不是TIMEOUT,因此b)CONNECTTIMEOUT 似乎不尊重该答案中提到的php.ini 设置。
  • 你是对的。默认值需要 300 秒,但找不到从哪里获取该值,可能是 curl 的 dll。好吧,我在github上找到了这个,也许它可以帮助github.com/guzzle/guzzle/issues/652
  • @A.JAlhorr 谢谢,但该解决方案似乎是特定于应用程序的,并且仅适用于该库(可能反过来将其应用于它发出的所有 cURL 请求)
  • 默认300秒是hard-coded in the libcurl code

标签: php curl timeout php-7.2 php-ini


【解决方案1】:

是否有任何 php.ini 设置会影响这一点?

不这么认为。如果您在 php.ini 中安装了 PCEL Runkitrunkit.internal_override=1,那么您可以将其添加到 auto_prepend_file php.ini 文件中,这应该使您自己的超时成为全局默认值:

<?php
runkit_function_rename('curl_init','curl_original_init');
runkit_function_add ( 'curl_init' , '$url=null','$ch=curl_original_init($url);curl_setopt_array($ch,array(CURLOPT_TIMEOUT=>100,CURLOPT_CONNECT_TIMEOUT=>100));return $ch;');
  • 请注意,许多人会认为这是 an evil hack,从技术上改变了 php 内置函数的行为。..

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-05-23
  • 2011-02-11
  • 2014-11-07
  • 2017-12-26
  • 1970-01-01
  • 2015-08-14
  • 2022-11-16
相关资源
最近更新 更多