【问题标题】:PHP + cURL: simple test script not working (on one machine)PHP + cURL:简单的测试脚本不起作用(在一台机器上)
【发布时间】:2023-03-12 21:30:01
【问题描述】:

我有以下一个非常简单的 PHP 脚本,它使用 cURL 加载网页并显示

<?php
  $ch = curl_init("http://www.reddit.com/");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
  $content = "Hello, World!";
  $content = curl_exec($ch);
  curl_close($ch); 
  echo $content;
?>

在我的本地机器上,它运行良好——但在我的服务器机器上却不行。在这里,我在 Firefox 中收到“连接已重置”错误。引起麻烦的行似乎是$content = curl_exec($ch);。如果我评论这一行,我会在两台机器上看到Hello, World!

在两台机器上调用phpinfo() 时,cURL 部分看起来非常相似。这里有什么问题,它可以在一台机器上运行,但不能在另一台机器上运行。基本上,两者都运行 Ubuntu 14.04、Apache 2 和 PHP 5。哪些配置或权限可能不同。我有点不知所措。

编辑:正如 arkascha 建议的那样,我检查了 Apache error.log 文件。事实上,如果我在执行curl_exec 命令后立即看到以下错误:

[core:notice] [pid 28267] AH00051: child pid 28274 exit signal Segmentation fault (11), possible coredump in /etc/apache2

【问题讨论】:

  • @ManojKushwaha 你介意更精确一点吗?你能指出你在那个页面中引用的内容吗?那么为什么该页面与此处相关?
  • 我建议你看看http服务器错误日志文件...
  • 您确定要像这样使用两次$content 吗?这是没有意义的。执行后检查curl_error。它可能包含您要查找的错误。
  • @Jigar 你们甚至懒得阅读这个问题吗? OP解释说!

标签: php apache curl


【解决方案1】:

我之前遇到过类似的问题,并通过解决方案given here 解决了。请在您的文件顶部添加以下行并再次测试。

<?php
ini_set('zend.enable_gc', 0);
....
....

【讨论】:

  • 很遗憾,没有变化。
【解决方案2】:

我刚刚经历过类似的事情。两台服务器之间的 CURL 连接大部分时间都在工作,但大约五分之一的时候会崩溃。

当它崩溃时,Firefox 会报告“连接已重置”,而 Safari 会告诉我“服务器意外断开连接”。 Apache 错误日志将显示 exit signal Segmentation fault (11)

添加跟踪后,我发现实际上是 curl_close 函数导致了崩溃,而不是 curl_exec 实际上工作正常(其结果出现在我的日志中)。

最终,我在我的代码中确定了这一行...

curl_setopt($curlSession, CURLOPT_VERBOSE, true);

...我用来将 CURL 会话的原始数据输出到日志文件,用于调试目的。由于我注释掉了该行,因此错误停止发生。

所以似乎使用 CURLOPT_VERBOSE 会导致 CURL 崩溃,并带走 PHP/Apache。 (我还看到一个 CPP 程序员的讨论对 CPP 上的 CURL 说了同样的话。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多