我怎么能弄清楚为什么cURL挂起并且没有响应?

时间:2010-05-13 16:38:21

标签: php linux curl centos

我正在尝试使用PHP中的cURL调用来追踪问题。它在我们的测试环境中工作正常,但在我们的生产环境中却不行。当我尝试执行cURL函数时,它只是挂起而永远不会响应。我试过从命令行创建一个cURL连接,同样的事情发生了。

我想知道cURL是否记录了某处发生的事情,因为我无法弄清楚在命令搅拌和搅动期间发生了什么。有没有人知道是否有记录跟踪那里发生的事情的日志?

我认为这是连接问题,但我们的IT人员坚称我应该能够毫无问题地访问它。有任何想法吗?我正在运行CentOS和PHP 5.1。

更新:使用详细模式,我收到错误28“连接()超时”。我尝试将超时延长到100秒,并将max-redirs限制为5,没有变化。我试着ping这个盒子,还有一个超时。所以我要把它呈现给IT,看看他们是否会再看一遍。感谢所有的帮助,希望我能在半小时内回来,知道这是他们的问题。

更新2:原来我的方框是使用外部IP地址解析服务器名称。当IT给我内部IP地址并在cURL调用中替换它时,一切都很好。感谢所有人的帮助。

4 个答案:

答案 0 :(得分:16)

在你的php中,你可以设置CURLOPT_VERBOSE变量:

curl_setopt($curl, CURLOPT_VERBOSE, TRUE);

然后记录到STDERR,或者使用CURLOPT_STDERR(带文件指针)指定的文件:

curl_setopt($curl, CURLOPT_STDERR, $fp);

从命令行,您可以使用以下开关:

  • --verbose向命令行报告更多信息
  • --trace <file>--trace-ascii <file>跟踪文件

您可以使用--trace-time将时间戳添加到详细/文件输出

答案 1 :(得分:0)

您还可以使用curl_getinfo()获取有关特定转移的信息。

http://in.php.net/manual/en/function.curl-getinfo.php

答案 2 :(得分:0)

您是否尝试过设置CURLOPT_MAXREDIRS?我发现有时会有一些普通浏览器用户看不到的网站的“无限”重定向循环。

答案 3 :(得分:-1)

如果可能的话,尝试使用PHP运行的用户sudo(可能是Apache运行的用户)。

curl问题可能有多种原因需要用户输入,例如存储在root用户的受信任证书缓存中的不受信任证书,而不是PHP用户。在这种情况下,命令将等待从未发生过的输入。

更新:仅当您使用exec在外部运行curl时才适用 - 可能不适用。