perl-CGI(シェルスクリプト含)で、自分のドキュメントルート外のファイルのタイムスタンプを取得する

CGIとして実行するとwwwとか何かしらのユーザーとして実行するので、権限についての対処が必要となります。

以下の手順で行いました。

  • コピー先のフォルダのパーミッションを777にしておく
  • cp -pでタイムスタンプを保持したままコピー
  • statで取得
#!/usr/bin/perl

use strict;
use warnings;

#ファイルをコピー
system "cp -p /home/user_foo/bar.txt ./copy/bar.txt";

#更新時刻を取得
my $file_date = (stat'./copy/bar.txt')[9];
my ($sec, $min, $hour, $day, $month, $year) = localtime($file_date);

#表示確認
print "Content-Type: text/html; charset=Shift_JIS", "\n\n";
printf("%04d/%02d/%02d %02d:%02d:%02d\n", $year + 1900, $month + 1, $day, $hour, $min, $sec);
  • 参考にしたサイト

stat - ファイル情報の取得
UNIXコマンド - cp
http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B4%E6%96%B0%E6%99%82%E5%88%BB