perlを使用したcgiでの画像アップロードについて

このQ&Aのポイント
  • 私自身のHPで画像のアップロードが出来る様になればいいなと思い、cgiの勉強がてら調べていた所、下記HPがヒットしたのでサンプルスクリプトを使用し、アップロードをしたのですが正常にアップできませんでした。
  • テストとして、【36,864 バイト】とのjpgファイルをアップしたのですが、サーバには、【622 バイト】のjpgファイルが作成され、もちろん正常に表示されませんでした。
  • 以上が確認したことなのですが、原因がわかる方、ご教授お願いします。
回答を見る
  • ベストアンサー

perlを使用したcgiでの画像アップロードについて

いつもお世話になっております。 私自身のHPで画像のアップロードが出来る様になればいいなと思い、 cgiの勉強がてら調べていた所、下記HPがヒットしたのでサンプルスクリプトを使用し、アップロードをしたのですが正常にアップできませんでした。 http://www.aimix.jp/cgi/acccgilibupfile.html テストとして、【36,864 バイト】とのjpgファイルをアップしたのですが、 サーバには、【622 バイト】のjpgファイルが作成され、もちろん正常に表示されませんでした。 ※サーバはLinuxの自宅サーバを使用しております。 ※cgi-lib.plは導入済みです。 ※スクリプトの内容を一行だけ下記の様に変更しております。 【open OUT,">./img/$fnme";】にして、配下ディレクトリの【img】に保存するように設定。ディレクトリパーミッション777 その他はデフォルトの内容です。 ※cgiパーミッション755。 ※wrapper.cgiにてcgiのエラーはなし。 ※perlは、【which perl】コマンドにて/usr/local/bin/perlであることを確認済みです。 以上が確認したことなのですが、原因がわかる方、ご教授お願いします。

  • CGI
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

参考にされたサイトの【サンプルソース】は自分でリクエストのMIMEマルチパートの解析をやってますね。 マルチパート解析と添付ファイルの取り出しは Perl標準の CGI.pm でできます。 信頼性や今後の保守の手間を考えると、CGI.pm に乗り換えられた方が良いんじゃ無いかと思いますよ。 必要なら CGI.pm の使い方を思い出して具体的に書きますが、どうされますか?

sick65
質問者

お礼

素早い回答ありがとうございます。 お手間ではなければお願いいたします。 只、cgi.pmも使用してみたのですが、 $type = $query->uploadInfo(filename)->{'Content-Type'}; どのサンプルコードでも上記の、1行でwrapper.cgiにて、 【Can't use an undefined value as a HASH reference at ./up.cgi line 27. 】 が表示、もしくはinternal server errorが表示されてしまうのですが、なぜなんでしょうか? これもコメントアウトの説明では、【# MIMEタイプの取得】と書いてあったのですが・・・。 サーバの設定がなにか問題があるのでしょうか?

その他の回答 (1)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

No.1 です。 $query->uploadInfo(filename)->{'Content-Type'} とありますが、filename は $filename の間違いですよね? まず、それを直してください。 うまくいかなければ、 http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod を開いて uploadInfo を文字列検索してください。 その前後に、関係する事柄が書かれています。 ご自分のコードが間違って無いか確認してください。 特に、$filename に設定する内容が重要です。 それから、 http://chaichan.web.infoseek.co.jp/qa4000/qa4373.htm の中の 5:[回答] の内容も確認してみてください。 この件に関しては、そのCGIが動いている Webサーバーを疑うのはもう少し後で良いと思います。

sick65
質問者

お礼

返信ありがとうございます。 また、提示して頂いたサイトを読み込んでしまい、返信が送れすみません。 サイトの参考に注意し、0からスクリプトを組んでみました。 内容はつたないですが、結果的に満足いくものが作れました。 本当にありがとうございました。

関連するQ&A

  • plalaのcgiサーバへのPerlプログラムのUPについて

    windows上のローカルサーバで、自作のperlプログラムを動かし、きちんと動作したのでplalaのcgiアカウントをとり、UPした後、パーミッションもplalaの注意書きに書かれていたとおり、ディレクトリ以外のバイナリや、テキストを「704」に変更しました。 Perlへのパスも間違っておらず、プログラムミスということもないと思っています。 しかし、UPしたcgiファイルにアクセスしようとすると、「Internal Server Error」と表示され、パーミッションを「755」などにかえても、パーミッションがおかしいとでます。 いったいパーミッションを何にすればよいのでしょうか?

  • cgi(perl使用)でファイルを作る方法を教えてください

    こんにちは、 perlをやっています。 プロバイダ上にperlスクリプトを拡張子cgiでUPしています。 いまやりたいことがあるんです、それは ファイルをサーバ上の領域に作るというものです (ちなみにサーバの種類はUNIX系です) ファイルはゼロバイトの何も無いテキストファイルを作りたいんですが どのような関数を使えばファイルができるのでしょうか。 また、ファイルを作った後パーミッションの変更(chmodコマンドのような 動き)をする関数等があれば教えてください。

    • ベストアンサー
    • Perl
  • CGI掲示板アップロード、403エラー

    WEBサイト製作初心者のものです。 Perlで作られたフリーの掲示板をダウンロード、 借りたレンタルサーバーにcPanelをつかってCgi-bin にアップロード。 このようにすれば、レンタルサーバーにアクセス、 Index of のcgi-binを選択すれば、掲示板が表示されるはずですが 403 アクセス権のエラーと表示されてしまいます (cPanel付属のCRMソフトはインストール後Index ofから選択すれば正常に表示されます) 3つの条件 Perlのバージョン、アップロード先ディレクトリ、 フォルダごとのパーミッション設定は、推奨設定どおりになってます。 どうしてこのエラーが出るのでしょうか?

    • ベストアンサー
    • Perl
  • PerlのCGIの中で画像表示(html)

    PerlのCGIスクリプトの中で<img src="">タグで画像を表示させようとしても 表示されません。 URLは間違っていないと思います。ためしに同じディレクトリに画像を持ってきてもダメでした。 [ソース 部分] print << "HTML_1"; <tr> <td><img src="./test.jpg"></td> </tr> ・ ・ ・ HTML_1 ; どういう原因が考えられるでしょうか? また、同じようなことが以前にあった方、解決方法などお願いします。

  • CGIデータのアップロードについて

    CGI&perlの掲示板をカスタマイズして、 既に開設しているHPで使うために、 アップロードしようと試みるのですが、 受け付けてくれません。 初心者で、何が悪いのか良く解りません。 ちなみにHPは、infoseekです。 cgi-binのディレクトリへアップロードするのですが、 igo-bbs.cgi bbs.dat を受け付けてくれません。 cgi-lib.pl jcode.plはアップロード出来ます。 ほとほと、困っております。 よろしくご指導のほど、お願い申し上げます。

  • 人工無能チャットcgiが動かない。

    人工無能チャットcgiが動かない。 初めのページは表示されるが、発言すると「500 Error - Internal Server Error」「CGIもしくはSSIが正しく動作していません。」となる。 「人工無能ARISA/Multi」と言う、公開を停止してらっしゃるcgiを、開発者の方に無理を言ってダウンロードさせてもらいました。 CGI設置トラブル専用の掲示板などは、もうないようなので、自力で調べて出来るだけチェックしたのですが、動いてくれません。 原因を突き止めようとじぶんがやったことは、 ★パーミッションを見直す。 ★CGIスクリプトの文法を見直す。 ★アスキーモードにして、再転送。 ★CGIスクリプト1行目のperlのパス指定を見直す。 ★CGIを設置できるサーバかどうかの確認。 ★ディレクトリ構造の確認。 ★その他   以上です。 ★パーミッションを見直す。 「bot」というディレクトリ(パーミッション755)にファイルをアップロードしました。 アップロードしたファイルは、 arisamulti.cgi dic1.dat dic1b.dat dic2.dat dic3.dat dic3b.dat dic3b.dat dic4.dat jcode.pl です。 パーミッションは、arisamulti.cgiのみ705で、他は全て604にしています。これは、cgiの開発者の方が指定してくださっているパーミッションを設定したので、動くはずなのですが、動作しません。 サーバの関係でパーミッションを変えると動くことがあるのを知り、何パターンか試してみましたが、やはり動きませんでした。 ★CGIスクリプトの文法を見直す。 cgiの題名や背景などを少々編集したので;が抜けたり、背景にCSSを使ったことが駄目なのかと思い、文法チェッカかけてみましたが、異常なしでした。 ★アスキーモードにして、再転送。 FFFTPでアップロードしました。アップロードするとき、自動転送モードではなく、きちんとアスキーモードでアップロードしたので、バイナリにはなっていないはずです。 ★CGIスクリプト1行目のperlのパス指定を見直す。 サーバーのPerlへのパスは#!/usr/local/bin/perlです。atpagesの要求通りにしました。 全く動かないわけではないので、これが原因ではないと思います。 ★ディレクトリ構造の確認。 同じディレクトリにアップロードしてくださいと開発者の方が指定されていたので、その通りにしました。なので、ディレクトリ構造の間違いと言うことはないと思います。 ★CGIを設置できるサーバかどうか。 (http://atpages.jp/)というところの無料スペースにアップロードしました。URLは(http://www19.atpages.jp/zakurosakura/bot/arisamulti.cgi)です。 atpagesのwww19はCGI設置可能なので、ほかのcgiは問題なく動作しています。どのディレクトリにアップロードしても動くはずなのですが、このcgiだけ動きません。 atpagesのCGIガイドによるとPerlは「バージョンは、Perl 5です。」 と書いてありました。もしかしてバージョンが違うのでしょうか。 ★その他 ・必要なファイルはすべて転送されていた。 ・文字コードはShift_JISになっている。 ・エラーが出たページで更新して、ブラウザのキャッシュがないか確認。→なかった。 聞きたいこと 原因と、どうしたらcgiが動作するようになるかの対処法を教えていただきたいです。 かなりの初心者なので、具体的にどうすればいいか教えてくださると嬉しいです。 あと、なにか足りない情報があれば解る範囲で追記いたしますので、ご指摘ください。

    • ベストアンサー
    • CGI
  • CGIを使用してブラウザからファイルをアップロード

    CGI(perl)を使用して、ユーザー側からサーバーへファイルのアップロードをしたいと思います。 いろいろサンプルをみてみたのですがよくわからず…。 なのでごくシンプルなソースを教えていただきたいのです。 サイズが大きいのはアップさせないようにするとか、そういうものも一切なくして、ただ単純に サーバーへアップロードさせるだけのものが知りたいです。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIが動きません

    uranai.cgiのパーミッションは755です。 #!/usr/local/bin/perlではなく #!/usr/bin/perlを使っていますが、 これはサーバの説明にありました。 下記URL内の3ファイルをCGIフォルダに格納して サーバにアップしましたが、エラーになります。 cgi-binにする必要はないとのサーバ設定の記述にありました。 動かない理由がお分かりの方は、ご教授いただけると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 画像のところが×になる。。

    CLEVERSKINをダウンロードして解凍してフォルダ名はCLEVERのままです。デスクトップに貼り付けてあります。そして編集したのはbbsini.cgiとclever.cgiのみです。clever.cgiはパールの変更はなかったのでそのままで問題はbbb.cgiです。 # 送信先メールアドレス ____.01 # 管理者用マスタパスワード (英数字で8文字以内) ____.03 # アップロードディレクトリのURLパス ____.07 とあってアップロードディレクトリのパスを $ImgUrl = "HP名/clever/img/";としました。 そしてFFTTPで転送しパーミッションの変更をしました。ここはあってると思います。 呼び出しはhttp://サイト名/clever/clever.cgiで出てきます。チェックモードも全てOKなのです。が、ためしに画像をUPしてみたら画像の部分が×になるのです。あとの文章やスキン様の画像はちゃんと表示されるのですが。。

  • ApacheがPerlを作動してくれないのです。。。

    CGIテストのためにローカルにサーバーマシンを立てました。サーバーはApacheを使用しPHPとPerlをそれぞれインストールしました。 PHPは正常に動いてくれますがPerlだけが何回やってもyou dont have a permission ~~~と表示されます。 ためしにコマンドでperl -v と打ったら正常にPerlは作動していました。ちなみにPerlは C:Perl\bin\perlになっておりCGIスクリプトにも #!C:Perl\bin\perlと表示しています。又、confも各サイトを見てCGIが動くようにしっかり編集しました。 どうすれば動くようになるのでしょうか?