アルファサード株式会社 代表取締役 野田 純生のブログ


MT::FileMgrでファイルの読み書きとか。


公開日 : 2008-06-03 14:30:30


発端はこれ。

何か古い記事が再掲載されてるということであれこれツッコミが入ってますね。

ベアワードのファイルハンドルはグローバルということですね。とはいえ、Googleとかで調べると実際出てくるのは比較的古いものが多いようで。

Movable Type(4.1)はどうしているんだろうと思って覗いてみたらみたらこんなコードが(App:CMSのcreate_dashboard_stats_file部分)。


    local *FOUT;
    if ( !open( FOUT, ">$file" ) ) {
        return;
    }

「local *FOUT;」とな。で、まぁそれは本題ではなくて、MTの場合はFileMgrを使うということなんだろうな。


use lib $ENV{MT_HOME} ? "$ENV{MT_HOME}/lib" : 'lib';

use MT;
use MT::FileMgr;

my $src    = 'Hello FileMgr!';
my $updata = 'Hello FileMgr! (Updated)';
my $out    = 'hello.txt';
my $put    = 'put.txt';
my $rename = 'rename.txt';
my $dir    = 'directory';

$out       = File::Spec->catdir( $dir, $out );
$put       = File::Spec->catdir( $dir, $put );
$rename    = File::Spec->catdir( $dir, $rename );

my $fmgr = MT::FileMgr->new( 'Local' ) or die MT::FileMgr->errstr;

print $fmgr->mkpath( $dir );

# directoryを作成する (成功した場合「1」)

print "¥n";

print $fmgr->exists( $dir );

# directoryが存在するか (存在する場合「1」)

print "¥n";

print $fmgr->can_write( $dir );

# directoryが書き込み可能か (書き込み可能な場合「1」)

print "¥n";

print $fmgr->put_data( $src, $out );

# directory/hello.txt に 'Hello FileMgr!' を書き込む (戻り値はバイト数)

print "¥n";

print $fmgr->put( $out , $put );

# directory/put.txt に hello.txt の中身を書き込む (戻り値はバイト数)

print "¥n";

print $fmgr->content_is_updated( $out, ¥$updata );

# directory/out.txt の中身(Hello FileMgr!)と $updata(Hello FileMgr! (Updated)) を比較する (値が異なる場合「1」)

print "¥n";

print $fmgr->rename( $put, $rename );

# directory/put.txt を directory/rename.txt にリネームする (成功した場合「1」)

print "¥n";

print $fmgr->get_data( $rename );

# directory/rename.txt の内容をprintする

実行結果


1
1
1
14
14
1
1
Hello FileMgr!

MT::FileMgr->new( 'Local' ) のところ、 MT::FileMgr->new( 'FTP',@args ) (@argsにFTPホスト、ログイン名、パスワードを入れる)とFTPサーバー上のファイル読み書きができる(らしい。そうなんだ...知らなかった)。

参考:

カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ