I've this wrapper to load a symfony project from inside Joomla

class NZGBCComponentHelper{
function requestAndFollow($path = ''){
    $c = 0;$first = 1;$httpcode = 0;
    $uri = JRequest::getVar('uri');
    while ($c <= 4 && ($first || $httpcode == 302)){
        $first = 0;
        $finalSfUrl = NZGBCComponentHelper::buildRequestUri($uri, $path);

        $ch = curl_init($finalSfUrl);

        if(JRequest::getMethod() == 'POST' && $httpcode != 302){
            curl_setopt($ch, CURLOPT_POST, 1);
            $postThrough = array_merge(JRequest::get($_POST),array('_csrf_token' => $_POST['_csrf_token']));
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postThrough));
        }

        // Get sf content
        curl_setopt($ch, CURLOPT_REFERER, JURI::getInstance()->root().$path);
        curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'readHeader');
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_COOKIE, 'symfony='.$_COOKIE['symfony']);

        $return = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);


        if (!$return){
            $error = curl_error($ch);
        }

        if($this->headers['Set-Cookie']){
            JResponse::setHeader('Set-Cookie', $mainframe->sym_headers['Set-Cookie']);
        }
        if ($httpcode >= 400){
            $return = "There was an <!--$finalSfUrl-->  error ";
            mail ('jd@automatem.co.nz', 'symfony wrapper error',
            $finalSfUrl."\r\n".
            $httpcode."\r\n".
            $return
            );

        }else if ($httpcode == 302){
            $query = parse_url(trim($mainframe->sym_headers['Location']), PHP_URL_QUERY);
            parse_str($query);
            parse_str($uri);
            if ($outside == 'true'){
                JApplication::redirect(trim(urldecode($uri)));
            }
        }
        curl_close($ch);
        $c++;
    }
    return $return;

}
}

if (!function_exists('readHeader')){
function readHeader($ch, $header){

    $mainframe =& JFactory::getApplication();
    if($pos = strpos($header, ':')){
        $mainframe->sym_headers[substr($header, 0, $pos)] = substr(strstr($header, ':'), 1);
    }

    return strlen($header);
}

requestAndFollow is statically known as. How do i make reference to readHeader() rather than putting it in to the global function space. I attempted:

curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'readHeader'));//didn't expect this to work - no $this when statically called


curl_setopt($ch, CURLOPT_HEADERFUNCTION, array('NZGBCComponentHelper','readHeader'));


curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(self,'readHeader'));

are u getting ant error like curl_init() not defined?

Enable display error and try to understand this message.

When you get this message then your cause that CURL isn't installed correctly.

It seems this works fine on

  • libcurl 7.19.7, Ubuntu 10.10, PHP 5.3.2

but this is not on

  • libcurl 7.18.2 on Debian Lenny, PHP 5.2.6