我正在尝试使用PHP中的cURL调用来追踪问题。它在我们的测试环境中工作正常,但在我们的生产环境中却不行。当我尝试执行cURL函数时,它只是挂起而永远不会响应。我试过从命令行创建一个cURL连接,同样的事情发生了。
我想知道cURL是否记录了某处发生的事情,因为我无法弄清楚在命令搅拌和搅动期间发生了什么。有没有人知道是否有记录跟踪那里发生的事情的日志?
我认为这是连接问题,但我们的IT人员坚称我应该能够毫无问题地访问它。有任何想法吗?我正在运行CentOS和PHP 5.1。
更新:使用详细模式,我收到错误28“连接()超时”。我尝试将超时延长到100秒,并将max-redirs限制为5,没有变化。我试着ping这个盒子,还有一个超时。所以我要把它呈现给IT,看看他们是否会再看一遍。感谢所有的帮助,希望我能在半小时内回来,知道这是他们的问题。
更新2:原来我的方框是使用外部IP地址解析服务器名称。当IT给我内部IP地址并在cURL调用中替换它时,一切都很好。感谢所有人的帮助。
答案 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()获取有关特定转移的信息。
答案 2 :(得分:0)
您是否尝试过设置CURLOPT_MAXREDIRS?我发现有时会有一些普通浏览器用户看不到的网站的“无限”重定向循环。
答案 3 :(得分:-1)
如果可能的话,尝试使用PHP运行的用户sudo
(可能是Apache运行的用户)。
curl
问题可能有多种原因需要用户输入,例如存储在root用户的受信任证书缓存中的不受信任证书,而不是PHP用户。在这种情况下,命令将等待从未发生过的输入。
更新:仅当您使用exec
在外部运行curl时才适用 - 可能不适用。