php5.1.6で画像をアップさせるサイトを作っています。

そのサイトへの画像アップは携帯がメインとなると思うのですが、iphoneなどスマートフォンにも対応したいと考えています。
携帯から単に画像をアップさせる方法は
http://q.hatena.ne.jp/1300952161
で紹介していただいた本を参照し理解できています。


アップしてもらう画像は、MySQLに格納してある商品の画像しか投稿されません。
テーブルイメージは以下に示しています。
そこで、何の商品の画像なのか?を投稿された際に判断したいのですが、その方法がわかりません。
イメージ的には、
[<a href="mailto:info@hoge.com">画像メールを投稿する</a>]
というリンク文字に商品IDを引数で埋め込めれば一番いいのですが、そんなことができるんのでしょうか?。


どなたか、何の画像なのか判断(idを紐付け)するアイデアをお持ちの方はいますか?
よろしくお願いします。


テーブルイメージ
id, name
1, hhhhh
2, mmmmm
3, kkkkk
.....

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:
  • 終了:2011/04/12 18:26:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:taroe No.1

回答回数1099ベストアンサー獲得回数132

ポイント15pt
<a href=”mailto:info@hoge.com?subject=(タイトル)">画像メールを投稿する</a>

タイトルに商品IDをいれる

id:seadwell

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

それは考えたのですが、タイトルや本文に記入すると不意もしくは故意に書きかえられる可能性があるので他の方法を模索しています。

2011/04/11 13:51:45
id:asuka645 No.2

回答回数856ベストアンサー獲得回数97

ポイント15pt

なぜMySQLサーバにある画像をクライアント(ケータイ/スマートフォン)からアップロードしなければならないのか、そのあたりの状況が分からないのですが、添付ファイルとサーバにあるファイルが同じものであるかどうかを判断するだけでしたら、md5_file関数を使ってMD5ハッシュ値を比較してやればできます。

id:seadwell

> なぜMySQLサーバにある画像をクライアント

いえ、サーバーに画像は保存されていません。

サーバーには商品idと商品名が登録されています。

商品の画像を撮影し送信してもらい、商品画像と商品名を商品idで紐付けしたいのです。


>ファイルが同じものであるかどうかを判断する

ファイルが同じものか?を比較するのではありません。

2011/04/11 21:13:35
id:tateta No.3

回答回数2ベストアンサー獲得回数0

ポイント15pt

Mysqlに保存されている画像と、メールで投稿される画像が完全に同一であれば、Mysqlに保存されている画像のハッシュと、メールでアップロードされた画像のハッシュを比較するという方法はどうでしょうか。

画像の情報が1bitでも違えば意図したとおりに動かないですが…

id:seadwell

いえ、画像はサーバーにはありません。

送信されて初めて保存されます。


>商品の画像しか投稿されません。

この部分の質問の仕方が誤解を招いていますね。

商品の画像が保存されているのでなく、商品の名前が保存されています。

その名前に対応した画像が送信されるのです。

2011/04/11 16:57:32
id:tdoi No.4

回答回数174ベストアンサー獲得回数75

ポイント30pt

質問で上げている本の内容がよく分からないのですが、

1.クライアントはinfo@hoge.com宛に写真を添付したメールを送信する

2.メールを受信すると、procmailなどで処理をしてプログラムに処理をさせる

3.起動されたプログラムが、メールから画像を取得してアップロード処理をする

という感じでいいでしょうか?

その流れで、かつ、SubjectやBodyに埋め込むことが許されないのであれば、メールアドレスを商品ごとに変えるしかないでしょう。

例えばですが、hhhhhに関する画像をアップロードしてもらうときには、info-1@hoge.comに、mmmmmに関する画像をアップロードしてもらうときには、info-2@hoge.comにメールしてもらう感じです。

これについては、商品が固定かつ少数ならば、個別にメールのエイリアスを設定すればいいでしょうが、今回はそうではなく、動的で多くの商品を扱う必要があると思われます。ここからはメールサーバ次第ですが、正規表現を使ってエイリアスを設定してあげるのが簡単かと思います。

つまり、info-1@hoge.comも、info-2@hoge.comも、info-999999@hoge.comも受信するユーザはinfoにしてしまうのです。

Postfixをお使いでしたら、以下のサイトが参考になるかと思います。

http://blog.honestyworks.jp/blog/archives/193

その上で、受け取ったメールを処理する際に、Toの中身を見て上げれば、どの商品に対する投稿かを判別することができます。


何かの参考になれば。

id:seadwell

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

> という感じでいいでしょうか?

そのような感じです。


Postfixは初めて知りました。

これはいいアイデアですね。

ただ、Xサーバーのレンタルなのです。

2011/04/11 21:02:42
id:asuka645 No.5

回答回数856ベストアンサー獲得回数97

ポイント5pt

タイトルや本文に記入すると不意もしくは故意に書きかえられる可能性があるので他の方法を模索しています。

サーバに画像が無く、送信者が間違えたIDを送ってくるとしたら、それを防止する方法はないと思いますが。

id:tama213 No.6

回答回数486ベストアンサー獲得回数30

ポイント30pt

商品IDにチェックサムを付与しておけば改ざんされたらすぐにわかりますよ

http://www.phppro.jp/phpmanual/php/function.crc32.html

id:seadwell

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

メール本文でも堂々と付与しても改ざん対処を行えば問題ないということですか?

こんな感じでしょうか?

1.メール本文に本IDとcrc32(ID)の2つを添付する。

2.送信されたメールを解析し、送られてきた2つのIDが一致するか?

3.一致しなければ破棄

4.一致すれば本IDでDB検索し、紐付けし画像を登録。

2011/04/11 23:30:21
  • id:tdoi
    メールサーバの設定を変更できず、単一のメールアドレスで受信するしかないとすれば、tama213さんがおっしゃるように、改ざん検出可能なIDを埋め込んでおくぐらいしかできないかもしれないですね。
  • id:seadwell
    コメントありがとうございます。
    tama213さんの提案で進めています。
    しかし、tdoiさんの回答も勉強になりました。
    ありがとうございました。

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

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

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

回答リクエストを送信したユーザーはいません