ビギナーズ CGI

 初歩から始める初心者向けPerl-CGI講座  

| トップページ | CGI設置 | CGI作成 | 作成事例 | 設置用語 | 作成用語 | 関数リファレンス | FAQ | お問合せ |
  
CGIの設置方法
フリーで配布されているCGIを設置する際の手順や注意事項などの説明です。

CGI作成の初歩
初めてCGIを作る方向けの手順を簡単な例で説明しています。

CGI作成ヒント集
こういう事をする時は、どのように行えばいいのか?など具体的な事例を紹介します。

CGIの設置に関する用語
CGIの作成に関する用語
CGIの設置や作成時に使われている用語や関連知識を掲載しています。

設置に関するFAQ
作成に関するFAQ
設置や作成をする際に起こりがちなトラブルの説明と、よくある質問とその回答を掲載しています。


 
 



cgi-lib.pl を使って画像アップロード処理をする

下のようなフォームを使ってファイルをアップロードする処理をしてみます。


フォームのソースは以下のようになっています。



画像などのデータを送る場合エンコードのタイプを enctype="multipart/form-data" として下さい。
メソッドはPOST、送信先はサンプルスクリプトとし、ファイル入力フォームの name をサンプルでは
upfile としています。
この名前は、書き込み処理の部分で使う連想配列の名前となりますので、覚えておいて下さい。





【処理の流れ】



&ReadParse; を使うと、送信されたフォームデータを連想配列に入れてくれます。
引数無しで実行すると $in{'要素名'} に値が格納され、配列全体は @in で参照できます。
以下のサンプルソースでは ファイルの送信フォームの名前が upfile としていますので、
$in{'upfile'} に送信する画像データが入っています。

【参考】ReadParse で受け取りデータを連想配列に入れる



受信データが入った @in にはコンテンツタイプや、元のファイル名などが入っており、そこを
参照して受信したデータの拡張子を取出します。
中間の処理を飛ばし、受け取ったデータ @in をそのまま画面表示すると、どのようなデータ
が入っているかがわかると思います。
Content-type〜 に続く mime-type もしくは filename= の部分に入っている元のファイル名
などを探して拡張子を取出す作業をし、許可したいデータ以外が送信されていた場合は、その
後の書き込み処理を行わず、最後にエラーを表示します。



最後にファイルの書き出しを行いますが open OUT,">$fnme"; の $fnme 部分では拡張子
を含めたファイル名を指定し binmode OUT; の部分ではバイナリモードで扱う事を指定して
いますが、これを指定しなかった場合、転送時に画像をテキストモードで送ってしまった場合
のように画像が壊れる事がありますので(改行コード変換により)テキスト以外ではこれを指定
して下さい。
print OUT $in{'upfile'}; ではファイルの書き出しを行っていますが $in{'upfile'} にフォームから
受信した画像が入っています。
$in{'upfile'} としているのはファイルの入力フォームの名前を upfile としているからで、別の
名前を付けた場合は $in{'名前'} を使って書き込みを行います。





【サンプルソース】


上記の説明とサンプルソースを見比べながら、処理の流れを確認して下さい。








関連項目

・ CGIの作成に関する用語
・ CGI作成に関するFAQ


Beginner's CGI  - Copyright (C) 2003 aimix. All Rights Reserved -