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

php5にて画像をアップロードする処理についての質問です。
ひとつの画像から、違うサイズの画像を数種類作成し _FILE_UPLOAD_DIR に格納したいのですが ・・・。
エラー処理でつまづいています。

--- 1
$file_name= date("YmdHis");
$src= @imagecreatefromjpeg($img1tmp);

--- 2
$dst= imagecreatetruecolor($width_m,$height_m);
imagecopyresized($dst, $src,0,0,0,0, $width_m, $height_m, $width_o, $height_o);
$boRtn= imagejpeg($dst, _FILE_UPLOAD_DIR.$file_name ."_m" .$extension, 100);
if (!$boRtn){
$message="アップロードに失敗しました。";
}

各変数は別のところで計算済みです。
違うサイズのファイルを3つ作成したいため、現在は、上記2の処理を3っつ並べて書いていますが、2つ成功し1つ成功しなかった場合、もしくは、1つ成功し2つ失敗した場合について思案中です。
今考えているのは、メッセージが入っていたら同じファイル名の画像を unlink で消して処理を抜ける方法ですが、さらに、削除に成功しなかったら・・・・。

何かいい方法がありますか?

●質問者: seadwell
●カテゴリ:ウェブ制作
✍キーワード:MESSAGE SRC ひとつ アップロード エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

_FILE_UPLOAD_DIR に直接格納するのではなく、tmpfiletempnamでテンポラリファイルを作成し、作成に成功したら _FILE_UPLOAD_DIR に移動してはどうでしょう。


作成または移動に失敗したらテンポラリ画像を unlink すればよいですし、最悪、一時ファイルが残るのはテンポラリディレクトリなので、何かのタイミングで一掃すればいいでしょう。

◎質問者からの返答

それはいい考えですね。

tmpfileなんて考え付きもしませんでした。

早速試してみます^^/


2 ● kn1967
●35ポイント

(1)1つ成功して2つ失敗などへの対応策

1個目

if (!$boRtn){ $err += 1; }

2個目

if (!$boRtn){ $err += 10; }

3個目

if (!$boRtn){ $err += 100; }

3つが終わったら

if ($err > 0) { $message="アップロードに失敗しました。"; }

ここでは単純に > 0 だけの判定にしましたが、

処理を分ける必要がある場合は、それぞれの桁の値で判別するようにしてください。

(ここでは十進数を使いましたが2進数などでももちろん可ですし、

ビット演算を使ってもよろしいでしょう。使いやすい方法をチョイスしてください。)


(2)unlink失敗

保存用のファイル名で直接ファイル作成するのではなく、

一旦、仮の名前で作成し、成功の暁にはmvで本来の名前に代えます。

仮の名前を”temp本来の名前.jpg”などとしておけば、仮に消し損ねた場合でも、

定期的にtempで始まるファイルを削除してやれば済むのでメンテも楽になります。

◎質問者からの返答

丁寧な回答ありがとうございます。

> 成功の暁にはmvで本来の名前に代えます。

名前の書き換えに失敗した場合はどうなるのですか?

処理が複雑化するだけで、根本的な解決にはならない気がするのですが・・・。

関連質問


●質問をもっと探す●



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