Intereting Posts
Внедрить карту в javascript, которая поддерживает методы объектов как отображаемые функции? Проблема OCI Connect в Windows Server 2012 с PHP версии 5.6.14 Как обеспечить дополнительную безопасность для проверки источника запроса как заставить Doctrine_Expression (доктрина 1.2) попытаться получить последние 7 дней импортировать пользовательские контакты из Google, Yahoo и AOL в php Как использовать php mysql с Android для публикации и получения данных? Динамическая безопасность PHP включает в себя пробел в верхней части страницы Отображение таблицы в PHP с повторяющимися столбцами Можно ли получить доступ к $ this из include () 'd файла в PHP-классе? Накладки на Google Карты «Отображение результатов X-Y из Z» с использованием библиотеки разбиения на страницы Codeigniter? Сеансы Codeigniter по субдоменам php mysql сортировать по дате (новейший) как проверить множественную переменную $ _POST для существования с помощью isset ()?

fputcsv вызывает ошибку «Заголовки уже отправлены»

Я пишу скрипт экспорта PHP для своей копии magento. По какой-то причине следующий код дает мне сообщение «Headers already sent»:

//Load magento and set to match frontend require_once '../../app/Mage.php'; umask(0); Mage::app(); Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_FRONTEND); //Send headers to browser to prep for csv file download header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=exportSKUs.csv'); //Load only product collection details that we need. $product = Mage::getModel('catalog/product'); $product->getCollection()->getSelect()->limit(5); $products = $product->getCollection() ->addFieldToFilter('status','1') ->addAttributeToSelect('name') ->addAttributeToSelect('sku') ->addAttributeToSelect('upc') ->addAttributeToSelect('status') ->addAttributeToSelect('price') ->addAttributeToSelect('special_price') ->addAttributeToSelect('description') ->addAttributeToSelect('category_ids') ->addAttributeToSelect('short_description'); //Open current output to fputcsv $fp = fopen('php://output', 'w'); //CSV headers $headerRow = array( 'name', 'sku', 'upc', 'status', 'price', 'special_price', 'description', 'category_ids', 'short_description' ); fputcsv($fp, $headerRow); $count = 0; //CSV Rows foreach($products as &$product){ $categoryIds = implode(',', $product->getCategoryIds()); $row = array( $product->getName(), $product->getSku(), $product->getUpc(), $product->getStatus(), $product->getPrice(), $product->getSpecialPrice(), $product->getDescription(), $categoryIds, $product->getShortDescription() ); fputcsv($fp, $row); $count++; if($count>5){ //Close current output (save csv) fclose($fp); exit; } } 

Здесь строка кода вызывает проблемы: fputcsv($fp, $headerRow); По какой-то причине, когда эта строка закомментирована, скрипт работает нормально. Однако, когда эта строка запускается со сценарием, она снимает уже отправленную ошибку заголовка. Я не понимаю, почему я могу запускать fputcsv INSIDE мой цикл foreach сколько fputcsv($fp, $row); раз ( fputcsv($fp, $row); ), но я не могу запустить его перед циклом foreach вообще.

У меня есть способы обойти эту проблему, так что это не суперкритично, но я действительно хочу, чтобы я мог понять, что здесь происходит, чтобы вызвать это.

Спасибо за ваше время!

Я изменил свой код … проверьте это. У меня есть процесс magento для экспорта …

 <?php //Load magento and set to match frontend require_once '../../app/Mage.php'; umask(0); Mage::app(); Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_FRONTEND); //Send headers to browser to prep for csv file download //header('Content-Type: text/csv'); //header('Content-Disposition: attachment;filename=exportSKUs.csv'); // $filename="exportSKUs.csv"; //Load only product collection details that we need. $product = Mage::getModel('catalog/product'); $product->getCollection()->getSelect()->limit(5); $products = $product->getCollection() ->addFieldToFilter('status','1') ->addAttributeToSelect('name') ->addAttributeToSelect('sku') ->addAttributeToSelect('upc') ->addAttributeToSelect('status') ->addAttributeToSelect('price') ->addAttributeToSelect('special_price') ->addAttributeToSelect('description') ->addAttributeToSelect('category_ids') ->addAttributeToSelect('short_description'); $io = new Varien_Io_File(); $path = Mage::getBaseDir('var') . DS . 'export' . DS; $name = md5(microtime()); $file = $path . DS . $name . '.csv'; $io->setAllowCreateFolders(true); $io->open(array('path' => $path)); $io->streamOpen($filename, 'w+'); $io->streamLock(true); $headerRow = array( 'name', 'sku', 'upc', 'status', 'price', 'special_price', 'description', 'category_ids', 'short_description' ); $io->streamWriteCsv($headerRow); foreach($products as &$product){ $categoryIds = implode(',', $product->getCategoryIds()); $row = array( $product->getName(), $product->getSku(), $product->getUpc(), $product->getStatus(), $product->getPrice(), $product->getSpecialPrice(), $product->getDescription(), $categoryIds, $product->getShortDescription() ); $io->streamWriteCsv($row); } ?>