お世話になります。
現在、ユーザーからinput="file"で取得したデータをMYSQLにバイナリで保存し、このデータを出力するコードを作成しています。MYSQLにはバイナリデータ(BLOB形式)とMIME(image/jpeg)が格納されており、これをimg.phpで取得して、headerに送信するとともに表示しております。なお、バイナリデータはユーザから formのinput="file"から取得しております。
一方で、output.phpはこれをimg srcに出力し画像を表示させようとしております。
①しかしながらこの結果、HTML上では定番の小さな写真が割れたようなアイコンが表示され意図したimg描画ができていません。どなたか、
なお、バイナリにまだまだ不案内なため、適切か否かはわからないのですが例えば以下のような文字列になっているのですが、一般的な文字化けの状態に見えるのですが、これが原因なのでしょうか?
�a��hfe�+��#�Qn�ǘ8_ڗ]�����[��(˻�#;p�X~_u?J��BrQ��z3��/�\
②また、phpでユーザーから画像とのファイルを取得する場合、ファイルを取得、保存し、それを出力する方法として、より一般的な方法があれば
ご教示いただければ幸いです。
PHP
1img.php 2 3try { 4$pdo = new PDO($dsn, $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); 5$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 6}catch (PDOException $e){ 7 var_dump($e->getMessage()); 8 } 9 10 try { 11 $stmt=$pdo->query("SELECT picture,mime FROM a_inputDB"); 12$result=$stmt->fetchall(PDO::FETCH_NUM); 13 14}catch(PDOException $e){ 15echo "失敗しました。" . $e->getMessage(); 16} 17 18header("Content-type:".$result[0][1]);//$result[0][1]=image/jpeg 19echo $result[0][0];//$result[0][0]="���[��(˻�#;p�X~_u....割愛 20 ?> 21 22output.php 23 <?php 24echo '<img src="img.php" />'; 25?> 26
PHP
1input.php 2<form class="form" action="" method="post" enctype="multipart/form-data"> 3<div> 4<label>画像を投稿する</label><br /> 5<input type="hidden" name="MAX_FILE_SIZE" value="300000" /> 6<input name="2_picture" type="file" size="35" value="" /> 7</div> 8 9<?php 10// バイナリ 11 $fp = fopen($_FILES["2_picture"]["tmp_name"], "rb"); 12 $imgdat = fread($fp, filesize($_FILES["2_picture"]["tmp_name"])); 13 fclose($fp); 14 $imgdat = addslashes($imgdat); 15 16 // 拡張子 17 $dat = pathinfo($_FILES["2_picture"]["name"]); 18 $extension = $dat['extension']; 19 20 // MIME 21 if ( $extension == "jpg" || $extension == "jpeg" ) $mime = "image/jpeg"; 22 else if( $extension == "gif" ) $mime = "image/gif"; 23 else if ( $extension == "png" ) $mime = "image/png"; 24?> 25 26$dsn = 'mysql:dbname=XXX;host=XXXX'; 27$user = 'XXXX'; 28$password = 'XXXXX'; 29 30try { 31$pdo = new PDO($dsn, $user, $password); 32$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 33}catch (PDOException $e){ 34 var_dump($e->getMessage()); 35 } 36 37 try { 38$pdo->beginTransaction(); 39$stmt=$pdo->prepare("INSERT INTO a_inputDB (picture,picturemim) 40 VALUES(:picture,:picturemime"); 41$stmt->bindValue(':picture',$imgdat,PDO::PARAM_STR); 42$stmt->bindValue(':picturemime',$mime,PDO::PARAM_STR); 43$stmt->execute(); 44$pdo->commit(); 45 46}catch(PDOException $e){ 47$pdo->rollBack(); 48echo "失敗しました。" . $e->getMessage(); 49}

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/05 11:34