修正方法:「HEADER ALREADY SENT」とGD2?


8

これは、デバッグ方法の質問の続きです:ヘッダーはすでに送信され、GD2です。具体的には、次のエラーを修正する方法(ソースを追跡するために以前のデバッグアドバイスを使用して最初の行が追加されていることに注意してください):

   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 >

その質問は、この問題をデバッグする方法に関するものでした。この質問はそれを修正する方法です。その質問に対する私の「回答」に従って、そしてバニラMagentoインストールでさらにいくつかのテストを行ったところ、これがMagentoコアバグ(v1.7.0.2)のように見えることを確認できます。

これらのログは、標準のMagentoページ/ブロック画像マネージャーを使用して、ページまたは静的ブロックの画像を管理するだけで発生します。再現するには、画像が含まれているページを開きます。ページ上の画像ごとにこれらの1つが記録されます。画像マネージャーを開いて、アップロードされた画像を表示します-表示される画像ごとに別の画像があります。

問題はこの関数にあるようです。私の読書では、CMS画像がフェッチされてダッシュボードに表示されるたびにこのエラーが発生することが最も確実です。

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

ストアへの影響はないように見えますが、これは「害のないエラー」として扱わない方がよいでしょう(Microsoftは、正しく取得できない/修正できないものを呼び出すので!)。$ fileがgd2.phpの場合にエラーをスローしないようにlib / Zend / Controller / Response / Abstract.phpのcanSendHeader()を変更するだけでよいのではないかと思いますが、それは単に厄介なことです!

ダッシュボードにCMS画像を表示する一環としてcanSendHeadersが呼び出される前のある時点で、$ throwまたは$ this-> headersSentThrowsExceptionをfalseに設定して、例外が生成されないようにする必要があります。

何か案は?または、これはMagentoの所有者が一緒に暮らすことを学んだものです!?


ここに理由が説明されている- stackoverflow.com/questions/8028957/...
T.Todua

これをなんとか修正できましたか?それもわかります
snh_nl 2015年

回答:


2

この問題はいつかパッチされるでしょう。MPERF-7047を参照してください


これはまだ事実ですか?問題は解決し、1.9.2.4で見つけることができる修正はありませんか?
アーロンボナー2016

1
昨日のメモによると、この問題は「ver EE 1.14.3.0/CE 1.9.3.0がリリースされたときにクローズされました」-JIRA、@ AaronBonner ;-)で具体的に指摘されていました
ベンマークス

1

笑私は私の問題を解決しましたこれを次のように変更してください:

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

/*
* Name Extension: Megamenu
* Version: 0.1.0

ために:

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

-.-


それで、あなたのウェブサイトで使用されているどこかでphpインタプリタの一般的な無能さは、/*それが別のものがない限り、phpコメントであることに気付かないようにし*ますか?
Fiasco Labs

0

Magentoのインストール中に同じ問題が発生します。私の場合、PHPでoutput_bufferingを有効にすると問題が解決しました。PHP 5.6のxamppでは、output_bufferingがデフォルトで有効になっています。PHP 5.3のxamppでは、output_bufferingはデフォルトで無効になっています。


0

参考までに、admin cms / wysiwygエディターを使用していくつかのpngファイルをアップロードし、サムネイルのリストを表示することで、問題を再現できます。

私はそのサムネイルアクションをハッキングして、出力バッファリングを使用し、応答オブジェクトを使用してデータ本文を設定し、Content-Typeを修正しました(コードがmimetypeではなくgdファイルタイプIDを設定する別のバグがあります)。

以下のコードは、の同じ名前のメソッドを置き換えapp/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.phpます。このメソッドをオーバーライドしたいメカニズムを使用してください(私はローカルコードプールコントローラーのオーバーライドを使用しました)。

/** * 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 } }

ここでも要点を維持します-https ://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.