Magento FastCGI error parsing headers: duplicate header

Reading Time: < 1 minuteFavoriteLoadingAggiungi ai preferiti

FastCGI: comm with server “/usr/lib/cgi-bin/php5-fcgi” aborted: error parsing headers: duplicate header ‘Content-Type’

Qualche giorno fa abbiamo verificato che il Gestore dei file media, quello che si apre quando vogliamo inserire una immagine nel CMS per capirci, non mostrava le thumbnails delle immagini; scelta l’iimagine questa era però ben visibile sia nell’editor wysiwyg, sia nel frontend di Magento.

Controllando i log abbiamo riscontrato l’errore riportato sopra, ossia un

FastCGI: comm with server "/usr/lib/cgi-bin/php5-fcgi" aborted: error parsing headers: duplicate header 'Content-Type', referer: https://xxxxxx.xxx/index.php/admin/cms_wysiwyg_images/thumbnail/file/bG9nb19pZmJiLnBuZw--/key/3d37ff057d327cd0f3e001b16747fe5f/

Facendo una ricerca su internet abbiamo trovato questo utile post (qui), che spiega come l’errore sia dovuto ad una errata creazione dell’header inviato e come sia risolvibile sostiuendo la funzione sendHeaders() di app/code/core/Mage/Core/Controller/Response/Http.php con questa

 


public function sendHeaders()
    {
        if (!$this->canSendHeaders()) {
            Mage::log('HEADERS ALREADY SENT: '.mageDebugBacktrace(true, true, true));
            return $this;
        }
        if (in_array(substr(php_sapi_name(), 0, 3), array('cgi', 'fpm')))
        {
            // remove duplicate headers
            $remove = array('status', 'content-type');

            // already sent headers
            $sent = array();
            foreach (headers_list() as $header)
            {
                // parse name
                if (!$pos = strpos($header, ':'))
                        continue;
                $sent[strtolower(substr($header, 0, $pos))] = true;
            }

            // raw headers
            $headersRaw = array();
            foreach ($this->_headersRaw as $i=>$header)
            {
                // parse name
                if (!$pos = strpos($header, ':'))
                        continue;
                $name = strtolower(substr($header, 0, $pos));

                if (in_array($name, $remove))
                {
                        // check sent headers
                        if ($sent[$name])
                        {
                            unset($this->_headersRaw[$i]);
                            continue;
                        }

                        // check header
                        if (!is_null($existing = $headers[$name]))
                        {
                            $this->_headersRaw[$existing] = $header;
                            unset($this->_headersRaw[$i]);
                        }
                        else
                            $headersRaw[$name] = $i;
                }
            }

            // object headers
            $headers = array();
            foreach ($this->_headers as $i=>$header)
            {
                $name = strtolower($header['name']);
                if (in_array($name, $remove))
                {
                        // check sent headers
                        if ($sent[$name])
                        {
                            unset($this->_headers[$i]);
                            continue;
                        }

                        // check header
                        if (!is_null($existing = $headers[$name]))
                        {
                            $this->_headers[$existing] = $header;
                            unset($this->_headers[$i]);
                        }
                        else
                            $headers[$name] = $i;

                        // check raw headers
                        if (!is_null($existing = $headersRaw[$name]))
                            unset($this->_headersRaw[$existing]);
                }
            }
        }

        parent::sendHeaders();
    }