1

我正在构建一些报告,我的代码在本地主机上运行良好,但在服务器上出现错误,我应该如何解决这个问题......

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /localhost/prepare.php:1) in /localhost/prepare.php on line 2
Unable to stream pdf: headers already sent

这是prepare.php

<?php
session_start();
if(isset($_SESSION['usercode']) && isset($_GET['id']))
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://localhost/report/formats/'.$_GET['id'].'.php?id='.$_SESSION['usercode']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $st = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
    $my_html = curl_exec($ch);
    if($st==200)
       $my_html="Oops! Something went wrong...$st";
    curl_close($ch);

    require_once("./domppdf/dompdf_config.inc.php");
    $dompdf = new DOMPDF();
    $dompdf->load_html($my_html);
    $dompdf->render();
    $dompdf->stream("report.pdf", array('Attachment'=>'0'));
}
?>
4

1 回答 1

2

出现此错误是因为您在开始会话之前已将 ANYTHING 输出到用户客户端(浏览器)。

从您的代码来看,我认为它是一个“字节顺序掩码”(也称为 BOM),通常用于确定多字节符号的第一个字节是 MSB 还是 LSB。

此代码在任何支持它的文本编辑器中都是不可见的,并且在那些不支持它的文本编辑器中将显示为带有问号的菱形。

如果您不知道是否启用了 BOM,请随时使用十六进制编辑器打开源文件并检查第一个字符是否已启用或<?php其他内容。

一个好的文本编辑器将允许您选择编码。UTF8 without BOM是个不错的选择,Notepad++在我看来是个不错的编辑器。

于 2013-03-25T20:21:12.437 回答