Comment réparer: "HEADER DEJA ENVOYE" et GD2?


8

Ceci est un suivi de la question sur la façon de déboguer: HEADER ALREADY SENT et GD2 . Plus précisément, comment corriger les erreurs suivantes (notez que la première ligne a été ajoutée à l'aide des conseils de débogage précédents pour suivre la source):

   2014-02-04T14:26:06+00:00 DEBUG (7): Cannot send headers; headers already sent in /home/.../lib/Varien/Image/Adapter/Gd2.php, line 133
   2014-02-05T16:14:32+00:00 DEBUG (7): HEADERS ALREADY SENT: < pre >
    [0] /home/.../app/code/core/Mage/Core/Controller/Response/Http.php:52
    [1] /home/.../lib/Zend/Controller/Response/Abstract.php:766
    [2] /home/.../app/code/core/Mage/Core/Controller/Response/Http.php:83
    [3] /home/.../app/code/core/Mage/Core/Controller/Varien/Front.php:188
    [4] /home/.../app/code/core/Mage/Core/Model/App.php:354
    [5] /home/.../app/Mage.php:683
    [6] /home/.../public_html/index.php:87
    </ pre >

Cette question portait sur la façon de déboguer ce problème. Cette question est de savoir comment y remédier. Selon ma "réponse" à cette question, et après avoir effectué d'autres tests sur une installation de Magento vanilla, je peux confirmer que cela semble être un bogue de base Magento (v1.7.0.2).

La simple gestion des images sur des pages ou des blocs statiques, à l'aide du gestionnaire d'images de page / bloc standard de Magento, génère ces journaux. Pour reproduire, ouvrez une page contenant des images. Il y en aura un par image sur la page. Ouvrez le gestionnaire d'images et affichez les images téléchargées - il y en aura un autre pour chaque image affichée.

Le problème semble être lié à cette fonction qui, à ma lecture, provoquera très certainement cette erreur à chaque fois qu'une image CMS sera récupérée pour être affichée dans le tableau de bord.

public function display()
    {
        header("Content-type: ".$this->getMimeType());
        call_user_func($this->_getCallback('output'), $this->_imageHandler);
    }

Bien que cela ne semble pas avoir d'impact sur le magasin, je préfère ne pas traiter cela comme une "erreur bénigne" (car Microsoft aime appeler des choses qu'ils ne peuvent pas corriger / corriger!). Je suppose que nous pourrions simplement modifier canSendHeader () dans lib / Zend / Controller / Response / Abstract.php pour ne pas lancer d'erreur si $ file est gd2.php, mais c'est juste un méchant kludge!

À quoi cela ressemble à un moment donné avant que canSendHeaders ne soit appelé dans le cadre de l'affichage des images CMS dans le tableau de bord, $ throw ou $ this-> headersSentThrowsException doit être défini sur false afin que cela ne génère pas d'exception.

Des idées? Ou c'est ce que les propriétaires de Magento ont appris à vivre!?


voici les raisons expliquées - stackoverflow.com/questions/8028957/…
T.Todua

Avez-vous réussi à résoudre ce problème? Nous le voyons aussi
snh_nl

Réponses:


2

Ce problème sera corrigé à un moment donné; référence MPERF-7047 .


Est-ce toujours le cas, le problème est clos et aucune correction que je peux trouver dans 1.9.2.4?
Aaron Bonner

1
Selon une note d'hier, ce problème "s'est fermé lorsque le ver. EE 1.14.3.0/CE 1.9.3.0 est sorti" - et vous avez été spécifiquement noté dans JIRA, @AaronBonner ;-)
benmarks

1

lol j'ai résolu mon problème changer cela en:

/app/code/local/Cmsmart/Megamenu/Block/Navigation.php

/*
* Name Extension: Megamenu
* Version: 0.1.0

pour:

/**
* Name Extension: Megamenu
* Version: 0.1.0

-.-


Donc, l'incompétence générale dans l'interpréteur php quelque part qui est utilisé sur votre site Web qui ne fait pas réaliser /*qu'il s'agit d'un commentaire php à moins qu'il n'en ait un autre *?
Fiasco Labs

0

J'ai le même problème lors de l'installation de Magento. Dans mon cas, l'activation de output_buffering en PHP a résolu le problème. Dans xampp avec PHP 5.6, output_buffering est activé par défaut. Dans xampp avec PHP 5.3, output_buffering est désactivé par défaut.


0

Pour référence, le problème peut être reproduit en téléchargeant des fichiers png à l'aide de l'éditeur admin cms / wysiwyg puis en consultant une liste de vignettes.

J'ai piraté cette action de miniature pour utiliser la mise en mémoire tampon de sortie et utiliser l'objet de réponse pour définir le corps de données et corriger le type de contenu (il y a un autre bogue là où le code définit l'ID du type de fichier gd plutôt que le type MIME).

Le code ci-dessous remplace la méthode du même nom dans app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php. Utilisez le mécanisme que vous préférez pour remplacer cette méthode (j'ai utilisé un remplacement de contrôleur de pool de code local).

/** * Generate image thumbnail on the fly */ public function thumbnailAction() { $file = $this->getRequest()->getParam('file'); $file = Mage::helper('cms/wysiwyg_images')->idDecode($file); $thumb = $this->getStorage()->resizeOnTheFly($file); if ($thumb !== false) { $image = Varien_Image_Adapter::factory('GD2'); $image->open($thumb); ob_start(); $image->display(); $imageData = ob_get_contents(); ob_end_clean(); $mimeType = image_type_to_mime_type($image->getMimeType()); $this->getResponse()->setHeader('Content-Type', $mimeType, true); $this->getResponse()->setBody($imageData); } else { // todo: genearte some placeholder } }

Je maintiendrai également un résumé, ici - https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.