perl の CGI や PHP でファイルをアップロードする方法
フォームからファイルをアップロードして、そのファイル自体をサーバーに保存したり、あるいはファイルの内容をデータベースに反映したりするようなスクリプトも、作る機会がかなり多いので、手順をメモしておきます。
フォームの html
ファイルをアップロードさせるフォームの場合、通常の form 要素とは違って、enctype 属性をつける必要があります。
<form method="POST" action="upload.cgi" enctype="multipart/form-data"> <!-- ここにフォームの内容が入る --> <input type="file" name="uploadfile" value="" size="20" /> <input type="submit" value="アップロード" /> </form>
enctype 属性の他に注意する点としては、必ず POST メソッドを指定することが挙げられます。
GET メソッドではファイルのアップロードはできません。
アップされたファイルの受け取り方 (perl の場合)
僕自身は昔、まだ CGI.pm が perl の標準モジュールじゃなかった頃に作ったコードで、アップされたファイルの内容を受け取る処理をすることが多いですが、今は CGI.pm が標準モジュールとして最初から入っているので、これを使うのが手っ取り早いでしょう。
下記サイトが参考になります。
アップされたファイルの受け取り方 (PHP の場合)
PHP の場合は、非常に簡単です。
定義済変数 $_FILES に、アップロードされたファイルの情報が自動的に入ります。
例えば、
<form method="POST" action="upload.cgi" enctype="multipart/form-data">
<input type="file" name="uploadfile" value="" size="20" />
</form>
のように、アップロードするファイルの入力欄の名前を uploadfile とした場合、変数 $_FILES は以下のように参照できます。
- $_FILES['uploadfile']['name']
- 元のファイル名
- $_FILES['uploadfile']['type']
- ファイルの MIME-Type
- $_FILES['uploadfile']['size']
- ファイルのサイズ (バイト単位)
- $_FILES['uploadfile']['tmp_name']
- アップロードされたファイルのテンポラリ(一時)ファイルの名前(パス)
後は、サーバー上でファイルを保存するなら、 $_FILES['uploadfile']['tmp_name'] をどこかにコピーすれば良いし、ファイルが CSV 等で、その中身を見て何らかの処理をするなら、$_FILES['uploadfile']['tmp_name'] を開いて中身を読めば良いわけです。
- 関連するブログ記事
-
- 現在位置
- TOP > Web制作技術 > perl/CGI > perl の CGI や PHP でファイルをアップロードする方法
- 前のブログ記事
- SEO対策として使われる、perl の CGI や PHP に GET で渡す値を「/」(スラッシュ)で区切る方法 [2007年11月23日 12:50]
- 次のブログ記事
- 「お気に入りに追加」「ブックマークに追加」ボタンのまとめ [2007年11月25日 17:12]








コメント(2)
失礼ですが、実門がありまして、メール送ります。
CSVファイルをアップロードしてそのファイルを表示させたいのですが、どんな方法がありますか?
教えてください。
> 川崎 優樹さん
CSVファイルをアップロードする部分に関しては、このエントリ通りで大丈夫として、そのファイルを表示する部分ですが、一番単純なのは readfile 関数じゃないでしょうか。
readfile($_FILES['uploadfile']['tmp_name']);
とかで良いかと思います。
コメントする