在Zend应用程序中使用curl_init会导致会话错误

时间:2010-05-07 05:45:03

标签: php zend-framework

我在Zend应用程序中使用这段代码得到了这个奇怪的错误:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'www.xyz.com/ab.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);      

if (!isset($location->country)) {
$location = new Zend_Session_Namespace('location');
$xml = new SimpleXMLElement($data);
$location->city=$xml->City;
}

这是错误,我得到:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()

当我删除该代码时,一切正常。 有什么想法??

编辑:在进一步调试时,我发现错误不是因为卷曲代码 - 当我分配$ location-> city = $ xml-> City时,它正在出现。 但当我将该行更改为$ location-> city =''。$ xml-> City。''; 它开始工作..........这让我疯了!!!!

2 个答案:

答案 0 :(得分:1)

不太确定你的问题是什么,但我可以告诉你,Zend_Http_Client非常好用而且它支持包括CURL在内的多个适配器。

示例:

$http = new Zend_Http_Client(
  'url',
   $this->options
);
$response = $http->request();

http://framework.zend.com/manual/en/zend.http.html

答案 1 :(得分:0)

您的new Zend_Session_Namespace('location');调用将尝试启动一个新会话,但显然已经启动了一个而不使用Zend_Session调用,因此它会抛出异常。所以检查你的其余代码(和php.ini)以找出你开始那个会话的位置(可能是因为php.ini中的session.auto_start = 1,或某个地方的session_start()调用)并按你看到的那样修复它适合...