【问题标题】:Failed to start the session because headers have already been sent by curl_exec()无法启动会话,因为 curl_exec() 已发送标头
【发布时间】:2017-12-29 18:14:06
【问题描述】:

我看到了一些类似的 SO 问题,但它们并没有解决我的问题。

当我执行 cUrl GET 时,我收到一条错误消息:

Failed to start the session because headers have already been sent by
".../cUrlWrapper.php" at line 60.

对应的PHP代码为:

$this->curl = curl_init($url);
curl_exec($this->curl);  // Line 60

有谁知道发生了什么以及我该如何解决这个问题?

解决方案更新

虽然批准的解决方案解决了我的问题(解决方法),但我还在服务中删除了不必要的 ContainerAwareTrait(我的问题的根本原因),这首先更好。

【问题讨论】:

  • session_start() 必须是文件的开头

标签: php symfony curl


【解决方案1】:

除非您设置“返回传输”选项,否则curl_exec()输出 URL 请求的结果。一旦该输出发生,您将无法设置任何新的标头,例如开始会话。

您可以在包含cUrlWrapper.php 文件之前调用session_start() (或调用curl_exec() 所在的任何函数),您可以捕获URL请求的结果并稍后输出:

$this->curl = curl_init($url);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($this->curl);
// perhaps "return $result;" if this is in a function

// ...
session_start();
// ...

echo $result;

【讨论】:

  • 有道理,在开始会话之前你不能输出任何东西。
  • 我在设置选项后和 curl_exec() 之前设置了 session_sart(),异常消失了。谢谢!
猜你喜欢
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2014-06-09
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多