2014-10-14 3 views
0

Я не являюсь экспертом по PHP, поскольку мой прошлый опыт в основном ориентирован на сторону системной инженерии. У меня возникла проблема с PHPExcel, которая дает мне эту ошибку «Невозможно изменить информацию заголовка - заголовки, уже отправленные в строке 1», когда я хочу вывести свой файл XLSX в браузер.PHPExcel вывод в браузер не работает

Вот пример моего кода

$host="localhost"; 
$uname="lol"; 
$pass="lol123"; 
$database = "lol12345"; 
$table="MemReport"; 
$table1="CPUReport"; 
$table2="TrafficReport"; 
$table3="HDDReport"; 


// create a file pointer connected to the output stream 
$output = fopen('Memory.csv', 'w+'); 
$output1 = fopen('CPU.csv', 'w+'); 
$output2 = fopen('Traffic.csv', 'w+'); 
$output3 = fopen('HDD.csv', 'w+'); 

// output the column headings 
fputcsv($output, array('HostName','Date','Time','Percent','TholdDescription')); 
fputcsv($output1, array('HostName','Date','Time','Percent','TholdDescription')); 
fputcsv($output2, array('HostName','Date','Time','Percent','TholdDescription')); 
fputcsv($output3, array('HostName','Date','Time','Percent','TholdDescription')); 

// fetch the data 
mysql_connect($host, $uname, $pass); 
mysql_select_db($database); 
echo mysql_error(); 

$rows = mysql_query("SELECT * FROM $table order by date ASC, Time ASC"); 
echo mysql_error(); 
$rows1 = mysql_query("SELECT * FROM $table1 order by date ASC, Time ASC"); 
echo mysql_error(); 
$rows2 = mysql_query("SELECT * FROM $table2 order by date ASC, Time ASC"); 
echo mysql_error(); 
$rows3 = mysql_query("SELECT * FROM $table3 order by date ASC, Time ASC"); 
echo mysql_error(); 
// loop over the rows, outputting them 
while ($row = mysql_fetch_assoc($rows)) 
fputcsv($output, $row); 
while ($row1 = mysql_fetch_assoc($rows1)) 
fputcsv($output1, $row1); 
while ($row2 = mysql_fetch_assoc($rows2)) 
fputcsv($output2, $row2); 
while ($row3 = mysql_fetch_assoc($rows3)) 
fputcsv($output3, $row3); 


include '/tmp/Classes/PHPExcel/IOFactory.php'; 


$inputFileType = 'CSV'; 
$inputFileNames = array('HDD.csv','Traffic.csv','CPU.csv','Memory.csv'); 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
$inputFileName = array_shift($inputFileNames); 
$objPHPExcel = $objReader->load($inputFileName); 

$objPHPExcel->getActiveSheet()->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); 
foreach($inputFileNames as $sheet => $inputFileName) { 
    $objReader->setSheetIndex($sheet+1); 
    $objReader->loadIntoExisting($inputFileName,$objPHPExcel); 
    $objReader->loadIntoExisting($inputFileName,$objPHPExcel); 
    $objPHPExcel->getActiveSheet()->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); 

}

$loadedSheetNames = $objPHPExcel->getSheetNames(); 
foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) { 
$objPHPExcel->setActiveSheetIndexByName($loadedSheetName); 

$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); 
//var_dump($sheetData); 
//var_dump($sheetData); 

$myfile = "Report.xlsx"; 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 

заголовок ("Content-Disposition: привязанностью; имя файла = $ Myfile"); заголовок ('Cache-Control: max-age = 0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 


} 

любая помощь приветствуется, большая часть моего кода было скопировать и вставить, а затем отредактирован мне известно, также я был в состоянии получить по электронной почте файл XLSX, но просто проблема с отправкой его для загрузки. Я не против читать файл из каталога для загрузки.

С уважением,

Lin

+0

Просто убедитесь, что вы не повторить что-либо перед заголовком функции() на вашем скрипте. Прокомментируйте строки, которые вы что-то повторяете, и попробуйте удалить пробелы или пустые строки в начале вашего файла. – sotoz

+0

Спасибо за ответ, так что даже эхо ошибки не позволяет? – Lin

+0

В общем, вам не разрешено эхо даже не один пробел, поскольку вы отправляете заголовки преждевременно с этим пространством. – sotoz

ответ

0

без пробелов или вкладок, никаких сообщений об ошибках, нет перевода строки символов, без BOM маркеры, никакого другого выхода вообще.

Обратите внимание, что сообщение об ошибке, которое вы видите, указывает, какой файл/строка отвечает за вывод headers already sent by xxx in line 1 .... так вот где искать.

В строке 1 файла, то, скорее всего, что-то до вашего открытия <?php тега, или файл, сохраненный с заголовком BOM

Смежные вопросы