sasapy.com
メール投稿した画像をサーバに保存する方法
- 2010/09/03 14:39
- programming
※この記事は,ウェブアプリ(プログラミング)に関するページです
興味のある方のみ御覧ください。
iPhone(iPod touch)のSafariでは
アップロードフォームが無効化されています。
iphoneから,自分のレンタルサーバの,指定するディレクトリへ
ファイル名を指定してアップロードすることは困難です。
(800円出すならば,FTP On The Goで片付ける手もあります)
また,メールし放題のプランに入っている不肖の身として
携帯からのアップロードは,写メですれば無料ということもあり
メールから自レンタルサーバに画像をアップロードする
PHPスクリプトを書くことにしました。
動作確認はXREAサーバ(PHP 5.25,Apache 1.3.37)で
セーフモードでの実行で確認しています。
必要要件は,PEARのNet_POP3,Mail_MimeDecodeがインストールされていること。
PHP4.3以上ぐらいであれば動作すると思うのですが
確認環境がないこともあり,保証はしません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | <?php //データの保存ディレクトリ(最後に必ず「/」を入れる) //あと適切なパーミションを与えておく。 $dir='/***/public_html/pictures/'; //gmailのアカウント情報 $gmail_name='あなたのアカウント名@gmail.com'; $gmail_pwd='gmailのパスワード'; // ↑設定ここまで↑ //PEARの読み込み require_once 'Net/POP3.php'; require_once 'Mail/mimeDecode.php'; $pop3=&new Net_POP3(); //gmailに接続 if($pop3->connect('ssl://pop.gmail.com',995)){ //gmailへのログイン処理 if($pop3->login($gmail_name,$gmail_pwd)){ //未読メールリストの取得 $list=$pop3->getListing(); //未読メールを一件ずつ処理 for($i=0;$i<count($list);$i++){ //メールデータを取得 $msg=$pop3->getMsg($list[$i]['msg_id']); //MAIL_mimeDecodeの初期化 $decoder=new Mail_mimeDecode($msg); //パラメータの設定 $structure=$decoder->decode( array( 'include_bodies'=>true, 'decode_bodies'=>true, 'decode_headers'=>true ) ); if(file_exists($dir.$filename)){ //die('重複ファイルがあるので処理を終了します。'); } //マルチパートを1パートずつ処理 foreach($structure->parts as $parts){ switch(strtolower($parts->ctype_secondary)){ //保存除外項目 //(jpegを保存したくなければcase 'jpeg':を追加) case 'plain': case 'html': break; //それ以外は保存 default: /*今回は件名にファイル名を指定している設定 処理を簡潔にするために半角英数記号のみ使うことを想定*/ //件名を取得 $filename=$structure->headers['subject']; //保存処理 $fp=fopen($dir.$filename,'w+'); fputs($fp,$parts->body); fclose($fp); //1メールにつき1ファイル添付の設計なので //このメールの処理は終了(foreachレベルまでbreak) break(2); } } if(file_exists($dir.$filename)){//ファイルが保存できている //メールをサーバから削除 $pop3->deleteMsg($list[$i]['msg_id']); //メッセージの表示 echo $filename.'の保存に成功しました'; }else{//ファイルが保存できていない場合 //メッセージの表示 echo $filename.'の保存に失敗しました'; } } }else{ echo 'gmailへのログインに失敗しました。'; } }else{ echo 'gmailへの接続に失敗しました'; } ?> |
設定する項目は,4行目の保存ディレクトリと,
7,8行目のgmailアカウント情報です。
処理を煩雑にさせないためにも,
専用のgmailアカウントを用意するのが良いと思います。
あとPOP3アクセスを有効にするのをお忘れないように。
このgmailアカウントに
ファイルを1つのみ添付し,件名にファイル名を指定
することで,ファイルをアップロードするような仕様としています。
件名に「test.jpg」と指定して添付送信すれば
test.jpgがサーバに保存されます。
42行目のコメントアウトを外してもらえれば,重複するファイルがあった場合
保存しなくなります。
察しの良い方は気づかれたかも知れませんが,
4行目の$dirをpublic_htmlレベルまでにしておいて,
件名で「pictures2/test.jpg」とすれば
異なるディレクトリへのアップも可能です。
1メール複数ファイルの添付や,元ファイル名を使っての保存は
スクリプトが煩雑になるため,今回は採用しませんでした。
これをcronで定期実行すれば,メールで画像アップロードできますし
cronが使えない環境であれば,画像をアップしたあと,
Safariなり携帯なりで,ページにアクセスしてPHPを実行すれば良いことです。
投稿者を限定したい場合は,PHPのスクリプトに組み込むよりも
gmailのフィルター機能で投稿元アドレスを限定すれば良いと思います。
came back to Saga
佐賀に帰ってきました。
佐賀から帰ってくるときの車窓。
写真的には失敗写真なんですけどね。
車内の弱い光が,外の強い光と対比してて
個人的にはとっても好きな一枚
あと,個人的に好きな,徳山の近辺
(いずれも車内から撮影)
徳山駅の前後には大カーブがあって
新幹線は減速して通過するんですが,
北側(市街地側)と南側(コンビナート・港側)が大きく風景が違って,
夜になるとコンビナートがキレイなんだ。新幹線で一番好きな光景。
車窓というのは,やはり良いものです。
佐賀に戻ってきて,現実に引き戻された感がとっても強い
勉強しなきゃ
もう長月です
こんばんは
9月になりましたね
みとまを離れ,
産婦のQBをこなしてる
ささです。
みとまは,一部方面で,絶大な支持を受けているのは
周知の事実だとは思うのですが。
みとまの良いところ,QBの良いところというのは
それぞれあると思うのですよね。
だから,みとまじゃなきゃダメ,とか
QB(あるいはアプローチ)じゃないとダメ,とか
そういうことはないのだと思います。
各人の目的や好みに合わせて
使い分けていくことが一番大切なのだと思います。
○○じゃないとダメという生き方は確かに楽ですが,
自分の可能性を狭めてしまうのだと思います。
自分の能力が最大限発揮される方法を見つけられると
良いですね。
もみド!?
- 2010/08/29 21:45
- Chat
広島にて,
もみド!?
なるものを発見。
もみじまんじゅう風ドーナッツ
のことだそうです。
これ,広島県限定メニューだそう。
中はこんな感じ
ドーナッツの生地にクリームが挟まって
普通に美味しかった
しかし,もみじまんじゅうとの関連性は・・・不明(笑)
もみド
果たして流行るのでしょうか(笑)
新システムに移行しました。
- 2010/08/26 18:26
- Chat
今まで4年間,Movable Typeというブログシステムを使ってましたが
色々な事情を勘案して,WordPressというシステムに移行しました
まず,iPod touchでブログ作成・編集・管理できるアプリが
WordPressにはあること (Movable Typeにはない)
↑ こんな感じでiPod touchのアプリから簡単に管理可能
メールでの投稿が簡単に設定可能なこと。
(Movable Typeは色々設定が大変)
そして,ブログのiPhone / iPod touchへの対応が
プラグインで簡単に実現できること。
↑ こんな感じでiPod touch / iPhoneから見れる
決定的だったのは,システムが軽く動作すること
Movable Typeではコメントの投稿に不具合があったこと。
これらの理由から,WordPressに移行しました。
しばらく移行作業を行うため,
つながりにくかったり,ページの表示が乱れる
こともございますが,どうぞご了承ください。
なお,ブログのURL(アドレス)や,従来の記事のURL,
RSSやAtomのフィードのURLは一部変更されています。
ご留意ください。
- 検索
















