fastcgi

FastCGI is a binary protocol for interfacing interactive programs with a web server. FastCGI is a variation on the earlier Common Gateway Interface (CGI); FastCGI's main aim is to reduce the overhead associated with interfacing the web server and CGI programs, allowing a server to handle more web page requests at once. read more at WikiPedia

  • joomla_cms

    Since months, now I (understand also YOU) receive some blank page when browsing my Internet homepage.

    This strange behavior seems to occur only when having PHP running as FastCGI

    FastCGI is a protocol for interfacing interactive programs with a web server. FastCGI is a variation on the earlier Common Gateway Interface (CGI); FastCGI's main aim is to reduce the overhead associated with interfacing the web server and CGI programs, allowing a server to handle more web page requests at once. [WikiPedia]

    The Apache logs are quite explicit:

    [error] [client x.x.x.x] FastCGI: comm with server "/srv/www/cgi-bin/php5" aborted: error parsing headers: duplicate header 'Status'

    The error is located in the file /libraries/joomla/environment/response.php, at the function JResponse::sendHeaders()

    The way header has to be send is different when using PHP FastCgi, strange that Joomla! 1.5.9 still do not have this in main stream code...

    Old code

     function sendHeadersOld()
     {
      if (!headers_sent())
      {
       foreach ($GLOBALS['_JRESPONSE']->headers as $header)
       {
        if ('status' == strtolower($header['name']))
        {
         // 'status' headers indicate an HTTP status, and need to be handled
         // slightly differently
         header(ucfirst(strtolower($header['name'])) . ': ' . $header['value'], null, 
    (int) $header['value']); } else { header($header['name'] . ': ' . $header['value']); } } } }

    This is how it should look like, code is backward compatible, if PHP run as an apache module.

     function sendHeaders()
     {
      if (!headers_sent())
      {
       foreach ($GLOBALS['_JRESPONSE']->headers as $header)
       {
        if ('status' == strtolower($header['name']))
        {
         // 'status' headers indicate an HTTP status, and need to be handled 
    // slightly differently
    $attribute = ucfirst(strtolower($header['name'])) . ': ' . $header['value']; if (substr(php_sapi_name(), 0, 8) == 'cgi-fcgi') { $attribute = str_replace("Status:", "HTTP/1.1", $attribute); } header($attribute, null, (int) $header['value']); } else { header($header['name'] . ': ' . $header['value']); } } } }