我正在尝试找出 PHP 中 cURL 调用的问题。 它在我们的测试环境中运行良好,但在我们的生产环境中却不行。 当我尝试执行 cURL 函数时,它只是挂起并且永远不会响应。 我尝试从命令行建立 cURL 连接,但发生了同样的事情。
我想知道 cURL 是否记录了某处发生的事情,因为我无法弄清楚命令不断搅拌期间发生了什么。 有谁知道是否有一个日志可以跟踪那里发生的事情?
我认为这是连接问题,但我们的 IT 人员坚持认为我应该能够毫无问题地访问它。 有什么想法吗? 我正在运行 CentOS 和 PHP 5.1。
更新: 使用详细模式时,我收到错误 28“Connect() 超时”。 我尝试将超时延长到 100 秒,并将 max-redirs 限制为 5,但没有任何变化。 我尝试对盒子进行 ping 操作,但也超时了。 因此,我会将其提交给 IT 人员,看看他们是否会再次查看。 感谢您的所有帮助,希望我能在半小时内回来并告知这是他们的问题。
更新2:原来我的盒子正在使用外部IP地址解析服务器名称。 当 IT 部门为我提供内部 IP 地址并在 cURL 调用中替换它时,一切都运行良好。 谢谢大家的帮助。
在您的 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
将时间戳添加到详细/文件输出
您还可以使用curl_getinfo()来获取有关您的特定传输的信息。
尝试设置 cURL 选项
CURLOPT_MAXREDIRS
。我发现有时某些网站会出现普通浏览器用户看不到的“无限”重定向循环。
顺便说一下,默认值是 20。所以你可以考虑减少它。
https://www.php.net/manual/en/curl.constants.php#constant.curlopt-maxredirs
如果可能的话,请在运行 PHP 的用户(可能是运行 Apache 的用户)下尝试
sudo
ing。
curl
问题可能有多种需要用户输入的原因,例如存储在根用户的受信任证书缓存中的不受信任的证书,但不是 PHP 的证书。在这种情况下,该命令将等待一个永远不会发生的输入。
更新:仅当您使用
exec
在外部运行curl时才适用 - 也许它不适用。