2010年03月30日

perl/ PHPでのファイルのアップロード

 perlやPHPでファイルをアップロードして、サーバー、若しくは、データベースに保存する方法。

・フォーム

<form method="post" action="./upload.cgi" enctype="multipart/form-data">
<!-- フォーム部 -->
<input type="file" name="upfile" value="" size="30" />
<input type="submit" value="Upload" />
</form>


 enctype属性を付け、必ずpostで指定。getはダメ。

・perlでの処理

1.PerlのPackage、CGI、File::Copy、File::Basenameを読み込む
2.フォームからのデータをCGI.pmで受け取り、オブジェクト作成
3.サーバーに書き込むファイル名を設定
4.アップロードするファイルオープン、ファイルハンドルを作成
5.ファイルハンドルをファイルにコピー
6.CGIのオブジェクトをundef
7.アップロード後、表示HTMLへ遷移(必要な場合に応じて)

◎サンプルソース

use CGI;
use File::Copy;
use File::Basename;

my $q = new CGI;

my $fname = basename($q->param('upfile'));
my $path = ".";
my $newfile = "$path/$fname";

my $fh = $q->upload('upfile');
copy ($fh, "$newfile");
undef $q;

print "Location: uploader.html\n\n";


 ファイルに書き出せばアップロード可能であり、open/while/binmode/print/closeでも書き出せる。
 $fhはクローズする必要なく、スクリプト終了時にクローズされる。

・PHPでの処理

 PHPの場合、定義済変数$_FILESにアップロードされたファイル情報が自動的に入る。
 先述のフォームのファイルのname「upfile」の場合、

$_FILES['upfile']['name']

$_FILES['upfile']['type']

$_FILES['upfile']['size']

$_FILES['upfile']['tmp_name']


 保存するなら「$_FILES['upfile']['tmp_name'] をコピー、処理するなら「$_FILES['upfile']['tmp_name'] を開いて読み込ませる。


 、てな感じ。


 アリーヴェデルチ♪


posted by EINS at 21:50 | Comment(0) | TrackBack(0) | 備忘録 | この記事をはてなブックマークに登録 | この記事をYahoo!ブックマークに登録 | この記事をBuzzurlに登録 | この記事をニフティクリップに登録 | この記事をlivedoorクリップに登録 | この記事をdel.icio.usに登録 | トピックイットに投稿する
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。