ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Let's PHPコミュの質問です。 / ブラウザに画像やPDFを直接表示させる方法

  • mixiチェック
  • このエントリーをはてなブックマークに追加
いつも参考にさせていただいております。
タイトルについての質問をさせていただきます。

【環境】
FreeBSD 4.x
PHP 4.3.11

【概要】
サーバBにある画像(PDF)ファイルを、サーバA上で実行するPHPでブラウザに表示させるプログラムです。

// 画像データの取得
exec( "ssh -b.sample.com od -tx1 -Ad /home/tomo_b/test.jpg", &$aryOutput );

// ↑で$aryOutputに格納された16進データを文字列に生成し、packします。
$strBinData = pack( "H*", $strBinData );

// ヘッダと画像データの表示
header( "Content-type: image/jpeg" );

print( $strBinData );


これで画像データの表示には成功しました。


同様の方法で、PDFファイルを試してみたところ、

header( "Content-type: application/pdf" );
header( "Content-disposition: attachment;filename=test.pdf" );
header( "Content-Transfer-Encoding: binary" );

print( $strBinData );

バイナリの内容がそのまま表示されてしまいました。
"test.pdf"をテキストエディタで開いた場合と同様の内容が表示されるので
データの取得には失敗していないと思われます。

また、test.pdfをサーバAに移し、

$strFile = "test.pdf";
$strPath = "/home/tomo_a/{$strFile}";

header( "Content-type: application/pdf" );
header( "Content-disposition: attachment;filename={$strFile}" );
header( "Content-Transfer-Encoding: binary" );

readfile( $strPath );

あるいは

print( file_get_contents($strPath) );

では表示ができた(開く/保存の確認ウィンドウが開く)ので、
ファイルの破損やヘッダの記述ミスは考えられません。


PDFLIBを使わなければ解決できない問題でしょうか?

ご意見を宜しくお願いいたします。
 

コメント(3)

ご回答ありがとうございました。
まずは途中報告です。

バイナリの再構築に若干ミスがあり、ファイルが破損していたことが一番の原因です。

Fire Fox:
PDFの表示/ダウンロードの確認ウィンドウが表示され、
表示、ダウンロードしてのファイル閲覧に成功。
ただし、Acrobatが立ち上がってのファイル閲覧となります。

IE:
やはりファイルの中身(バイナリデータ)がブラウザに表示されます。

そもそも、↑の後者のプログラムも
「ブラウザで直接表示」はできていないですね。。。

もう少し検証を続けます。
 

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Let's PHP 更新情報

Let's PHPのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング