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 で消して処理を抜ける方法ですが、さらに、削除に成功しなかったら・・・・。

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

回答の条件
  • 1人2回まで
  • 登録:2009/06/30 12:10:50
  • 終了:2009/07/07 12:15:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/06/30 12:19:09

ポイント35pt

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


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

id:seadwell

それはいい考えですね。

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

早速試してみます^^/

2009/06/30 12:26:11
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/06/30 12:37:44

ポイント35pt

(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で始まるファイルを削除してやれば済むのでメンテも楽になります。

id:seadwell

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

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

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

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

2009/06/30 13:14:11
  • id:seadwell
    コメントでのサポートありがとうございます。
    rename 関数の考えが間違っていたらスミマセン。

    mv は判ったのですが、思惑のファイルは3つあるわけですから、ファイル名書き換えは3つ繰り返さないといけないと思いました。
    これも、2つ成功し1つ失敗した場合、もしくは、1つ成功し2つ失敗した場合の可能性がでてくると考えたのです。
    それだったら、直接 _FILE_UPLOAD_DIR に本番のファイル名で書いているのと変わりないのでは???と・・・。
  • id:kmond2
    > kn1967 2009-06-30 13:31:08
    > これが混乱させてしまった原因でしょうか・・・。

    違うよ。
    貴君の回答はif文で場合分けを複雑にしたあげくに、仮の名前を付けるという余計な処理をしているから、何ら解決になっていないということだよ。
  • id:kmond2
    > kn1967さんへ
    都合が悪くなるとコメントを削除するのはやめにしません?
    あとから来た人は話の流れが見えなくなって、困ると思うのですよ。
  • id:kmond2
    結局、何にもフォローもなく35ポイントが浪費されました。
    そういえば、以前、こんなコメントをしていた人がいましたね。このコメントも削除されてしまいましたが。

    > kn1967 2009-05-26 10:22:43
    > 間違った回答をしたときにはポイントを返すようにしています。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません