Ini adalah tindak lanjut dari pertanyaan tentang Cara debug: HEADER SUDAH DIKIRIM dan GD2 . Secara khusus cara memperbaiki kesalahan berikut (perhatikan baris pertama telah ditambahkan menggunakan saran debug sebelumnya untuk melacak sumber):
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 >
Pertanyaan itu adalah bagaimana cara men-debug masalah ini. Pertanyaan ini adalah bagaimana cara memperbaikinya. Sesuai "jawaban" saya pada pertanyaan itu, dan setelah melakukan beberapa pengujian lebih lanjut pada pemasangan vanilla Magento, saya dapat mengonfirmasi bahwa ini memang tampaknya merupakan bug inti Magento (v1.7.0.2).
Cukup mengelola gambar pada halaman atau blok statis, menggunakan halaman Magento standar / blok manajer gambar menyebabkan log ini. Untuk mereproduksi, buka halaman yang memiliki gambar di dalamnya. Akan ada satu dari ini yang dicatat setiap gambar pada halaman. Buka pengelola gambar dan lihat gambar yang diunggah - akan ada yang lain untuk setiap gambar yang ditampilkan.
Masalahnya tampaknya dengan fungsi ini, yang pada bacaan saya pasti akan menyebabkan kesalahan ini setiap kali gambar CMS diambil untuk ditampilkan di dasbor.
public function display()
{
header("Content-type: ".$this->getMimeType());
call_user_func($this->_getCallback('output'), $this->_imageHandler);
}
Meskipun tampaknya tidak berdampak pada toko, saya lebih suka tidak menganggap ini sebagai "kesalahan jinak" (karena Microsoft suka menyebut hal-hal yang tidak dapat mereka perbaiki / perbaiki!). Saya kira kita bisa memodifikasi canSendHeader () di lib / Zend / Controller / Response / Abstract.php agar tidak melempar kesalahan jika $ file gd2.php, tapi itu hanya lumpur buruk!
Seperti apa terlihat pada beberapa titik sebelum canSendHeaders disebut sebagai bagian dari menampilkan gambar CMS di dashboard, baik $ throw atau $ this-> headerSentThrowsException harus disetel salah sehingga ini tidak menghasilkan pengecualian.
Ada ide? Atau ini sesuatu yang dipelajari pemilik Magento untuk hidup bersama !?
Jawaban:
Masalah ini akan ditambal di beberapa titik; referensi MPERF-7047 .
sumber
lol Saya memecahkan masalah saya ubah ini di:
untuk:
-.-
sumber
/*
untuk menjadi komentar php kecuali ada yang lain*
?Saya memiliki masalah yang sama saat menginstal Magento. Dalam kasus saya mengaktifkan output_buffering di PHP memecahkan masalah ini. Dalam xampp dengan PHP 5.6 output_buffering diaktifkan secara default. Dalam xampp dengan PHP 5.3 output_buffering dinonaktifkan secara default.
sumber
Untuk referensi masalah dapat direproduksi dengan mengunggah beberapa file png menggunakan editor cms / wysiwyg admin kemudian melihat daftar thumbnail.
Saya telah meretas tindakan thumbnail untuk menggunakan buffering output dan menggunakan objek respons untuk mengatur tubuh data dan mengoreksi Content-Type (ada bug lain di sana di mana kode mengatur id tipe file gd daripada mimetype).
Kode di bawah ini menggantikan metode dengan nama yang sama di
app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php
. Gunakan mekanisme apa pun yang Anda inginkan untuk mengganti metode ini (saya menggunakan pengendali kumpulan kode lokal)./** * 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 } }
Saya akan memelihara inti juga, di sini - https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595
sumber