人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(PHP)http://q.hatena.ne.jp/1142042592 にて質問しましたが、解決に至らなかったため再度質問します。

http://q.hatena.ne.jp/1142042592 での回答を参考に何回かトライしましたが、だめでした。

よろしくお願いします。

●質問者: esecua
●カテゴリ:コンピュータ 趣味・スポーツ
✍キーワード:PHP トライ
○ 状態 :終了
└ 回答数 : 3/4件

▽最新の回答へ

1 ● jouno
●10ポイント

とりあえず何回か回答できるようなので、こちらに再現環境はないのですが、ソースだけ見て回答してみます。

失敗した場合エラーメッセージをそのまま載せていただけるとほかの方も回答しやすいと思うのでよろしくお願いします。引用符がはてなの表示で変換されている場合は半角に戻してください。

if (is_uploaded_file($_FILES['UpFile']['tmp_name'])) {

if ( mb_strpos($_FILES['UpFile']['type'], 'jpeg') ) {

// JPEG画像を読み込む

$im_inp = ImageCreateFromJPEG($_FILES['UpFile']['tmp_name']);

$ix = ImageSX($im_inp); // 読み込んだ画像の横サイズを取得

$iy = ImageSY($im_inp); // 読み込んだ画像の縦サイズを取得

$ox = $resizeX; // サイズ変更後の横サイズ

$oy = $ox;

// サイズ変更後の画像データを生成

$im_out = ImageCreateTrueColor($ox, $oy);

imagecopyresized($im_out,$im_inp,0,0,0,0,$ox,$oy,$ix,$iy);

$im_out = addslashes($im_out);

$im_out = mysql_real_escape_string($im_out);

$sql = "INSERT INTO `hatena` VALUES `gazou` = '".$im_out."' WHERE `number` = '".$yournumber."';";

mysql_query($sql,$con);

echo"アップデート完了!";

// メモリーの解放

ImageDestroy($im_inp);

ImageDestroy($im_out);

exit;

} //jpeg

} //is_uploaded?

◎質問者からの返答

その方法でトライしてみましたが、データベースに格納できているものの、表示すると Resource id #数字 と表示され、画像ファイルが表示できないのです。


2 ●
●70ポイント ベストアンサー

度々失礼いたします。

前回の私の回答は適切ではありませんでした。

なんとなく違和感があったのですが、そのまま回答してしまいました。

申し訳ありません。

imagejpeg()で画像$im_outを一度ファイルに出力し、そのファイルをfopen()、fread()すればご要望の機能を実現できます。

(一度ファイルにするのがダサいのですが、他のやり方が分かりませんでした…。)

例としては、imagecopyresized()の後、以下のようなソースを書き足すと良いはずです。

元のソースの$fpで始まる行からmysql_real_escape_string()を含む行を以下の内容に変更すれば動くはずです。

(サンプルで稼動確認しました。)

// リサイズ後のファイル名を決定
$resized_img_file_name = $_FILES["upfile"]["tmp_name"] . "_after_resize" ;
// imagejpeg()で$im_outをファイルに落とす
imagejpeg($im_out, $resized_img_file_name);
// 画像ファイルをバイナリデータとして読み込む
$fp = fopen ($resized_img_file_name, "rb");
if(!$fp)
{
print("リサイズした画像ファイルを開けませんでした");
exit;
}
$resized_image = fread($fp, filesize($resized_img_file_name));
fclose($fp);
// リサイズ後の画像ファイルを削除
unlink($resized_img_file_name);
// SQL用に特殊文字をエスケープ
$resized_image = mysql_real_escape_string($resized_image);

後は、$resized_imageをSQLのINSERTでDBに挿入すれば良いはずです。

(テーブルの構成が分からなかったため、SQLは修正していません。)

また、mysql_real_escape_string()を使っていれば、addslashes()は不要だと思います。

重複して利用すると問題があったはずです。

(このあたりは定かではありませんので、色々と試してみてください。)

DBの選択までは、「esecuaの日記」上で公開されているソースに記載されていない部分で完了している前提で書きました。

参考になれば幸いです。

もし上手くいかなかった場合、どう上手く行かないのかをコメントでつけてくだされば、時間がある時に改善案を考えてみます。

◎質問者からの返答

以前に続きご丁寧な回答ありがとうございます。

ご回答のソースでリサイズ、データベースの格納、表示などできました。ありがとうございます。


3 ●
●0ポイント

度々失礼いたします。

前回の私の回答は適切ではありませんでした。

なんとなく違和感があったのですが、そのまま回答してしまいました。

申し訳ありません。

imagejpeg()で画像$im_outを一度ファイルに出力し、そのファイルをfopen()、fread()すればご要望の機能を実現できます。

(一度ファイルにするのがダサいのですが、他のやり方が分かりませんでした…。)

例としては、imagecopyresized()の後、以下のようなソースを書き足すと良いはずです。

元のソースの$fpで始まる行からmysql_real_escape_string()を含む行を以下の内容に変更すれば動くはずです。

(サンプルで稼動確認しました。)

// リサイズ後のファイル名を決定
$resized_img_file_name = $_FILES["upfile"]["tmp_name"] . "_after_resize" ;
// imagejpeg()で$im_outをファイルに落とす
imagejpeg($im_out, $resized_img_file_name);
// 画像ファイルをバイナリデータとして読み込む
$fp = fopen ($resized_img_file_name, "rb");
if(!$fp)
{
print("リサイズした画像ファイルを開けませんでした");
exit;
}
$resized_image = fread($fp, filesize($resized_img_file_name));
fclose($fp);
// リサイズ後の画像ファイルを削除
unlink($resized_img_file_name);
// SQL用に特殊文字をエスケープ
$resized_image = mysql_real_escape_string($resized_image);

後は、$resized_imageをSQLのINSERTでDBに挿入すれば良いはずです。

(テーブルの構成が分からなかったため、SQLは修正していません。)

また、mysql_real_escape_string()を使っていれば、addslashes()は不要だと思います。

重複して利用すると問題があったはずです。

(このあたりは定かではありませんので、色々と試してみてください。)

DBの選択までは、「esecuaの日記」上で公開されているソースに記載されていない部分で完了している前提で書きました。

参考になれば幸いです。

もし上手くいかなかった場合、どう上手く行かないのかをコメントでつけてくだされば、時間がある時に改善案を考えてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ