-1

私は newdesign.pdf という名前の pdf ファイルを持っています。これを以下のコードで提供しています。自分のマシンでは問題ありませんが、サーバーにアクセスすると、PDF ファイルを開くのではなく、文字化けしたすべての PDF ソース テキストがブラウザに表示されるだけです。

これは私のコードです:

header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Length: ' . filesize("newdesign.pdf"));
// to open in browser
header('Content-Disposition: inline; filename=' . basename("newdesign.pdf"));
readfile("newdesign.pdf");

そして、これは出力の始まりです:

Warning: Cannot modify header information - headers already sent by (output started at /home/zeejfl5/public_html/ui_test/savedesign.php:8) in /home/zeejfl5/public_html/ui_test/savedesign.php on line 71
%PDF-1.4 1 0 obj << /Title (��) /Creator (��) /Producer (��wkhtmltopdf) /CreationDate (D:20120903012618-07'00') >> endobj 3 0 obj << /Type /ExtGState /SA true /SM 0.02 /ca 1.0 /CA 1.0 /AIS false /SMask /None>> endobj 4 0 obj [/Pattern /DeviceRGB] endobj
 8 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 5 0 obj << /Type /Page /Parent 2 0 R /Contents 9 0 R /Resources 11 0 R /Annots 12 0 R /MediaBox [0 0 454 227] >> 
endobj 11 0 obj << /ColorSpace << /PCSp 4 0 R /CSp /DeviceRGB /CSpg /DeviceGray >> /ExtGState << /GSa 3 0 R >> /Pattern << >> /Font << /F6 6 0 R /F7 7 0 R >> /XObject << >> >> endobj 12 0 obj [ ] endobj 9 0 obj << /Length 10 0 R /Filter /FlateDecode 
>> stream x��[M��0��W̹`E}YPzhh=B=�J�۲$K�=��wl'Y9�d74�F��$��4�����������t��v:J*���[5,Vb k13�m۵�

Adobe Reader を使用して開く場合、私の PDF ファイル自体は問題ありません。しかし、ユーザーが閲覧できるようにブラウザーで開くにはどうすればよいでしょうか。私のローカル マシンでは問題なく動作するので、コードに問題はないと思います。スクリプトをサーバーにアップロードしたときにのみ動作します。

4

2 に答える 2

1

ヘッダーが送信される前にエコーがない場合は、php ファイルを確認してください。ヘッダーの前にデータがブラウザーに送信された場合、ヘッダーは役に立ちません。

于 2012-09-03T08:34:17.170 に答える
0

PDF ファイルの前に少なくとも 1 文字がページにエコーされるため、PHP はこのエラー メッセージを表示します。あなたの場合、echoページに何かを明示的に追加していませんが、PHP エンジンには追加されています。

PHP をローカルでセットアップする方法とサーバーでセットアップする方法には違いがあります。サーバーのファイルでより厳密なレベルが定義され
ているように見えます。error_reportingphp.ini

(このテーマの詳細: http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors )

PHP の警告を完全に無効にすることで、動作を確認するだけでこれを解決できます。
<?php ini_set('display_errors', 0); ?>
しかし、これは長期的な解決策ではありません。

これを完全に修正するには、の8行目と71行目/home/zeejfl5/public_html/ui_test/savedesign.phpを調べて、PHP エンジンがその警告をスローしている場所を特定します。

于 2012-09-03T09:56:16.570 に答える