PHP cURL超时不起作用

PHP cURL超时不起作用,php,curl,Php,Curl,我的服务器有问题。我正在运行一个本地服务器(用于开发),我已经将本地服务器从MAMP更改为XAMPP。但是,在XAMPP上,cURL选项CURLOPT_TIMEOUT_MS或CURLOPT_CONNECTTIMEOUT_MS给了我下一个错误: 警告:curl_setopt()要求参数2为长字符串 这是因为PHP还是cURL版本?也许是配置设置 curl\u setopt($this->ch,CURLOPT\u CONNECTTIMEOUT\u MS,2500) 其他信息: OSX 10.6.8

我的服务器有问题。我正在运行一个本地服务器(用于开发),我已经将本地服务器从MAMP更改为XAMPP。但是,在XAMPP上,cURL选项
CURLOPT_TIMEOUT_MS
CURLOPT_CONNECTTIMEOUT_MS
给了我下一个错误:

警告:curl_setopt()要求参数2为长字符串

这是因为PHP还是cURL版本?也许是配置设置

curl\u setopt($this->ch,CURLOPT\u CONNECTTIMEOUT\u MS,2500)

其他信息:

  • OSX 10.6.8
  • PHP 5.3.1
  • 卷曲7.19.7
提前谢谢


编辑:对于错误和要设置的变量,似乎存在一些混淆。错误表明参数2无效。非参数3。因此,
CURLOPT\u CONNECTTIMEOUT\u MS
似乎是问题所在

curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT_MS, 2500);
            ^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^
parameter:     #1                 #2               #3

有趣的事实:
var\u dump(CURLOPT\u CONNECTTIMEOUT\u MS)显示
字符串(25)“CURLOPT\u CONNECTTIMEOUT\u MS”
。就像错误状态一样,它是一个字符串而不是一个浮点。

由于某种原因,
CURLOPT\u CONNECTTIMEOUT\u MS
在您的PHP版本中定义不正确。我会检查你正在使用的PHP的任何发行版,看看它是否是一个普通的bug

正确的值为
156
:您应该可以使用该值:

curl_setopt($this->ch, /*CURLOPT_CONNECTTIMEOUT_MS */ 156, 2500);

注意,你真的需要添加注释来解释你为什么这样做。

我也遇到了同样的问题,这为我解决了问题。只需将这一行添加到脚本的顶部。它仅在尚未定义时定义缺少的常量

如果(!defined(CURLOPT_CONNECTTIMEOUT_MS))定义('CURLOPT_CONNECTTIMEOUT_MS',156)


您是否尝试过
curl\u setopt($this->ch,CURLOPT\u CONNECTTIMEOUT\u MS,2500.0)?尝试检查
2500
之间是否存在不可打印字符(不可分割的空格),如果可以的话,尝试在值之前使用cast操作符
(int)
。@Sim这是
双浮
,不是
,这不应该起作用。@Sim查看错误。这是关于参数2,它是
CURLOPT\u CONNECTTIMEOUT\u MS
常量。我不认为我的问题在于设定的价值。不管怎样,我已经测试过了,它没有帮助。不管怎样,谢谢。你能为这个常数做一个演员吗?与
(int)CURLOPT\u CONNECTTIMEOUT\u MS
中一样。我不完全确定这是否合法:)工作起来很有魅力!谢谢!谢谢你,但是我能问一下你是怎么知道解决办法的吗?有很多关于CURL超时不工作的问题,在某处和其他地方——有没有可能类似的修复可以作为CURL超时不工作的答案?我和其他人都有这个。如果你认为这是解决问题的方法,我可以提出一个新问题。总而言之,我能问一下在你的答案中提供“156”的文档在哪里吗?@GeoffKendall对不起,我写这个答案已经很久了。上面的评论说明了这个问题,但我不记得我可能做过什么研究。通过执行
var\u dump(CURLOPT\u CONNECTTIMEOUT\u MS),我从自己的系统中获得了值我不认为它在任何地方都有定义。感谢寂寞的一天,我做了“闻咖啡”和谷歌它-它在这里和其他地方。事实证明,常数对我来说很好,但值得一看。