无法传输pdf:标头已经在托管后发送了codeigniter
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法传输pdf:标头已经在托管后发送了codeigniter相关的知识,希望对你有一定的参考价值。
有人能帮我吗?我在codeigniter中使用dompdf
,我正在尝试所有解决方案,然后没有人可以解决我的问题。当使用localhost没有问题,托管后有一个错误Unable to stream pdf: headers already sent
请帮助我,我还在学习。
这是我的控制器Laporanpdf.php
`<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Laporanpdf extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('model_laporan');
$this->load->library('dompdf_gen');
}
public function index(){
$data['title'] = 'Cetak Laporan Kinerja'; //judul title
if($this->session->userdata('level')=='1-Admin'){
$data['pengguna'] = $this->model_laporan->pengguna_admin(); //query model
$data['kinerja'] = $this->model_laporan->kinerja_admin(); //query model
$data['awal'] = strtotime($this->input->get('awal'));
$data['jbtn_atasn'] = $this->input->get('jbtn_atasn');
$data['nip_atsn'] = $this->input->get('nipeg');
$data['pangkat_atsn'] = $this->input->get('pngkat');
$data['gol_atsn'] = $this->input->get('gol');
}else{
$data['pengguna'] = $this->model_laporan->pengguna_else(); //query model
$data['kinerja'] = $this->model_laporan->kinerja_else(); //query model
$data['jbtn_atasn'] = $this->input->get('jbtn_atasn');
$data['nip_atsn'] = $this->input->get('nipeg');
$data['pangkat_atsn'] = $this->input->get('pngkat');
$data['gol_atsn'] = $this->input->get('gol');
}
if($this->session->userdata('level')=='1-Admin'){
if ($this->model_laporan->kinerja_admin()==null){
//pesan error
echo "<script>alert('Kinerja dengan tanggal tersebut tidak tersedia. Silahkan masukan tanggal yang sesuai.');
window.location='/kinerja/index.php/kinerja';
</script>";
exit();
} else {
$this->load->view('v_cetak', $data, TRUE);
}
}else{
if ($this->model_laporan->kinerja_else()==null){
//pesan error
echo "<script>alert('Kinerja dengan tanggal tersebut tidak tersedia. Silahkan masukan tanggal yang sesuai.');
window.location='/kinerja/index.php/kinerja';
</script>";
exit();
} else {
$this->load->view('v_cetak', $data, TRUE);
}
}
$paper_size = 'A4'; //paper size
$orientation = 'potrait'; //tipe format kertas
$html = $this->output->get_output();
$this->dompdf->set_paper($paper_size, $orientation);
//Convert to PDF
$this->dompdf->load_html($html);
$this->dompdf->render();
$this->dompdf->stream("laporan.pdf", array('Attachment'=>0)); //preview pada browser
}
}`
这是我放入应用程序/库的Dompdf_gen.php
`<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Dompdf_gen {
public function __construct() {
require_once APPPATH.'third_party/dompdf/dompdf_config.inc.php'; // @version 0.5.1.htischer.20090507
$pdf = new DOMPDF();
$CI =& get_instance();
$CI->dompdf = $pdf;
}
}`
答案
请检查您的错误日志。如果在dompdf尝试渲染输出之前生成任何警告或其他输出,则它将失败。解决您在日志中找到的任何错误,然后重试。
在其他一个类中关闭'?>'标记后,其他可能的原因可能是空行。避免在任何模型/控制器/库中使用关闭的php标记,因为它们是不必要的,并且可能导致这样的问题。
如果您无法找到导致此问题的问题,作为最后的尝试,您可以尝试使用输出缓冲来阻止任何泄漏(请参阅:http://php.net/manual/en/book.outcontrol.php)。
以上是关于无法传输pdf:标头已经在托管后发送了codeigniter的主要内容,如果未能解决你的问题,请参考以下文章
ERR_HTTP_HEADERS_SENT - Express:标头在发送到客户端后无法设置,我该如何解决这个错误?