web-dev-qa-db-ja.com

TCPDF&mPDFエラー:一部のデータはすでにブラウザに出力されており、送信できませんPDF file

問題:

TCPDFとmPDFのエラー:一部のデータはすでにブラウザに出力されており、送信できませんPDFファイルTCPDFでエラーを修正することを諦め、mPDFをインストールしただけで同じエラーが発生しましたドキュメントをブラウザにレンダリングしようとしています。ドキュメントを問題なく保存し、取得時にブラウザに表示することができます。

さらに、このエラーは、開発サーバーからホストサーバーに切り替えた後にのみ発生しました。 DEVサーバー(DEVサーバー= WAMPSERVER、PRODサーバー= Hostgator Linux)で正常に動作します。

トラブルシューティング:

この問題に関するインターネット上の他の多くの議論を読みましたが、空白に関連する問題は見つかりませんでした。リクエストを次のように要約しました。

<?php
ob_start(); 
$html = "Hello World";
include("../mpdf.php");
$mpdf=new mPDF(); 
$mpdf->WriteHTML($html);
$mpdf->Output();
ob_end_clean();
?>

WriteHtmlの前にob_clean()メソッドを使用してTCPDFで同じ概念を試しました。すべての場合で同じエラー(これは空白に関連する問題ではないことを全員に保証できます-エディターによって挿入されている奇妙な文字がないことを確認するためにファイルを16進数で表示しました)。

考えられる手がかり:

MPDFライブラリとクラスとフォルダ全体をアプリケーションフォルダ(symfonyプロジェクト)内からではなくpublic_htmlフォルダに移動したときに、何が起こっているのかを最終的に知ることができました。このシナリオでは、ブラウザーでサンプルページを指定すると、エラーなしで問題なくレンダリングされました(そして、非常に高速でした)。したがって、私はそれが機能することを知っており、コードまたはインストール(物事のmPDF/TCPDF側)に関して空白関連の問題やその他の関連する問題がないことを知っています。これは、symfonyが何らかのヘッダーを挿入している(clearHttpHeaders()を使用して削除しようとした)か、PHP INIまたはCONFIG設定PRODサーバーのどこかにありません。

誰かがここで何が起こっているのかについて何か考えを持っていますか?

更新:ストリームダンプ:

Request URL:http://www.example.com/mpdf
Request Method:GET
Status Code:200 OK

Request Headers
GET /mpdf HTTP/1.1
Host: www.example.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: __utma=44708724.1463191694.1383759419.1383759419.1383765151.2; __utmz=44708724.1383759419.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=9c7c802200b9d8eefe718447755add5f; __utma=1.813547483.1383767260.1385127878.1385130071.38; __utmb=1.7.10.1385130071; __utmc=1; __utmz=1.1383767260.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

Response Headers
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:Keep-Alive
Content-Type:text/html
Date:Fri, 22 Nov 2013 14:59:52 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive:timeout=5, max=75
Pragma:no-cache
Server:Apache
Transfer-Encoding:chunked

何も私に飛び出していません...他の考えはありますか?

7
Patrick

おそらくそれはBOMマーカーです。それを削除するには、IDEを使用してください。他のホットフィックスは、次のようになります。

<?php

$html = "Hello World";
include("../mpdf.php");

ob_clean(); // cleaning the buffer before Output()

$mpdf=new mPDF(); 
$mpdf->WriteHTML($html);
$mpdf->Output();

?>
4
biesior

PHP pdf-> outputの前に警告が発行された可能性があります。警告テキストはクライアントのブラウザに送信されるため、ファイルを送信できません。
警告レベルがDEVとPRODで同じでない場合は、動作の違いを説明している可能性があります。

私の場合、TCPDFを使用すると、「date()はシステムのタイムゾーン設定に依存するのは安全ではありません...」などの多くの警告が表示され、「一部のデータは既にブラウザに出力されています。送信できません。 PDF」。
phpソースコードに関数date_default_timezone_set()を追加すると、警告とエラーが解決しました。

2
tetorea

同じ問題があり、$ pdf-> output()の前に次の行を追加します。

error_reporting(E_ALL);

その後、いくつかのファイルにBOMがあることがわかりました。また、ブラウザに警告メッセージが送信されます。

幸運 !!

よろしく

1
Nicolas400

HTMLコードの結果で、TCPDFを作成するために出力するエラーがあるために発生する可能性があります...

OR

上記が機能しない場合は、TCPDFのクラスファイルでCharsetをUTF-8として設定してみてください。問題が解決する可能性があります...

このタイプのエラーは1週間前に私のプロジェクトで発生していたため...

0
Jignesh Vagh

ob_clean();の前にinclude("../mpdf.php");を使用してみてください。

0
Sawan

ページの最初に含めたはずのファイルをすべて削除します。私の場合、それはデータベースに接続していたファイルでした。それは私のために働いた。 (@ Nicolas400からのヒント)

0