携帯から画像をWEBサーバにアップさせたいです。

以下URLのように画像の参照先を選んでサーバにアップする機能はcgiでしょうか?詳しく実現方法を教えてください。
http://mixi-tips.jp/function/images/diary/3_1.gif
※あくまで携帯からの実現方法です。PCからの方法は求めていません。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/09/12 07:41:16
  • 終了:2009/09/13 04:31:19

ベストアンサー

id:ymlab No.3

ymlab回答回数506ベストアンサー獲得回数332009/09/13 01:56:57

ポイント100pt

スクリプト言語を使います。

別にcgi(perl)でもOKですし、PHPでもOKです。

最近はrubyもありかと思います。

http://www.aimix.jp/cgi/acccgilibupfile.html

http://plog.pya.jp/program/php/lesson11/sample01.html

http://www.openspc2.org/reibun/Ruby/cgi_form/005/



最近PHPで携帯から画像をアップロードする仕事をしましたので、

ソースコードを書いておきます。

やっていることはPCでのアップロードと変わらないと思います。

ただし、アップロードした後で、携帯サイトでみることを考えて、

圧縮をしていますが。

 1 <?php

 2     //画像をアップロードする.

 3     /** {{{*/

 4     for ( $iCounter = 1; $iCounter < count($imagealt)+1; $iCounter++ ) {

 5         //if ( $imageName[$iCounter] != "" ) {

 6         if ( $_FILES["image".$iCounter]['name'] != "" ) {

 7             //画像のアップロードは、空白ならなにもしない。

 8         

 9             $tmp = "image".$iCounter;

10             $extension = strtolower( strrchr( $_FILES["$tmp"]['name'], '.'));

11             if ( $extension == ".jpg|| $extension == ".png){ 

12                 //指定された拡張子以外はアップロードしない

13                 if ( is_uploaded_file( $_FILES["$tmp"]['tmp_name'] ) ) {

14                     //アップロード

15                     //ファイルのおき場所は、月日10*ダイアリーカウント+$iCounterとしよ。

16                     $localfilename = 10*$diarycount+$iCounter.$extension;

17                     $filepath = getcwd();

18                     $dd = $day;

19                     if ( strlen( $dd ) < 2 ) {

20                         $dd = "0".$dd;

21                     }

22                     $filepath .= "/../db/diary/${year}-${month}/img/$dd$localfilename";

23                     //$directorypath = getcwd();

24                     //$directorypath .= "/../db/diary/${year}-${month}/img/";

25                     //画像を圧縮する場合・・。

26                     if ( $_REQUEST["iscompress".$iCounter] == "on) {

27                         //画像を圧縮してアップロードする.

28                         $temp = $_FILES["$tmp"]['tmp_name'];

29                         createFiles( $temp, $filepath, $extension, 640 );

30                     } else {

31                         //画像を圧縮せずにアップロードする.

32                         move_uploaded_file( $_FILES["$tmp"]['tmp_name'], $filepath );

33                     }

34                     $imageUrl[$iCounter] = "${year}-${month}/img/$dd$localfilename";

35                     chmod($filepath, 0666);

36

37                     //どちらにしても、携帯電話用の画像はアップロードする.

38                     $filepath_s = getcwd();

39                     $localfilename = 10*$diarycount+$iCounter."_s".$extension;

40                     $filepath_s .= "/../db/diary/${year}-${month}/img/$dd$localfilename";

41                     createFiles( $_FILES["$tmp"]['tmp_name'], $filepath_s, $extension, 160 );

42                     chmod($filepath_s, 0666);

43                     //最近の携帯電話は、解像度が大きいので中くらいのサムネイル画像も作っておく。

44                     $filepath_tiny = getcwd();

45                     $localfilename_t = 10*$diarycount+$iCounter."_t".$extension;

46                     $filepath_tiny .= "/../db/diary/${year}-${month}/img/$dd$localfilename_t";

47                     createFiles( $_FILES["$tmp"]['tmp_name'], $filepath_tiny, $extension, 320);

48                     chmod($filepath_tiny, 0666);

49                 }

50             }

51         } else {

52             //アップロードされている状態で、さらに変化をさせなかったので、

53             //そのままURL情報を残しておく.でも削除ボタンがOnの時は、情報を消す.

54             if ( $imageIsDelete[$iCounter] != "on) {

55                 $imageUrl[$iCounter] = _hs($_REQUEST["imageurl$iCounter"]);

56             } else {

57                 //削除する.

58                 $x = _hs($_REQUEST["imageurl$iCounter"]);

59                 $url = "../db/diary/".$x;

60                 $imageUrl[$iCounter] = "";//まずURL情報を消す.

61                 //アップロードされたファイルを削除する.

62                 chown($url, "nobody");

63                 chmod($url, 0777);

64                 unlink($url);

65

66                 //サムネイル画像もあれば削除する.

67                 $urls_ex = strrchr( $url, '.);//携帯画像の拡張子

68                 $a = substr($url, 0, strlen($url)-strlen($urls_ex));

69                 $a .= "_s";

70                 $a .= $urls_ex;

71                 if ( file_exists( $a ) ) {

72                     chown($a, "nobody");

73                     chmod($a, 0777);

74                     unlink($a);

75                 }

76             }

77         }

78     }

id:inoue5231

コードまで書いていただきありがとうございます。

とても参考になりました。これで作ってみます。

2009/09/13 04:28:58

その他の回答(2件)

id:chrono1742 No.1

chrono1742回答回数91ベストアンサー獲得回数132009/09/12 09:40:54

ポイント25pt

携帯から画像ファイルをメール添付して、受信したサーバ側で処理することになります。

したがって、サーバ側にメール受信サーバ(POP3)と、スクリプト言語が走る環境が必要です。

下記のようなスクリプトが販売されています。

http://www.kujirakun.com/upload2.html

id:inoue5231

mixiで写真をアップした場合メールを送っているようには見えなかったのですが…

携帯のブラウザからメールを送っているという事ですかね

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

追記 検索していたら見つけました。xhtmlのinput要素type="file"で実現出来るようです。

まだ他の方法も募集します。

2009/09/12 16:00:27
id:chrono1742 No.2

chrono1742回答回数91ベストアンサー獲得回数132009/09/12 21:06:50

> xhtmlのinput要素type="file"で実現出来るようです


それだと、古い携帯では使えませんよ。

(参考)http://q.hatena.ne.jp/1189816353

id:inoue5231

3Gに対応していれば十分だと考えています。

2009/09/13 04:20:40
id:ymlab No.3

ymlab回答回数506ベストアンサー獲得回数332009/09/13 01:56:57ここでベストアンサー

ポイント100pt

スクリプト言語を使います。

別にcgi(perl)でもOKですし、PHPでもOKです。

最近はrubyもありかと思います。

http://www.aimix.jp/cgi/acccgilibupfile.html

http://plog.pya.jp/program/php/lesson11/sample01.html

http://www.openspc2.org/reibun/Ruby/cgi_form/005/



最近PHPで携帯から画像をアップロードする仕事をしましたので、

ソースコードを書いておきます。

やっていることはPCでのアップロードと変わらないと思います。

ただし、アップロードした後で、携帯サイトでみることを考えて、

圧縮をしていますが。

 1 <?php

 2     //画像をアップロードする.

 3     /** {{{*/

 4     for ( $iCounter = 1; $iCounter < count($imagealt)+1; $iCounter++ ) {

 5         //if ( $imageName[$iCounter] != "" ) {

 6         if ( $_FILES["image".$iCounter]['name'] != "" ) {

 7             //画像のアップロードは、空白ならなにもしない。

 8         

 9             $tmp = "image".$iCounter;

10             $extension = strtolower( strrchr( $_FILES["$tmp"]['name'], '.'));

11             if ( $extension == ".jpg|| $extension == ".png){ 

12                 //指定された拡張子以外はアップロードしない

13                 if ( is_uploaded_file( $_FILES["$tmp"]['tmp_name'] ) ) {

14                     //アップロード

15                     //ファイルのおき場所は、月日10*ダイアリーカウント+$iCounterとしよ。

16                     $localfilename = 10*$diarycount+$iCounter.$extension;

17                     $filepath = getcwd();

18                     $dd = $day;

19                     if ( strlen( $dd ) < 2 ) {

20                         $dd = "0".$dd;

21                     }

22                     $filepath .= "/../db/diary/${year}-${month}/img/$dd$localfilename";

23                     //$directorypath = getcwd();

24                     //$directorypath .= "/../db/diary/${year}-${month}/img/";

25                     //画像を圧縮する場合・・。

26                     if ( $_REQUEST["iscompress".$iCounter] == "on) {

27                         //画像を圧縮してアップロードする.

28                         $temp = $_FILES["$tmp"]['tmp_name'];

29                         createFiles( $temp, $filepath, $extension, 640 );

30                     } else {

31                         //画像を圧縮せずにアップロードする.

32                         move_uploaded_file( $_FILES["$tmp"]['tmp_name'], $filepath );

33                     }

34                     $imageUrl[$iCounter] = "${year}-${month}/img/$dd$localfilename";

35                     chmod($filepath, 0666);

36

37                     //どちらにしても、携帯電話用の画像はアップロードする.

38                     $filepath_s = getcwd();

39                     $localfilename = 10*$diarycount+$iCounter."_s".$extension;

40                     $filepath_s .= "/../db/diary/${year}-${month}/img/$dd$localfilename";

41                     createFiles( $_FILES["$tmp"]['tmp_name'], $filepath_s, $extension, 160 );

42                     chmod($filepath_s, 0666);

43                     //最近の携帯電話は、解像度が大きいので中くらいのサムネイル画像も作っておく。

44                     $filepath_tiny = getcwd();

45                     $localfilename_t = 10*$diarycount+$iCounter."_t".$extension;

46                     $filepath_tiny .= "/../db/diary/${year}-${month}/img/$dd$localfilename_t";

47                     createFiles( $_FILES["$tmp"]['tmp_name'], $filepath_tiny, $extension, 320);

48                     chmod($filepath_tiny, 0666);

49                 }

50             }

51         } else {

52             //アップロードされている状態で、さらに変化をさせなかったので、

53             //そのままURL情報を残しておく.でも削除ボタンがOnの時は、情報を消す.

54             if ( $imageIsDelete[$iCounter] != "on) {

55                 $imageUrl[$iCounter] = _hs($_REQUEST["imageurl$iCounter"]);

56             } else {

57                 //削除する.

58                 $x = _hs($_REQUEST["imageurl$iCounter"]);

59                 $url = "../db/diary/".$x;

60                 $imageUrl[$iCounter] = "";//まずURL情報を消す.

61                 //アップロードされたファイルを削除する.

62                 chown($url, "nobody");

63                 chmod($url, 0777);

64                 unlink($url);

65

66                 //サムネイル画像もあれば削除する.

67                 $urls_ex = strrchr( $url, '.);//携帯画像の拡張子

68                 $a = substr($url, 0, strlen($url)-strlen($urls_ex));

69                 $a .= "_s";

70                 $a .= $urls_ex;

71                 if ( file_exists( $a ) ) {

72                     chown($a, "nobody");

73                     chmod($a, 0777);

74                     unlink($a);

75                 }

76             }

77         }

78     }

id:inoue5231

コードまで書いていただきありがとうございます。

とても参考になりました。これで作ってみます。

2009/09/13 04:28:58

コメントはまだありません

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

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

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

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