回答編集履歴

1 誤コード修正

gongont55

gongont55 score 12

2016/02/11 10:34  投稿

ベストアンサー後ですが、無事に画像を表示することができました。
文字コードを「UTF-8(BOM)」→「UTF-8」に変更したら出力することができました。
ブラウザの文字コードも「UTF-8」です。
コードにもherokuにも問題はありませんでした。
ベストアンサーはすごく迷いましたが、crhgさんにさせていただきます。
hirohiroさんも何回も回答してくださったり、サイトを検索していただいたりしてありがとうございました。m(__)m
---
自分用にまとめると、画像をherokuでmysqlに保存→出力するまでに気を付けることとして、
- .user.ini に upload_max_filesize の値をファイルサイズ以上に設定したファイルをアップロードすること
- max_allowed_packet もファイルサイズ以上に設定すること
- DBのカラムの型をmediumblobにすること
- mysql で使う場合は PDO::PARAM_LOB という型を使うこと
- PDO::PARAM_LOB はストリームで返されないこと
- 文字コードを統一すること
かなぁと。。
show_image.php
```php
<?php
 $pdo = new PDO('mysql:*****);
 $stmt = $pdo->query("SELECT type, imgdat, extension FROM test_table LIMIT 1");
 $stmt->bindColumn(1, $typ, PDO::PARAM_STR, 256);
 $stmt = $pdo->query("SELECT extension, imgdat FROM test_table LIMIT 1");
 $stmt->bindColumn(1, $ext, PDO::PARAM_STR, 256);
 $stmt->bindColumn(2, $dat, PDO::PARAM_LOB);
 
 $result = $stmt->fetch(PDO::FETCH_BOUND);
 $contents_type = array(
   'jpg' => 'image/jpeg',
   'jpeg' => 'image/jpeg',
   'png' => 'image/png',
   'gif' => 'image/gif',
   'bmp' => 'image/bmp',
 );
 $fp = fopen('php://memory', 'r+');
 
 $result = fwrite($fp, $dat,strlen($dat));
 
 if($result == strlen($dat)){
   header("Content-Type: $typ");
   header("Content-Type: $contents_type[$ext]");
   rewind($fp);
   fpassthru($fp);
 }else{
   echo("miss");
 }
 fclose($fp);
 
 $pdo = null;
?>
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る